Bug Summary

File:builds/wireshark/wireshark/epan/dissectors/packet-ieee80211.c
Warning:line 21759, column 7
Value stored to 'tag_len' 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/2026-03-15-100342-3641-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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
30 * Jalil Moraney <[email protected]>
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
181/* Treat all Wi-Fi frames as being S1G frames where it is important */
182static bool_Bool treat_as_s1g;
183
184/* Table for reassembly of fragments. */
185static reassembly_table wlan_reassembly_table;
186
187/* Statistical data */
188static struct _wlan_stats wlan_stats;
189
190/*-------------------------------------
191 * UAT for WEP decoder
192 *-------------------------------------
193 */
194static uat_wep_key_record_t *uat_wep_key_records;
195static uat_t *wep_uat;
196static unsigned num_wepkeys_uat;
197
198static void *
199uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U___attribute__((unused)))
200{
201 uat_wep_key_record_t* new_key = (uat_wep_key_record_t *)n;
202 const uat_wep_key_record_t* old_key = (const uat_wep_key_record_t *)o;
203
204 new_key->string = g_strdup(old_key->string)g_strdup_inline (old_key->string);
205
206 return new_key;
207}
208
209static bool_Bool
210uat_wep_key_record_update_cb(void* r, char** err)
211{
212 uat_wep_key_record_t* rec = (uat_wep_key_record_t *)r;
213 decryption_key_t* dk;
214 unsigned dk_type;
215
216 if (rec->string == NULL((void*)0)) {
217 *err = g_strdup("Key can't be blank")g_strdup_inline ("Key can't be blank");
218 return false0;
219 }
220
221 *err = NULL((void*)0);
222 g_strstrip(rec->string)g_strchomp (g_strchug (rec->string));
223 dk = parse_key_string(rec->string, rec->key, err);
224
225 if (dk != NULL((void*)0)) {
226 dk_type = dk->type;
227 free_key_string(dk);
228 switch (dk_type) {
229 case DOT11DECRYPT_KEY_TYPE_WEP0:
230 case DOT11DECRYPT_KEY_TYPE_WEP_401:
231 case DOT11DECRYPT_KEY_TYPE_WEP_1042:
232 if (rec->key != DOT11DECRYPT_KEY_TYPE_WEP0) {
233 *err = g_strdup("Invalid WEP key format")g_strdup_inline ("Invalid WEP key format");
234 return false0;
235 }
236 break;
237 case DOT11DECRYPT_KEY_TYPE_WPA_PWD3:
238 if (rec->key != DOT11DECRYPT_KEY_TYPE_WPA_PWD3) {
239 *err = g_strdup("Invalid WPA_PWD key format")g_strdup_inline ("Invalid WPA_PWD key format");
240 return false0;
241 }
242 break;
243 case DOT11DECRYPT_KEY_TYPE_WPA_PSK4:
244 if (rec->key != DOT11DECRYPT_KEY_TYPE_WPA_PSK4) {
245 *err = g_strdup("Invalid WPA_PSK key format")g_strdup_inline ("Invalid WPA_PSK key format");
246 return false0;
247 }
248 break;
249 case DOT11DECRYPT_KEY_TYPE_TK6:
250 if (rec->key != DOT11DECRYPT_KEY_TYPE_TK6) {
251 *err = g_strdup("Invalid TK key format")g_strdup_inline ("Invalid TK key format");
252 return false0;
253 }
254 break;
255 case DOT11DECRYPT_KEY_TYPE_MSK7:
256 if (rec->key != DOT11DECRYPT_KEY_TYPE_MSK7) {
257 *err = g_strdup("Invalid MSK key format")g_strdup_inline ("Invalid MSK key format");
258 return false0;
259 }
260 break;
261 default:
262 *err = g_strdup("Invalid key format")g_strdup_inline ("Invalid key format");
263 return false0;
264 }
265 } else {
266 if (*err == NULL((void*)0)) {
267 *err = g_strdup("Invalid key format")g_strdup_inline ("Invalid key format");
268 }
269 return false0;
270 }
271 return true1;
272}
273
274static void
275uat_wep_key_record_free_cb(void*r)
276{
277 uat_wep_key_record_t* key = (uat_wep_key_record_t *)r;
278 g_free(key->string);
279}
280
281UAT_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"); }
282UAT_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; } }
283
284/* Stuff for the WEP/WPA/WPA2 decoder */
285static bool_Bool enable_decryption = true1;
286
287static void
288ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
289 proto_tree *tree, int tagged_parameters_len, int ftype,
290 association_sanity_check_t *association_sanity_check);
291
292
293static void
294save_proto_data(tvbuff_t *tvb, packet_info *pinfo, int offset, size_t size, int key);
295
296static void
297save_proto_data_value(packet_info *pinfo, unsigned value, int key);
298
299static void try_scan_tdls_keys(tvbuff_t *tvb, packet_info *pinfo, int offset);
300
301static void try_scan_ft_assoc_keys(packet_info *pinfo, const wlan_hdr_t *whdr);
302
303static tvbuff_t *
304try_decrypt(tvbuff_t *tvb, packet_info *pinfo, unsigned offset, unsigned len,
305 uint8_t *algorithm, uint32_t *sec_trailer,
306 PDOT11DECRYPT_KEY_ITEM used_key);
307
308static int weak_iv(unsigned char *iv);
309
310typedef struct mimo_control
311{
312 uint8_t nc;
313 uint8_t nr;
314 bool_Bool chan_width;
315 uint8_t grouping;
316 uint8_t coefficient_size;
317 uint8_t codebook_info;
318 uint8_t remaining_matrix_segment;
319} mimo_control_t;
320
321/* ************************************************************************* */
322/* Miscellaneous Constants */
323/* ************************************************************************* */
324#define SHORT_STR256 256
325
326typedef enum {
327 IS_DMG_KEY = 1,
328 IS_AP_KEY,
329 IS_CTRL_GRANT_OR_GRANT_ACK_KEY,
330 IS_S1G_KEY,
331 DECRYPTED_EAPOL_KEY,
332 DECRYPTED_GTK_KEY,
333 PACKET_DATA_KEY,
334 ASSOC_COUNTER_KEY,
335 STA_KEY,
336 BSSID_KEY,
337 NONCE_KEY,
338 GROUP_CIPHER_KEY,
339 CIPHER_KEY,
340 AKM_KEY,
341 MIC_KEY,
342 MIC_LEN_KEY,
343 KEY_VERSION_KEY,
344 KEY_LEN_KEY,
345 KEY_IV_KEY,
346 KEY_DATA_KEY,
347 KEY_DATA_LEN_KEY,
348 GTK_KEY,
349 GTK_LEN_KEY,
350 MDID_KEY,
351 FTE_R0KH_ID_KEY,
352 FTE_R0KH_ID_LEN_KEY,
353 FTE_R1KH_ID_KEY,
354 FTE_R1KH_ID_LEN_KEY,
355 FTE_ANONCE_KEY,
356 FTE_SNONCE_KEY,
357 FTE_MIC_KEY,
358 FTE_MIC_LEN_KEY,
359 FTE_TAG_KEY,
360 MDE_TAG_KEY,
361 RSNE_TAG_KEY,
362 RSNXE_TAG_KEY,
363 RDE_TAG_KEY,
364 GTK_SUBELEM_KEY_LEN_KEY,
365 PASN_DATA_KEY,
366 HE_CHANNEL_WIDTH_KEY,
367 FRAME_TYPE_KEY,
368 MLD_MAC_KEY,
369 MLO_LINK_COUNT,
370 MLO_LINK_ID_FIRST,
371 MLO_LINK_ID_LAST = MLO_LINK_ID_FIRST + DOT11DECRYPT_MAX_MLO_LINKS3 - 1,
372 MLO_LINK_MAC_FIRST,
373 MLO_LINK_MAC_LAST = MLO_LINK_MAC_FIRST + DOT11DECRYPT_MAX_MLO_LINKS3 - 1,
374 MLO_GTK_COUNT,
375 MLO_GTK_LINK_ID_FIRST,
376 MLO_GTK_LINK_ID_LAST = MLO_GTK_LINK_ID_FIRST + DOT11DECRYPT_MAX_MLO_LINKS3 - 1,
377 MLO_GTK_KEY_FIRST,
378 MLO_GTK_KEY_LAST = MLO_GTK_KEY_FIRST + DOT11DECRYPT_MAX_MLO_LINKS3 - 1,
379 MLO_GTK_KEY_LEN_FIRST,
380 MLO_GTK_KEY_LEN_LAST = MLO_GTK_KEY_LEN_FIRST + DOT11DECRYPT_MAX_MLO_LINKS3 - 1,
381} wlan_proto_key_t;
382
383/* ************************************************************************* */
384/* Define some very useful macros that are used to analyze frame types etc. */
385/* ************************************************************************* */
386
387/*
388 * Fetch the frame control field and swap it if needed. "fcf" and "tvb"
389 * must be valid variables.
390 */
391#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) ? \
392 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))))
: \
393 tvb_get_letohs(tvb, off))
394
395/*
396 * Extract the fragment number and sequence number from the sequence
397 * control field.
398 */
399#define SEQCTL_FRAGMENT_NUMBER(x)((x) & 0x000F) ((x) & 0x000F)
400#define SEQCTL_SEQUENCE_NUMBER(x)(((x) & 0xFFF0) >> 4) (((x) & 0xFFF0) >> 4)
401
402/*
403 * Extract subfields from the QoS control field.
404 */
405#define QOS_TID(x)((x) & 0x000F) ((x) & 0x000F)
406#define QOS_PRIORITY(x)((x) & 0x0007) ((x) & 0x0007)
407#define QOS_EOSP(x)(((x) & 0x0010) >> 4) (((x) & 0x0010) >> 4) /* end of service period */
408#define QOS_ACK_POLICY(x)(((x) & 0x0060) >> 5) (((x) & 0x0060) >> 5)
409#define QOS_AMSDU_PRESENT(x)(((x) & 0x0080) >> 6) (((x) & 0x0080) >> 6)
410#define QOS_FIELD_CONTENT(x)(((x) & 0xFF00) >> 8) (((x) & 0xFF00) >> 8)
411#define QOS_SCALING_FACTOR(x)(((x) & 0xD0) >> 6) (((x) & 0xD0) >> 6)
412#define QOS_UNSCALED_VALUE(x)((x) & 0x3F) ((x) & 0x3F)
413#define QOS_MESH_CONTROL_PRESENT(x)(((x) & 0x0100) >> 8) (((x) & 0x0100) >> 8)
414
415#define QOS_FLAG_EOSP0x0010 0x0010
416
417/*
418 * Extract subfields from the result of QOS_FIELD_CONTENT().
419 */
420#define QOS_PS_BUF_STATE_INDICATED(x)(((x) & 0x02) >> 1) (((x) & 0x02) >> 1)
421#define QOS_PS_HIGHEST_PRI_BUF_AC(x)(((x) & 0x0C) >> 2) (((x) & 0x0C) >> 2)
422#define QOS_PS_QAP_BUF_LOAD(x)(((x) & 0xF0) >> 4) (((x) & 0xF0) >> 4)
423
424/*
425 * Bits from the HT Control field.
426 * 802.11-2016 9.2.4.6, and 802.11ax draft, 32 bits.
427 */
428#define HTC_VHT0x00000001 0x00000001
429#define HTC_HE0x00000002 0x00000002
430#define HTC_MRQ0x00000004 0x00000004
431#define HTC_UNSOLICITED_MFB0x20000000 0x20000000
432
433/*
434 * Extract subfields from the HT Control field.
435 */
436#define HTC_LAC(htc)((htc) & 0xFE) ((htc) & 0xFE)
437#define HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) (((htc) >> 2) & 0xF)
438#define HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE) (HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) == 0xE)
439#define HTC_LAC_MAI_MRQ(htc)(((((htc) >> 2) & 0xF)) & 0x1) ((HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF)) & 0x1)
440#define HTC_LAC_MAI_MSI(htc)(((((htc) >> 2) & 0xF) >> 1) & 0x7) ((HTC_LAC_MAI(htc)(((htc) >> 2) & 0xF) >> 1) & 0x7)
441#define HTC_LAC_MFSI(htc)(((htc) >> 4) & 0x7) (((htc) >> 4) & 0x7)
442#define HTC_LAC_ASEL_CMD(htc)(((htc) >> 9) & 0x7) (((htc) >> 9) & 0x7)
443#define HTC_LAC_ASEL_DATA(htc)(((htc) >> 12) & 0xF) (((htc) >> 12) & 0xF)
444#define HTC_LAC_MFB(htc)(((htc) >> 9) & 0x7F) (((htc) >> 9) & 0x7F)
445#define HTC_CAL_POS(htc)(((htc) >> 16) & 0x3) (((htc) >> 16) & 0x3)
446#define HTC_CAL_SEQ(htc)(((htc) >> 18) & 0x3) (((htc) >> 18) & 0x3)
447#define HTC_CSI_STEERING(htc)(((htc) >> 22) & 0x3) (((htc) >> 22) & 0x3)
448#define HTC_NDP_ANN(htc)(((htc) >> 24) & 0x1) (((htc) >> 24) & 0x1)
449#define HTC_AC_CONSTRAINT(htc)(((htc) >> 30) & 0x1) (((htc) >> 30) & 0x1)
450#define HTC_RDG_MORE_PPDU(htc)(((htc) >> 31) & 0x1) (((htc) >> 31) & 0x1)
451
452#define HTC_MFB(htc)(((htc) >> 9) & 0x7FFF) (((htc) >> 9) & 0x7FFF)
453
454/* VHT-MCS = 15, NUM_STS = 7 */
455#define HTC_NO_FEEDBACK_PRESENT(mfb)(((mfb) & 0x7F) == 0x7F) (((mfb) & 0x7F) == 0x7F)
456
457/*
458 * Extract subfields from the key octet in WEP-encrypted frames.
459 */
460#define KEY_OCTET_WEP_KEY(x)(((x) & 0xC0) >> 6) (((x) & 0xC0) >> 6)
461
462#define KEY_EXTIV0x20 0x20
463#define EXTIV_LEN8 8
464
465/*
466 * Bits from the Mesh Flags field
467 */
468#define MESH_FLAGS_ADDRESS_EXTENSION0x3 0x3
469
470/* ************************************************************************* */
471/* Constants used to identify cooked frame types */
472/* ************************************************************************* */
473#define MGT_FRAME0x00 0x00 /* Frame type is management */
474#define CONTROL_FRAME0x01 0x01 /* Frame type is control */
475#define DATA_FRAME0x02 0x02 /* Frame type is Data */
476#define EXTENSION_FRAME0x03 0x03 /* Frame type is Extension */
477
478#define DATA_SHORT_HDR_LEN24 24
479#define DATA_LONG_HDR_LEN30 30
480#define MGT_FRAME_HDR_LEN24 24 /* Length of Management frame-headers */
481
482/* ************************************************************************* */
483/* Logical field codes (IEEE 802.11 encoding of tags) */
484/* ************************************************************************* */
485const value_string ie_tag_num_vals[] = {
486 { TAG_SSID0, "SSID parameter set" },
487 { TAG_SUPP_RATES1, "Supported Rates" },
488 { TAG_FH_PARAMETER2, "FH Parameter set" },
489 { TAG_DS_PARAMETER3, "DS Parameter set" },
490 { TAG_CF_PARAMETER4, "CF Parameter set" },
491 { TAG_TIM5, "Traffic Indication Map (TIM)" },
492 { TAG_IBSS_PARAMETER6, "IBSS Parameter set" },
493 { TAG_COUNTRY_INFO7, "Country Information" },
494 { TAG_FH_HOPPING_PARAMETER8, "Hopping Pattern Parameters" },
495 { TAG_FH_HOPPING_TABLE9, "Hopping Pattern Table" },
496 { TAG_REQUEST10, "Request" },
497 { TAG_QBSS_LOAD11, "QBSS Load Element" },
498 { TAG_EDCA_PARAM_SET12, "EDCA Parameter Set" },
499 { TAG_TSPEC13, "Traffic Specification" },
500 { TAG_TCLAS14, "Traffic Classification" },
501 { TAG_SCHEDULE15, "Schedule" },
502 { TAG_CHALLENGE_TEXT16, "Challenge text" },
503 { TAG_POWER_CONSTRAINT32, "Power Constraint" },
504 { TAG_POWER_CAPABILITY33, "Power Capability" },
505 { TAG_TPC_REQUEST34, "TPC Request" },
506 { TAG_TPC_REPORT35, "TPC Report" },
507 { TAG_SUPPORTED_CHANNELS36, "Supported Channels" },
508 { TAG_CHANNEL_SWITCH_ANN37, "Channel Switch Announcement" },
509 { TAG_MEASURE_REQ38, "Measurement Request" },
510 { TAG_MEASURE_REP39, "Measurement Report" },
511 { TAG_QUIET40, "Quiet" },
512 { TAG_IBSS_DFS41, "IBSS DFS" },
513 { TAG_ERP_INFO42, "ERP Information" },
514 { TAG_TS_DELAY43, "TS Delay" },
515 { TAG_TCLAS_PROCESS44, "TCLAS Processing" },
516 { TAG_HT_CAPABILITY45, "HT Capabilities" },
517 { TAG_QOS_CAPABILITY46, "QoS Capability" },
518 { TAG_ERP_INFO_OLD47, "ERP Information" }, /* Reserved... */
519 { TAG_RSN_IE48, "RSN Information" },
520 { TAG_EXT_SUPP_RATES50, "Extended Supported Rates" },
521 { TAG_AP_CHANNEL_REPORT51, "AP Channel Report" },
522 { TAG_NEIGHBOR_REPORT52, "Neighbor Report" },
523 { TAG_RCPI53, "RCPI" },
524 { TAG_MOBILITY_DOMAIN54, "Mobility Domain" },
525 { TAG_FAST_BSS_TRANSITION55, "Fast BSS Transition" },
526 { TAG_TIMEOUT_INTERVAL56, "Timeout Interval" },
527 { TAG_RIC_DATA57, "RIC Data" },
528 { TAG_DSE_REG_LOCATION58, "DSE Registered Location" },
529 { TAG_SUPPORTED_OPERATING_CLASSES59, "Supported Operating Classes" },
530 { TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60, "Extended Channel Switch Announcement" },
531 { TAG_HT_OPERATION61, "HT Operation" },
532 { TAG_SECONDARY_CHANNEL_OFFSET62, "Secondary Channel Offset (802.11n D1.10)" },
533 { TAG_BSS_AVG_ACCESS_DELAY63, "BSS Average Access Delay" },
534 { TAG_ANTENNA64, "Antenna" },
535 { TAG_RSNI65, "RSNI" },
536 { TAG_MEASURE_PILOT_TRANS66, "Measurement Pilot Transmission" },
537 { TAG_BSS_AVB_ADM_CAPACITY67, "BSS Available Admission Capacity" },
538 { TAG_IE_68_CONFLICT68, "BSS AC Access Delay/WAPI Parameter Set" },
539 { TAG_TIME_ADV69, "Time Advertisement" },
540 { TAG_RM_ENABLED_CAPABILITY70, "RM Enabled Capabilities" },
541 { TAG_MULTIPLE_BSSID71, "Multiple BSSID" },
542 { TAG_20_40_BSS_CO_EX72, "20/40 BSS Coexistence" },
543 { TAG_20_40_BSS_INTOL_CH_REP73, "20/40 BSS Intolerant Channel Report" }, /* IEEE P802.11n/D6.0 */
544 { TAG_OVERLAP_BSS_SCAN_PAR74, "Overlapping BSS Scan Parameters" }, /* IEEE P802.11n/D6.0 */
545 { TAG_RIC_DESCRIPTOR75, "RIC Descriptor" },
546 { TAG_MMIE76, "Management MIC" },
547 { TAG_EVENT_REQUEST78, "Event Request" },
548 { TAG_EVENT_REPORT79, "Event Report" },
549 { TAG_DIAGNOSTIC_REQUEST80, "Diagnostic Request" },
550 { TAG_DIAGNOSTIC_REPORT81, "Diagnostic Report" },
551 { TAG_LOCATION_PARAMETERS82, "Location Parameters" },
552 { TAG_NO_BSSID_CAPABILITY83, "Non Transmitted BSSID Capability" },
553 { TAG_SSID_LIST84, "SSID List" },
554 { TAG_MULTIPLE_BSSID_INDEX85, "Multiple BSSID Index" },
555 { TAG_FMS_DESCRIPTOR86, "FMS Descriptor" },
556 { TAG_FMS_REQUEST87, "FMS Request" },
557 { TAG_FMS_RESPONSE88, "FMS Response" },
558 { TAG_QOS_TRAFFIC_CAPABILITY89, "QoS Traffic Capability" },
559 { TAG_BSS_MAX_IDLE_PERIOD90, "BSS Max Idle Period" },
560 { TAG_TFS_REQUEST91, "TFS Request" },
561 { TAG_TFS_RESPONSE92, "TFS Response" },
562 { TAG_WNM_SLEEP_MODE93, "WNM-Sleep Mode" },
563 { TAG_TIM_BROADCAST_REQUEST94, "TIM Broadcast Request" },
564 { TAG_TIM_BROADCAST_RESPONSE95, "TIM Broadcast Response" },
565 { TAG_COLLOCATED_INTER_REPORT96, "Collocated Interference Report" },
566 { TAG_CHANNEL_USAGE97, "Channel Usage" },
567 { TAG_TIME_ZONE98, "Time Zone" },
568 { TAG_DMS_REQUEST99, "DMS Request" },
569 { TAG_DMS_RESPONSE100, "DMS Response" },
570 { TAG_LINK_IDENTIFIER101, "Link Identifier" },
571 { TAG_WAKEUP_SCHEDULE102, "Wakeup Schedule" },
572 { TAG_CHANNEL_SWITCH_TIMING104, "Channel Switch Timing" },
573 { TAG_PTI_CONTROL105, "PTI Control" },
574 { TAG_PU_BUFFER_STATUS106, "PU Buffer Status" },
575 { TAG_INTERWORKING107, "Interworking" },
576 { TAG_ADVERTISEMENT_PROTOCOL108, "Advertisement Protocol"},
577 { TAG_EXPIDITED_BANDWIDTH_REQ109, "Expedited Bandwidth Request" },
578 { TAG_QOS_MAP_SET110, "QoS Map Set" },
579 { TAG_ROAMING_CONSORTIUM111, "Roaming Consortium" },
580 { TAG_EMERGENCY_ALERT_ID112, "Emergency Alert Identifier" },
581 { TAG_MESH_CONFIGURATION113, "Mesh Configuration" },
582 { TAG_MESH_ID114, "Mesh ID" },
583 { TAG_MESH_LINK_METRIC_REPORT115, "Mesh Link Metric Report" },
584 { TAG_CONGESTION_NOTIFICATION116, "Congestion Notification" },
585 { TAG_MESH_PEERING_MGMT117, "Mesh Peering Management" },
586 { TAG_MESH_CHANNEL_SWITCH118, "Mesh Channel Switch Parameters" },
587 { TAG_MESH_AWAKE_WINDOW119, "Mesh Awake Window" },
588 { TAG_BEACON_TIMING120, "Beacon Timing" },
589 { TAG_MCCAOP_SETUP_REQUEST121, "MCCAOP Setup Request" },
590 { TAG_MCCAOP_SETUP_REPLY122, "MCCAOP SETUP Reply" },
591 { TAG_MCCAOP_ADVERTISEMENT123, "MCCAOP Advertisement" },
592 { TAG_MCCAOP_TEARDOWN124, "MCCAOP Teardown" },
593 { TAG_GANN125, "Gate Announcement" },
594 { TAG_RANN126, "Root Announcement" },
595 { TAG_EXTENDED_CAPABILITIES127, "Extended Capabilities" },
596 { TAG_AGERE_PROPRIETARY128, "Agere Proprietary" },
597 { TAG_MESH_PREQ130, "Path Request" },
598 { TAG_MESH_PREP131, "Path Reply" },
599 { TAG_MESH_PERR132, "Path Error" },
600 { TAG_CISCO_CCX1_CKIP133, "Cisco CCX1 CKIP + Device Name" },
601 { TAG_CISCO_CCX2136, "Cisco CCX2" },
602 { TAG_PXU137, "Proxy Update" },
603 { TAG_PXUC138, "Proxy Update Confirmation"},
604 { TAG_AUTH_MESH_PEERING_EXCH139, "Authenticated Mesh Peering Exchange" },
605 { TAG_MIC140, "MIC (Message Integrity Code)" },
606 { TAG_DESTINATION_URI141, "Destination URI" },
607 { TAG_U_APSD_COEX142, "U-APSD Coexistence" },
608 { TAG_WAKEUP_SCHEDULE_AD143, "Wakeup Schedule 802.11ad" },
609 { TAG_EXTENDED_SCHEDULE144, "Extended Schedule" },
610 { TAG_STA_AVAILABILITY145, "STA Availability" },
611 { TAG_DMG_TSPEC146, "DMG TSPEC" },
612 { TAG_NEXT_DMG_ATI147, "Next DMG ATI" },
613 { TAG_DMG_CAPABILITIES148, "DMG Capabilities" },
614 { TAG_CISCO_CCX3149, "Cisco Unknown 95" },
615 { TAG_CISCO_VENDOR_SPECIFIC150, "Vendor Specific" },
616 { TAG_DMG_OPERATION151, "DMG Operating" },
617 { TAG_DMG_BSS_PARAMETER_CHANGE152, "DMG BSS Parameter Change" },
618 { TAG_DMG_BEAM_REFINEMENT153, "DMG Beam Refinement" },
619 { TAG_CHANNEL_MEASURMENT_FB154, "Channel Measurement Feedback" },
620 { TAG_AWAKE_WINDOW157, "Awake Window" },
621 { TAG_MULTI_BAND158, "Multi Band" },
622 { TAG_ADDBA_EXT159, "ADDBA Extension" },
623 { TAG_NEXTPCP_LIST160, "NEXTPCP List" },
624 { TAG_PCP_HANDOVER161, "PCP Handover" },
625 { TAG_DMG_LINK_MARGIN162, "DMG Link Margin" },
626 { TAG_SWITCHING_STREAM163, "Switching Stream" },
627 { TAG_SESSION_TRANSMISSION164, "Session Transmission" },
628 { TAG_DYN_TONE_PAIR_REP165, "Dynamic Tone Pairing Report" },
629 { TAG_CLUSTER_REP166, "Cluster Report" },
630 { TAG_RELAY_CAPABILITIES167, "Relay Capabilities" },
631 { TAG_RELAY_TRANSFER_PARAM168, "Relay Transfer Parameter" },
632 { TAG_BEAMLINK_MAINTENANCE169, "Beamlink Maintenance" },
633 { TAG_MULTIPLE_MAC_SUBLAYERS170, "Multiple MAC Sublayers" },
634 { TAG_U_PID171, "U-PID" },
635 { TAG_DMG_LINK_ADAPTION_ACK172, "DMG Link Adaption Acknowledgment" },
636 { TAG_SYMBOL_PROPRIETARY173, "Symbol Proprietary" },
637 { TAG_MCCAOP_ADVERTISEMENT_OV174, "MCCAOP Advertisement Overview" },
638 { TAG_QUIET_PERIOD_REQ175, "Quiet Period Request" },
639 { TAG_QUIET_PERIOD_RES177, "Quiet Period Response" },
640 { TAG_ECAPC_POLICY182, "ECAPC Policy" },
641 { TAG_CLUSTER_TIME_OFFSET183, "Cluster Time Offset" },
642 { TAG_INTRA_ACCESS_CAT_PRIO184, "Intra-Access Category Priority" },
643 { TAG_SCS_DESCRIPTOR185, "SCS Descriptor" },
644 { TAG_ANTENNA_SECTOR_ID190, "Antenna Sector ID" },
645 { TAG_VHT_CAPABILITY191, "VHT Capabilities" },
646 { TAG_VHT_OPERATION192, "VHT Operation" },
647 { TAG_EXT_BSS_LOAD193, "Extended BSS Load" },
648 { TAG_WIDE_BW_CHANNEL_SWITCH194, "Wide Bandwidth Channel Switch" },
649 { TAG_TX_PWR_ENVELOPE195, "Tx Power Envelope" },
650 { TAG_CHANNEL_SWITCH_WRAPPER196, "Channel Switch Wrapper" },
651 { TAG_OPERATING_MODE_NOTIFICATION199, "Operating Mode Notification" },
652 { TAG_REDUCED_NEIGHBOR_REPORT201, "Reduced Neighbor Report" },
653 { TAG_FINE_TIME_MEASUREMENT_PARAM206, "Fine Time Measurement Params" },
654 { TAG_S1G_OPEN_LOOP_LINK_MARGIN_INDEX207, "S1G Open-Loop Link Margin Index" },
655 { TAG_RPS208, "RPS" },
656 { TAG_PAGE_SLICE209, "Page Slice" },
657 { TAG_AID_REQUEST210, "AID Request" },
658 { TAG_AID_RESPONSE211, "AID Response" },
659 { TAG_S1G_SECTOR_OPERATION212, "Sector Operation" },
660 { TAG_S1G_BEACON_COMPATIBILITY213, "S1G Beacon Compatibility" },
661 { TAG_SHORT_BEACON_INTERVAL214, "Short Beacon Interval" },
662 { TAG_CHANGE_SEQUENCE215, "Change Sequence" },
663 { TAG_TWT216, "Target Wake Time" },
664 { TAG_S1G_CAPABILITIES217, "S1G Capabilities" },
665 { TAG_SUBCHANNEL_SELECTIVE_TRANSMISSION220, "Subchannel Selective Transmission" },
666 { TAG_VENDOR_SPECIFIC_IE221, "Vendor Specific" },
667 { TAG_AUTHENTICATION_CONTROL222, "Authentication Control" },
668 { TAG_TSF_TIMER_ACCURACY223, "TSF Timer Accuracy" },
669 { TAG_S1G_RELAY224, "S1G Relay" },
670 { TAG_REACHABLE_ADDRESS225, "Reachable Address" },
671 { TAG_S1G_RELAY_DISCOVERY226, "S1G Relay Discovery" },
672 { TAG_AID_ANNOUNCEMENT228, "AID Announcement" },
673 { TAG_PV1_PROBE_RESPONSE_OPTION229, "PV1 Probe Response Option" },
674 { TAG_EL_OPERATION230, "EL Operation" },
675 { TAG_SECTORIZED_GROUP_ID_LIST231, "Sectorized Group ID List" },
676 { TAG_S1G_OPERATION232, "S1G Operation" },
677 { TAG_HEADER_COMPRESSION233, "Header Compression" },
678 { TAG_SST_OPERATION234, "SST Operation" },
679 { TAG_MAD235, "MAD" },
680 { TAG_S1G_RELAY_ACTIVATION236, "S1G Relay Activation" },
681 { TAG_CAG_NUMBER237, "CAG Number"},
682 { TAG_AP_CSN239, "AP-CSN"},
683 { TAG_FILS_INDICATION240, "FILS Indication"},
684 { TAG_DIFF_INITIAL_LINK_SETUP241, "Differential Initial Link Setup"},
685 { TAG_FRAGMENT242, "Fragment"},
686 { TAG_RSNX244, "RSN eXtension"},
687 { TAG_ELEMENT_ID_EXTENSION255, "Element ID Extension" },
688 { 0, NULL((void*)0) }
689};
690
691static 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) }
;
692
693#define ETAG_ASSOC_DELAY_INFO1 1
694#define ETAG_FILS_REQ_PARAMS2 2
695#define ETAG_FILS_KEY_CONFIRM3 3
696#define ETAG_FILS_SESSION4 4
697#define ETAG_FILS_HLP_CONTAINER5 5
698#define ETAG_FILS_IP_ADDRESS_ASSIGN6 6
699#define ETAG_KEY_DELIVERY7 7
700#define ETAG_FILS_WRAPPED_DATA8 8
701#define ETAG_FTM_SYNC_INFO9 9
702#define ETAG_EXTENDED_REQUEST10 10
703#define ETAG_ESTIMATED_SERVICE_PARAM11 11
704#define ETAG_FILS_PUBLIC_KEY12 12
705#define ETAG_FILS_NONCE13 13
706#define ETAG_FUTURE_CHANNEL_GUIDANCE14 14
707
708/* RFC 8110 */
709#define ETAG_OWE_DH_PARAMETER32 32
710
711#define ETAG_PASSWORD_IDENTIFIER33 33
712
713/* 802.11AX defined tags */
714#define ETAG_HE_CAPABILITIES35 35
715#define ETAG_HE_OPERATION36 36
716#define ETAG_UORA_PARAMETER_SET37 37
717#define ETAG_MU_EDCA_PARAMETER_SET38 38
718#define ETAG_SPATIAL_REUSE_PARAMETER_SET39 39
719#define ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41 41
720#define ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42 42
721#define ETAG_QUIET_TIME_PERIOD_SETUP43 43
722#define ETAG_ESS_REPORT45 45
723#define ETAG_OPS46 46
724#define ETAG_HE_BSS_LOAD47 47
725#define ETAG_MAX_CHANNEL_SWITCH_TIME52 52
726#define ETAG_OCI54 54
727#define ETAG_MULTIPLE_BSSID_CONFIGURATION55 55
728#define ETAG_NON_INHERITANCE56 56
729#define ETAG_KNOWN_BSSID57 57
730#define ETAG_SHORT_SSID58 58
731#define ETAG_HE_6GHZ_BAND_CAPABILITIES59 59
732#define ETAG_UL_MU_POWER_CAPABILITIES60 60
733#define ETAG_MSCS_DESCRIPTOR_ELEMENT88 88
734#define ETAG_TCLAS_MASK89 89
735#define ETAG_REJECTED_GROUPS92 92
736#define ETAG_ANTI_CLOGGING_TOKEN93 93
737
738/* 802.11az */
739#define ETAG_SECURE_LTF_PARAMETERS94 94
740#define ETAG_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT95 95
741#define ETAG_RSTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT96 96
742#define ETAG_PASSIVE_TB_RANGING_LCI_TABLE_ELEMENT97 97
743#define ETAG_ISTA_AVAILABILITY_WINDOW98 98
744#define ETAG_RSTA_AVAILABILITY_WINDOW99 99
745#define ETAG_PASN_PARAMETERS100 100
746#define ETAG_RANGING_PARAMETERS101 101
747#define ETAG_DIRECTION_MEASUREMENT_RESULTS102 102
748#define ETAG_MULTIPLE_AOD_FEEDBACK103 103
749#define ETAG_MULTIPLE_BEST_AWV_ID104 104
750#define ETAG_LOS_LIKELIHOOD105 105
751#define ETAG_EHT_OPERATION106 106
752#define ETAG_MULTI_LINK107 107
753#define ETAG_EHT_CAPABILITIES108 108
754#define ETAG_TID_TO_LINK_MAPPING109 109
755#define ETAG_MULTI_LINK_TRAFFIC110 110
756#define ETAG_QOS_CHARACTERISTICS113 113
757#define ETAG_AKM_SUITE_SELECTOR114 114
758#define ETAG_MLO_LINK_INFORMATION133 133
759#define ETAG_AID_BITMAP134 134
760#define ETAG_BANDWIDTH_INDICATION135 135
761#define ETAG_NONAP_STA_REGULATORY_CONNECT137 137
762
763
764static const value_string tag_num_vals_eid_ext[] = {
765 { ETAG_ASSOC_DELAY_INFO1, "Association Delay Info" },
766 { ETAG_FILS_REQ_PARAMS2, "FILS Request Parameters" },
767 { ETAG_FILS_KEY_CONFIRM3, "FILS Key Confirmation" },
768 { ETAG_FILS_SESSION4, "FILS Session" },
769 { ETAG_FILS_HLP_CONTAINER5, "FILS HLP Container" },
770 { ETAG_FILS_IP_ADDRESS_ASSIGN6, "FILS IP Address Assignment" },
771 { ETAG_KEY_DELIVERY7, "Key Delivery" },
772 { ETAG_FILS_WRAPPED_DATA8, "Wrapped Data" },
773 { ETAG_FTM_SYNC_INFO9, "FTM Synchronization Information" },
774 { ETAG_EXTENDED_REQUEST10, "Extended Request" },
775 { ETAG_ESTIMATED_SERVICE_PARAM11, "Estimated Service Parameters" },
776 { ETAG_FILS_PUBLIC_KEY12, "FILS Public Key" },
777 { ETAG_FILS_NONCE13, "FILS Nonce" },
778 { ETAG_FUTURE_CHANNEL_GUIDANCE14, "Future Channel Guidance" },
779 { ETAG_OWE_DH_PARAMETER32, "OWE Diffie-Hellman Parameter" },
780 { ETAG_PASSWORD_IDENTIFIER33, "Password Identifier" },
781 { ETAG_HE_CAPABILITIES35, "HE Capabilities" },
782 { ETAG_HE_OPERATION36, "HE Operation" },
783 { ETAG_UORA_PARAMETER_SET37, "UORA Parameter Set" },
784 { ETAG_MU_EDCA_PARAMETER_SET38, "MU EDCA Parameter Set" },
785 { ETAG_SPATIAL_REUSE_PARAMETER_SET39, "Spatial Reuse Parameter Set" },
786 { ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41, "NDP Feedback Report Parameter Set" },
787 { ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42, "BSS Color Change Announcement" },
788 { ETAG_QUIET_TIME_PERIOD_SETUP43, "Quiet Time Period Setup" },
789 { ETAG_ESS_REPORT45, "ESS Report" },
790 { ETAG_OPS46, "Opportunistic Power Save" },
791 { ETAG_HE_BSS_LOAD47, "HE BSS Load" },
792 { ETAG_MAX_CHANNEL_SWITCH_TIME52, "Max Channel Switch Time" },
793 { ETAG_OCI54, "Operating Channel Information" },
794 { ETAG_MULTIPLE_BSSID_CONFIGURATION55, "Multiple BSSID Configuration" },
795 { ETAG_NON_INHERITANCE56, "Non-Inheritance"},
796 { ETAG_KNOWN_BSSID57, "Known BSSID" },
797 { ETAG_SHORT_SSID58, "Short SSID" },
798 { ETAG_HE_6GHZ_BAND_CAPABILITIES59, "HE 6 GHz Band Capabilities" },
799 { ETAG_UL_MU_POWER_CAPABILITIES60, "UL MU Power Capabilities" },
800 { ETAG_MSCS_DESCRIPTOR_ELEMENT88, "MSCS Descriptor Element" },
801 { ETAG_TCLAS_MASK89, "TCLAS Mask" },
802 { ETAG_REJECTED_GROUPS92, "Rejected Groups" },
803 { ETAG_ANTI_CLOGGING_TOKEN93, "Anti-Clogging Token Container" },
804 /* 802.11az */
805 { ETAG_SECURE_LTF_PARAMETERS94, "Secure LTF Parameters" },
806 { ETAG_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT95, "ISTA Passive TB Ranging Measurement Report" },
807 { ETAG_RSTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT96, "RSTA Passive TB Ranging Measurement Report" },
808 { ETAG_PASSIVE_TB_RANGING_LCI_TABLE_ELEMENT97, "Passive TB Ranging LCI Table element" },
809 { ETAG_ISTA_AVAILABILITY_WINDOW98, "ISTA Availability Window" },
810 { ETAG_RSTA_AVAILABILITY_WINDOW99, "RSTA Availability Window" },
811 { ETAG_PASN_PARAMETERS100, "PASN Parameters" },
812 { ETAG_RANGING_PARAMETERS101, "Ranging Parameters" },
813 { ETAG_DIRECTION_MEASUREMENT_RESULTS102, "Direction Measurement Results" },
814 { ETAG_MULTIPLE_AOD_FEEDBACK103, "Multiple AOD Feedback" },
815 { ETAG_MULTIPLE_BEST_AWV_ID104, "Multiple Best AWV ID" },
816 { ETAG_LOS_LIKELIHOOD105, "LOS Likelihood" },
817 { ETAG_EHT_OPERATION106, "EHT Operation" },
818 { ETAG_MULTI_LINK107, "Multi-Link" },
819 { ETAG_EHT_CAPABILITIES108, "EHT Capabilities" },
820 { ETAG_TID_TO_LINK_MAPPING109, "TID-To-Link Mapping" },
821 { ETAG_MULTI_LINK_TRAFFIC110, "Multi-Link Traffic Indication" },
822 { ETAG_QOS_CHARACTERISTICS113, "QoS Characteristics" },
823 { ETAG_AKM_SUITE_SELECTOR114, "AKM Suite Selector" },
824 { ETAG_MLO_LINK_INFORMATION133, "MLO Link Information" },
825 { ETAG_AID_BITMAP134, "AID Bitmap" },
826 { ETAG_BANDWIDTH_INDICATION135, "Bandwidth Indication" },
827 { ETAG_NONAP_STA_REGULATORY_CONNECT137, "Non-AP STA Regulatory Connectivity" },
828 { 0, NULL((void*)0) }
829};
830static 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) }
;
831
832static const value_string wfa_qos_subtype_vals[] = {
833 { 0, "DSCP Policy Query" },
834 { 1, "DSCP Policy Request" },
835 { 2, "DSCP Policy Response" },
836 { 0, NULL((void*)0) }
837};
838
839static const value_string wfa_action_subtype_vals[] = {
840 { WFA_SUBTYPE_ACTION_QOS_MGMT0x1A, "QoS Management" },
841 { WFA_SUBTYPE_ACTION_CAPABILITIES0x1B, "Wi-Fi Alliance Capabilities" },
842 { 0, NULL((void*)0) }
843};
844
845const value_string wfa_subtype_vals[] = {
846 { WFA_SUBTYPE_SUBSCRIPTION_REMEDIATION0, "Subscription Remediation" },
847 { WFA_SUBTYPE_DEAUTHENTICATION_IMMINENT1, "Deauthentication Imminent" },
848 { WFA_WNM_SUBTYPE_NON_PREF_CHAN_REPORT2, "Non-preferred Channel Report" },
849 { WFA_WNM_SUBTYPE_CELL_DATA_CAPABILITIES3, "Cellular Data Capabilities" },
850 { WFA_SUBTYPE_P2P9, "P2P" },
851 { WFA_SUBTYPE_HS20_INDICATION16, "Hotspot 2.0 Indication" },
852 { WFA_SUBTYPE_NAN_IE19, "NAN" },
853 { WFA_SUBTYPE_OSEN20, "OSU Server-only l2 Encryption Network" },
854 { WFA_SUBTYPE_MBO_OCE22, "Multi Band Operation - Optimized Connectivity Experience"},
855 { WFA_SUBTYPE_WIFI_60G23, "60GHz Information Element" },
856 { WFA_SUBTYPE_NAN_ACTION24, "NAN Action" },
857 { WFA_SUBTYPE_DPP26, "Device Provisioning Protocol" },
858 { WFA_SUBTYPE_IEEE1905_MULTI_AP27, "IEEE1905 Multi-AP" },
859 { WFA_SUBTYPE_OWE_TRANSITION_MODE28, "OWE Transition Mode" },
860 { WFA_SUBTYPE_TRANSITION_DISABLE_KDE32, "Transition Disable KDE" },
861 { WFA_SUBTYPE_QOS_MGMT34, "QoS Management" },
862 { WFA_SUBTYPE_WFA_CAPA35, "Wi-Fi Alliance Capabilities" },
863 { WFA_SUBTYPE_RSN_OVERRIDE41, "RSN Element Override" },
864 { WFA_SUBTYPE_RSN_OVERRIDE_242, "RSN Element Override 2" },
865 { WFA_SUBTYPE_RSNX_OVERRIDE43, "RSN Extension Element Override" },
866 { WFA_SUBTYPE_RSN_SELECTION44, "RSN Selection" },
867 { WFA_SUBTYPE_RSN_OVERRIDE_LINK_KDE45, "RSN Override Link KDE" },
868 { 0, NULL((void*)0) }
869};
870
871static const value_string wfa_anqp_subtype_vals[] = {
872 { WFA_ANQP_SUBTYPE_HS2017, "Hotspot 2.0 ANQP" },
873 { WFA_ANQP_SUBTYPE_MBO18, "Multi Band Operation ANQP" },
874 { 0, NULL((void*)0) }
875};
876
877#define DPP_CONFIGURATION_PROTOCOL0x01 0x01
878
879static const value_string dpp_subtype_vals[] = {
880 { DPP_CONFIGURATION_PROTOCOL0x01, "DPP Configuration Protocol" },
881 { 0, NULL((void*)0) }
882};
883
884/* ************************************************************************* */
885/* Supported Rates (7.3.2.2) */
886/* ************************************************************************* */
887
888static const value_string ieee80211_supported_rates_vals[] = {
889 { 0x02, "1" },
890 { 0x03, "1.5" },
891 { 0x04, "2" },
892 { 0x05, "2.5" },
893 { 0x06, "3" },
894 { 0x09, "4.5" },
895 { 0x0B, "5.5" },
896 { 0x0C, "6" },
897 { 0x12, "9" },
898 { 0x16, "11" },
899 { 0x18, "12" },
900 { 0x1B, "13.5" },
901 { 0x24, "18" },
902 { 0x2C, "22" },
903 { 0x30, "24" },
904 { 0x36, "27" },
905 { 0x42, "33" },
906 { 0x48, "36" },
907 { 0x60, "48" },
908 { 0x6C, "54" },
909 { 0x82, "1(B)" },
910 { 0x83, "1.5(B)" },
911 { 0x84, "2(B)" },
912 { 0x85, "2.5(B)" },
913 { 0x86, "3(B)" },
914 { 0x89, "4.5(B)" },
915 { 0x8B, "5.5(B)" },
916 { 0x8C, "6(B)" },
917 { 0x92, "9(B)" },
918 { 0x96, "11(B)" },
919 { 0x98, "12(B)" },
920 { 0x9B, "13.5(B)" },
921 { 0xA4, "18(B)" },
922 { 0xAC, "22(B)" },
923 { 0xB0, "24(B)" },
924 { 0xB6, "27(B)" },
925 { 0xC2, "33(B)" },
926 { 0xC8, "36(B)" },
927 { 0xE0, "48(B)" },
928 { 0xEC, "54(B)" },
929 /* BSS membership selector */
930 { 0xFA, "HE PHY" },
931 { 0xFB, "SAE Hash to Element Only" },
932 { 0xFC, "EPD" }, /* 802.11ak */
933 { 0xFD, "GLK" }, /* 802.11ak */
934 { 0xFE, "VHT PHY" },
935 { 0xFF, "HT PHY" },
936 { 0, NULL((void*)0)}
937};
938value_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) }
;
939
940/* ************************************************************************* */
941/* 8.4.1.7 Reason Code field */
942/* ************************************************************************* */
943static const value_string ieee80211_reason_code[] = {
944 { 1, "Unspecified reason" },
945 { 2, "Previous authentication no longer valid" },
946 { 3, "Deauthenticated because sending STA is leaving (or has left) the BSS" },
947 { 4, "Disassociated due to inactivity" },
948 { 5, "Disassociated because AP is unable to handle all currently associated STAs" },
949 { 6, "Class 2 frame received from nonauthenticated STA" },
950 { 7, "Class 3 frame received from nonassociated STA" },
951 { 8, "Disassociated because sending STA is leaving (or has left) BSS" },
952 { 9, "STA requesting (re)association is not authenticated with responding STA" },
953 { 10, "Disassociated because the information in the Power Capability element is unacceptable" },
954 { 11, "Disassociated because the information in the Supported Channels element is unacceptable" },
955 { 12, "Disassociated due to BSS transition management" },
956 { 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" },
957 { 14, "Message integrity code (MIC) failure" },
958 { 15, "4-way handshake timeout" },
959 { 16, "Group key handshake timeout" },
960 { 17, "Element in 4-way handshake different from (Re)Association Request/Probe Response/Beacon frame" },
961 { 18, "Invalid group cipher" },
962 { 19, "Invalid pairwise cipher" },
963 { 20, "Invalid AKMP" },
964 { 21, "Unsupported RSNE version" },
965 { 22, "Invalid RSNE capabilities" },
966 { 23, "IEEE 802.1X authentication failed" },
967 { 24, "Cipher suite rejected because of the security policy" },
968 { 25, "TDLS direct-link teardown due to TDLS peer STA unreachable via the TDLS direct link" },
969 { 26, "TDLS direct-link teardown for unspecified reason" },
970 { 27, "Disassociated because session terminated by SSP request" },
971 { 28, "Disassociated because of lack of SSP roaming agreement" },
972 { 29, "Requested service rejected because of SSP cipher suite or AKM requirement " },
973 { 30, "Requested service not authorized in this location" },
974 { 31, "TS deleted because QoS AP lacks sufficient bandwidth for this QoS STA due to a change in BSS service characteristics or operational mode" },
975 { 32, "Disassociated for unspecified, QoS-related reason" },
976 { 33, "Disassociated because QoS AP lacks sufficient bandwidth for this QoS STA" },
977 { 34, "Disassociated because excessive number of frames need to be acknowledged, but are not acknowledged due to AP transmissions and/or poor channel conditions" },
978 { 35, "Disassociated because STA is transmitting outside the limits of its TXOPs" },
979 { 36, "Requested from peer STA as the STA is leaving the BSS (or resetting)" },
980 { 37, "Requesting STA is no longer using the stream or session" },
981 { 38, "Requesting STA received frames using a mechanism for which a setup has not been completed" },
982 { 39, "Requested from peer STA due to timeout" },
983 { 46, "Disassociated because authorized access limit reached" },
984 { 47, "Disassociated due to external service requirements" },
985 { 48, "Invalid FT Action frame count" },
986 { 49, "Invalid pairwise master key identifier (PMKID)" },
987 { 50, "Invalid MDE" },
988 { 51, "Invalid FTE" },
989 { 52, "Mesh peering canceled for unknown reasons" },
990 { 53, "The mesh STA has reached the supported maximum number of peer mesh STAs" },
991 { 54, "The received information violates the Mesh Configuration policy configured in the mesh STA profile" },
992 { 55, "The mesh STA has received a Mesh Peering Close message requesting to close the mesh peering" },
993 { 56, "The mesh STA has re-sent dot11MeshMaxRetries Mesh Peering Open messages, without receiving a Mesh Peering Confirm message" },
994 { 57, "The confirmTimer for the mesh peering instance times out" },
995 { 58, "The mesh STA fails to unwrap the GTK or the values in the wrapped contents do not match" },
996 { 59, "The mesh STA receives inconsistent information about the mesh parameters between Mesh Peering Management frames" },
997 { 60, "The mesh STA fails the authenticated mesh peering exchange because due to failure in selecting either the pairwise ciphersuite or group ciphersuite" },
998 { 61, "The mesh STA does not have proxy information for this external destination" },
999 { 62, "The mesh STA does not have forwarding information for this destination" },
1000 { 63, "The mesh STA determines that the link to the next hop of an active path in its forwarding information is no longer usable" },
1001 { 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)" },
1002 { 65, "The mesh STA performs channel switch to meet regulatory requirements" },
1003 { 66, "The mesh STA performs channel switch with unspecified reason" },
1004 { 67, "Transmission link establishment in alternative channel failed" },
1005 { 68, "The alternative channel is occupied" },
1006 { 71, "Disassociated due to poor RSSI" },
1007 { 0, NULL((void*)0)}
1008};
1009value_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) }
;
1010
1011/* ************************************************************************* */
1012/* 8.4.1.9 Status Code field */
1013/* ************************************************************************* */
1014static const value_string ieee80211_status_code[] = {
1015 { 0, "Successful" },
1016 { 1, "Unspecified failure" },
1017 { 2, "TDLS wakeup schedule rejected but alternative schedule provided" },
1018 { 3, "TDLS wakeup schedule rejected" },
1019 { 4, "Reserved" },
1020 { 5, "Security disabled" },
1021 { 6, "Unacceptable lifetime" },
1022 { 7, "Not in same BSS" },
1023 { 8, "Reserved" },
1024 { 9, "Reserved" },
1025 { 10, "Cannot support all requested capabilities in the Capability Information field" },
1026 { 11, "Reassociation denied due to inability to confirm that association exists" },
1027 { 12, "Association denied due to reason outside the scope of this standard" },
1028 { 13, "Responding STA does not support the specified authentication algorithm" },
1029 { 14, "Received an Authentication frame with authentication transaction sequence number out of expected sequence" },
1030 { 15, "Authentication rejected because of challenge failure" },
1031 { 16, "Authentication rejected due to timeout waiting for next frame in sequence" },
1032 { 17, "Association denied because AP is unable to handle additional associated STAs" },
1033 { 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" },
1034 { 19, "Association denied due to requesting STA not supporting the short preamble option" },
1035 { 20, "Reserved" },
1036 { 21, "Reserved" },
1037 { 22, "Association request rejected because spectrum management capability is required" },
1038 { 23, "Association request rejected because the information in the Power Capability element is unacceptable" },
1039 { 24, "Association request rejected because the information in the Supported Channels element is unacceptable" },
1040 { 25, "Association denied due to requesting STA not supporting short slot time" },
1041 { 26, "Reserved" },
1042 { 27, "Association denied because the requesting STA does not support HT features" },
1043 { 28, "R0KH unreachable" },
1044 { 29, "Reserved"},
1045 { 30, "Association request rejected temporarily; try again later" },
1046 { 31, "Robust management frame policy violation" },
1047 { 32, "Unspecified, QoS-related failure" },
1048 { 33, "Association denied because QoS AP or PCP has insufficient bandwidth to handle another QoS STA" },
1049 { 34, "Association denied due to excessive frame loss rates and/ or poor conditions on current operating channel" },
1050 { 35, "Association (with QoS BSS) denied because the requesting STA does not support the QoS facility" },
1051 { 36, "Reserved" },
1052 { 37, "The request has been declined" },
1053 { 38, "The request has not been successful as one or more parameters have invalid values" },
1054 { 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" },
1055 { 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)" },
1056 { 41, "Invalid group cipher" },
1057 { 42, "Invalid pairwise cipher" },
1058 { 43, "Invalid AKMP" },
1059 { 44, "Unsupported RSNE version" },
1060 { 45, "Invalid RSNE capabilities" },
1061 { 46, "Cipher suite rejected because of security policy" },
1062 { 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" },
1063 { 48, "Reserved" },
1064 { 49, "The Destination STA is not present within this BSS" },
1065 { 50, "The Destination STA is not a QoS STA" },
1066 { 51, "Association denied because the listen interval is too large" },
1067 { 52, "Invalid FT Action frame count" },
1068 { 53, "Invalid pairwise master key identifier (PMKID)" },
1069 { 54, "Invalid MDE" },
1070 { 55, "Invalid FTE" },
1071 { 56, "Requested TCLAS processing is not supported by the AP or PCP" },
1072 { 57, "The AP or PCP has insufficient TCLAS processing resources to satisfy the request" },
1073 { 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" },
1074 { 59, "GAS advertisement protocol not supported" },
1075 { 60, "No outstanding GAS request" },
1076 { 61, "GAS response not received from the advertisement server" },
1077 { 62, "STA timed out waiting for GAS query response" },
1078 { 63, "GAS response is larger than query response length limit" },
1079 { 64, "Request refused because home network does not support request" },
1080 { 65, "Advertisement server in the network is not currently reachable" },
1081 { 66, "Reserved" },
1082 { 67, "Request refused due to permissions received via SSPN interface" },
1083 { 68, "Request refused because the AP or PCP does not support unauthenticated access" },
1084 { 69, "Reserved" },
1085 { 70, "Reserved" },
1086 { 71, "Reserved" },
1087 { 72, "Invalid contents of RSNE, other than unsupported RSNE version or invalid RSNE capabilities, AKMP or pairwise cipher" },
1088 { 73, "U-APSD coexistence is not supported" },
1089 { 74, "Requested U-APSD coexistence mode is not supported" },
1090 { 75, "Requested interval/duration value cannot be supported with U-APSD coexistence" },
1091 { 76, "Authentication is rejected because an anti-clogging token is required" },
1092 { 77, "Authentication is rejected because the offered finite cyclic group is not supported" },
1093 { 78, "The TBTT adjustment request has not been successful because the STA could not find an alternative TBTT" },
1094 { 79, "Transmission failure" },
1095 { 80, "Requested TCLAS not supported" },
1096 { 81, "TCLAS resources exhausted" },
1097 { 82, "Rejected with suggested BSS transition" },
1098 { 83, "Reject with recommended schedule" },
1099 { 84, "Reject because no wakeup schedule specified" },
1100 { 85, "Success, the destination STA is in power save mode" },
1101 { 86, "FST pending, in process of admitting FST session" },
1102 { 87, "Performing FST now" },
1103 { 88, "FST pending, gap(s) in block ack window" },
1104 { 89, "Reject because of U-PID setting" },
1105 { 90, "Reserved" },
1106 { 91, "Reserved" },
1107 { 92, "(Re)Association refused for some external reason" },
1108 { 93, "(Re)Association refused because of memory limits at the AP" },
1109 { 94, "(Re)Association refused because emergency services are not supported at the AP" },
1110 { 95, "GAS query response not yet received" },
1111 { 96, "Reject since the request is for transition to a frequency band subject to DSE procedures and FST Initiator is a dependent STA" },
1112 { 97, "Requested TCLAS processing has been terminated by the AP" },
1113 { 98, "The TS schedule conflicts with an existing schedule; an alternative schedule is provided" },
1114 { 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" },
1115 { 100, "The request failed due to a reservation conflict" },
1116 { 101, "The request failed due to exceeded MAF limit" },
1117 { 102, "The request failed due to exceeded MCCA track limit" },
1118 { 103, "Association denied because the information in the Spectrum Management field is unacceptable" },
1119 { 104, "Association denied because the requesting STA does not support VHT features" },
1120 { 105, "Enablement denied" },
1121 { 106, "Enablement denied due to restriction from an authorized GDB" },
1122 { 107, "Authorization deenabled" },
1123 { 108, "Re(association) refused or disassociated because energy limited operation is not supported at the AP" },
1124 { 109, "BlockAck negotiation refused because, due to buffer constraints and other unspecified reasons, the recipient prefers to generate only NDP BlockAck frames" },
1125 { 110, "Association denied/disassociated because the suggested value for max away duration is unacceptable" },
1126 { 111, "Re(association) refused or disassociated because flow control operation is not supported by the non-AP STA" },
1127 { 112, "Authentication rejected due to FILS authentication failure" },
1128 { 113, "Authentication rejected due to unknown Authentication Server" },
1129 { 114, "Reserved" },
1130 { 115, "Reserved" },
1131 { 116, "Request denied because the allocation of notification period is failed" },
1132 { 117, "Request denied because the request of channel splitting is failed" },
1133 { 118, "Request denied because the allocation request is failed" },
1134 { 119, "Association denied because the requesting STA does not support CMMG features" },
1135 { 120, "The requested GAS fragment is not available" },
1136 { 121, "Success, the CAG Version provided by the requesting STA is the same as the latest CAG Version provided by the relevant server" },
1137 { 122, "The STA is not authorized to use GLK per local policy" },
1138 { 123, "Authentication rejected because the password identifier is unknown" },
1139 { 124, "Reserved"},
1140 { 125, "Request denied because source address of request is inconsistent with local MAC address policy" },
1141 { 126, "SAE authentication uses direct hashing, instead of looping, to obtain the PWE" },
1142 { 127, "Reserved"},
1143 { 128, "Requested TCLAS processing has been terminated by the AP due to insufficient QoS capacity" },
1144 { 129, "Requested TCLAS processing has been terminated by the AP due to conflict with higher layer QoS policies" },
1145 { 130, "Association denied because the requesting STA is affiliated with a non-AP MLD that is associated with the AP MLD"},
1146 { 131, "EPCS priority access denied because the non-AP MLD is not authorized to use the service"},
1147 { 132, "EPCS priority access denied due to reason outside the scope of this standard"},
1148 { 133, "Request denied because the requested TID-to-link mapping is unacceptable"},
1149 { 134, "Preferred TID-to-link mapping suggested"},
1150 { 135, "Association denied because the requesting STA does not support EHT features"},
1151 { 139, "Link not accepted because the link on which the (Re)Association Request frame is transmitted is not accepted"},
1152 { 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"},
1153 { 141, "Operation parameter update denied because the requested operation parameters or capabilities are not acceptable"},
1154 { 142, "The non-AP STA MAC address is used by an existing associated non-AP STA"},
1155 { 0, NULL((void*)0)}
1156};
1157value_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) }
;
1158
1159static const value_string ieee80211_transition_reasons[] = {
1160 { 0, "Unspecified" },
1161 { 1, "Excessive frame loss rates and/or poor conditions" },
1162 { 2, "Excessive delay for current traffic streams" },
1163 { 3, "Insufficient QoS capacity for current traffic streams (TSPEC rejected)" },
1164 { 4, "First association to ESS (the association initiated by an Association Request frame instead of a Reassociation Request frame)" },
1165 { 5, "Load balancing" },
1166 { 6, "Better AP found" },
1167 { 7, "Deauthenticated or Disassociated from the previous AP" },
1168 { 8, "AP failed IEEE 802.1X EAP Authentication" },
1169 { 9, "AP failed 4-way handshake" },
1170 { 10, "Received too many replay counter failures" },
1171 { 11, "Received too many data MIC failures" },
1172 { 12, "Exceeded maximum number of retransmissions" },
1173 { 13, "Received too many broadcast disassociations" },
1174 { 14, "Received too many broadcast deauthentications" },
1175 { 15, "Previous transition failed" },
1176 { 16, "Low RSSI" },
1177 { 17, "Roam from a non-IEEE-802.11 system" },
1178 { 18, "Transition due to received BSS Transition Request frame" },
1179 { 19, "Preferred BSS transition candidate list included" },
1180 { 20, "Leaving ESS" },
1181 { 0, NULL((void*)0)}
1182};
1183/* ************************************************************************* */
1184/* Frame types, and their names */
1185/* ************************************************************************* */
1186static const value_string frame_type_subtype_vals[] = {
1187 {MGT_ASSOC_REQ0x00, "Association Request"},
1188 {MGT_ASSOC_RESP0x01, "Association Response"},
1189 {MGT_REASSOC_REQ0x02, "Reassociation Request"},
1190 {MGT_REASSOC_RESP0x03, "Reassociation Response"},
1191 {MGT_PROBE_REQ0x04, "Probe Request"},
1192 {MGT_PROBE_RESP0x05, "Probe Response"},
1193 {MGT_MEASUREMENT_PILOT0x06, "Measurement Pilot"},
1194 {MGT_BEACON0x08, "Beacon frame"},
1195 {MGT_ATIM0x09, "ATIM"},
1196 {MGT_DISASS0x0A, "Disassociate"},
1197 {MGT_AUTHENTICATION0x0B, "Authentication"},
1198 {MGT_DEAUTHENTICATION0x0C, "Deauthentication"},
1199 {MGT_ACTION0x0D, "Action"},
1200 {MGT_ACTION_NO_ACK0x0E, "Action No Ack"},
1201 {MGT_ARUBA_WLAN0x0F, "Aruba Management"},
1202
1203 {CTRL_TRIGGER0x12, "Trigger"},
1204 {CTRL_TACK0x13, "TWT Ack"},
1205 {CTRL_BEAMFORM_RPT_POLL0x14, "Beamforming Report Poll"},
1206 {CTRL_VHT_NDP_ANNC0x15, "VHT/HE/EHT/RANGING NDP Announcement"},
1207 {CTRL_CONTROL_WRAPPER0x17, "Control Wrapper"},
1208 {CTRL_BLOCK_ACK_REQ0x18, "802.11 Block Ack Req"},
1209 {CTRL_BLOCK_ACK0x19, "802.11 Block Ack"},
1210 {CTRL_PS_POLL0x1A, "Power-Save poll"},
1211 {CTRL_RTS0x1B, "Request-to-send"},
1212 {CTRL_CTS0x1C, "Clear-to-send"},
1213 {CTRL_ACKNOWLEDGEMENT0x1D, "Acknowledgement"},
1214 {CTRL_CFP_END0x1E, "CF-End (Control-frame)"},
1215 {CTRL_CFP_ENDACK0x1F, "CF-End + CF-Ack (Control-frame)"},
1216
1217 {DATA0x20, "Data"},
1218 {DATA_CF_ACK0x21, "Data + CF-Ack"},
1219 {DATA_CF_POLL0x22, "Data + CF-Poll"},
1220 {DATA_CF_ACK_POLL0x23, "Data + CF-Ack + CF-Poll"},
1221 {DATA_NULL_FUNCTION0x24, "Null function (No data)"},
1222 {DATA_CF_ACK_NOD0x25, "Acknowledgement (No data)"},
1223 {DATA_CF_POLL_NOD0x26, "CF-Poll (No data)"},
1224 {DATA_CF_ACK_POLL_NOD0x27, "CF-Ack/Poll (No data)"},
1225 {DATA_QOS_DATA0x28, "QoS Data"},
1226 {DATA_QOS_DATA_CF_ACK0x29, "QoS Data + CF-Acknowledgment"},
1227 {DATA_QOS_DATA_CF_POLL0x2A, "QoS Data + CF-Poll"},
1228 {DATA_QOS_DATA_CF_ACK_POLL0x2B, "QoS Data + CF-Ack + CF-Poll"},
1229 {DATA_QOS_NULL0x2C, "QoS Null function (No data)"},
1230 {DATA_QOS_CF_POLL_NOD0x2E, "QoS CF-Poll (No Data)"},
1231 {DATA_QOS_CF_ACK_POLL_NOD0x2F, "QoS CF-Ack + CF-Poll (No data)"},
1232
1233 {EXTENSION_DMG_BEACON0x30, "DMG Beacon"},
1234 {EXTENSION_S1G_BEACON0x31, "S1G Beacon"},
1235
1236 {CTRL_POLL0x162, "Poll"},
1237 {CTRL_SPR0x163, "Service Period Request"},
1238 {CTRL_GRANT0x164, "Grant"},
1239 {CTRL_DMG_CTS0x165, "DMG Clear-to-send"},
1240 {CTRL_DMG_DTS0x166, "DMG Denial-to-send"},
1241 {CTRL_GRANT_ACK0x167, "Grant Acknowledgment"},
1242 {CTRL_SSW0x168, "Sector Sweep"},
1243 {CTRL_SSW_FEEDBACK0x169, "Sector Sweep Feedback"},
1244 {CTRL_SSW_ACK0x16A, "Sector Sweep Acknowledgment"},
1245
1246 {0, NULL((void*)0)}
1247};
1248static 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) }
;
1249
1250/* ************************************************************************* */
1251/* 802.1D Tag Name (by WME Access Category Names) */
1252/* ************************************************************************* */
1253static const value_string ieee80211_qos_tags_acs[] = {
1254 { 0, "Best Effort (Best Effort)" },
1255 { 1, "Background (Background)" },
1256 { 2, "Spare (Background)" },
1257 { 3, "Excellent Effort (Best Effort)" },
1258 { 4, "Controlled Load (Video)" },
1259 { 5, "Video (Video)" },
1260 { 6, "Voice (Voice)" },
1261 { 7, "Network Control (Voice)" },
1262 { 0, NULL((void*)0) }
1263};
1264
1265/* ************************************************************************* */
1266/* WME Access Category Names (by WME ACI) */
1267/* ************************************************************************* */
1268static const value_string wme_acs[] = {
1269 { 0, "Best Effort" },
1270 { 1, "Background" },
1271 { 2, "Video" },
1272 { 3, "Voice" },
1273 { 0, NULL((void*)0) }
1274};
1275
1276/* ************************************************************************* */
1277/* Aruba Management Type */
1278/* ************************************************************************* */
1279static const value_string aruba_mgt_typevals[] = {
1280 { 0x0001, "Hello" },
1281 { 0x0002, "Probe" },
1282 { 0x0003, "MTU" },
1283 { 0x0004, "Ageout" },
1284 { 0x0005, "Heartbeat" },
1285 { 0x0006, "Deauth" },
1286 { 0x0007, "Disassoc" },
1287 { 0x0008, "Probe response" },
1288 { 0x0009, "Tunnel update" },
1289 { 0x000A, "Laser beam active" },
1290 { 0x000B, "Client IP" },
1291 { 0x000C, "Laser beam active v2" },
1292 { 0x000D, "AP statistics" },
1293 { 0, NULL((void*)0) }
1294};
1295static 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) }
;
1296
1297/*** Begin: Action Fixed Parameter ***/
1298#define CAT_SPECTRUM_MGMT0 0
1299#define CAT_QOS1 1
1300#define CAT_DLS2 2
1301#define CAT_BLOCK_ACK3 3
1302#define CAT_PUBLIC4 4
1303#define CAT_RADIO_MEASUREMENT5 5
1304#define CAT_FAST_BSS_TRANSITION6 6
1305#define CAT_HT7 7
1306#define CAT_SA_QUERY8 8
1307#define CAT_PUBLIC_PROTECTED9 9
1308#define CAT_WNM10 10
1309#define CAT_UNPROTECTED_WNM11 11
1310#define CAT_TDLS12 12
1311#define CAT_MESH13 13
1312#define CAT_MULTIHOP14 14
1313#define CAT_SELF_PROTECTED15 15
1314#define CAT_DMG16 16
1315#define CAT_MGMT_NOTIFICATION17 17
1316#define CAT_FAST_SESSION_TRANSFER18 18
1317#define CAT_ROBUST_AV_STREAMING19 19
1318#define CAT_UNPROTECTED_DMG20 20
1319#define CAT_VHT21 21
1320#define CAT_S1G22 22
1321#define CAT_PROTECTED_S1G23 23
1322#define CAT_FLOW_CONTROL24 24
1323#define CAT_CONTROL_RESPONSE_MCS_NEG25 25
1324#define CAT_FILS26 26
1325/* aj */
1326#define CAT_CDMG27 27
1327#define CAT_CMMG28 28
1328/* ak */
1329#define CAT_GLK29 29
1330
1331#define CAT_HE30 30
1332#define CAT_PROTECTED_HE31 31
1333#define CAT_PROTECTED_FTM34 34
1334#define CAT_EHT36 36
1335#define CAT_PROTECTED_EHT37 37
1336#define CAT_VENDOR_SPECIFIC_PROTECTED126 126
1337#define CAT_VENDOR_SPECIFIC127 127
1338
1339#define CAT_MESH_LINK_METRIC31 31
1340#define CAT_MESH_PATH_SELECTION32 32
1341#define CAT_MESH_INTERWORKING33 33
1342#define CAT_MESH_RESOURCE_COORDINATION34 34
1343#define CAT_MESH_SECURITY_ARCHITECTURE35 35
1344
1345#define SM_ACTION_MEASUREMENT_REQUEST0 0
1346#define SM_ACTION_MEASUREMENT_REPORT1 1
1347#define SM_ACTION_TPC_REQUEST2 2
1348#define SM_ACTION_TPC_REPORT3 3
1349#define SM_ACTION_CHAN_SWITCH_ANNC4 4
1350#define SM_ACTION_EXT_CHAN_SWITCH_ANNC5 5
1351
1352#define QOS_ACTION_ADDTS_REQUEST0 0
1353#define QOS_ACTION_ADDTS_RESPONSE1 1
1354#define QOS_ACTION_DELTS2 2
1355#define QOS_ACTION_SCHEDULE3 3
1356#define QOS_ACTION_MAP_CONFIGURE4 4
1357
1358#define DLS_ACTION_REQUEST0 0
1359#define DLS_ACTION_RESPONSE1 1
1360#define DLS_ACTION_TEARDOWN2 2
1361
1362#define BA_ADD_BLOCK_ACK_REQUEST0 0
1363#define BA_ADD_BLOCK_ACK_RESPONSE1 1
1364#define BA_DELETE_BLOCK_ACK2 2
1365
1366#define BA_NDP_ADD_BLOCK_ACK_REQUEST128 128
1367#define BA_NDP_ADD_BLOCK_ACK_RESPONSE129 129
1368#define BA_NDP_DELETE_BLOCK_ACK130 130
1369#define BA_BAT_ADD_BLOCK_ACK_REQUEST132 132
1370#define BA_BAT_ADD_BLOCK_ACK_RESPONSE133 133
1371#define BA_BAT_DELETE_BLOCK_ACK134 134
1372
1373#define BA_ADD_BLOCK_ACK_REQUEST0 0
1374#define BA_ADD_BLOCK_ACK_RESPONSE1 1
1375#define BA_DELETE_BLOCK_ACK2 2
1376
1377/* Keep in sync with PPA_* defines */
1378#define PA_20_40_BSS_COEXISTENCE_MANAGEMENT0 0
1379#define PA_DSE_ENABLEMENT1 1
1380#define PA_DSE_DEENABLEMENT2 2
1381#define PA_DSE_REG_LOC_ANNOUNCEMENT3 3
1382#define PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4 4
1383#define PA_DSE_MEASUREMENT_REQUEST5 5
1384#define PA_DSE_MEASUREMENT_REPORT6 6
1385#define PA_MEASUREMENT_PILOT7 7
1386#define PA_DSE_POWER_CONSTRAINT8 8
1387#define PA_VENDOR_SPECIFIC9 9
1388#define PA_GAS_INITIAL_REQUEST10 10
1389#define PA_GAS_INITIAL_RESPONSE11 11
1390#define PA_GAS_COMEBACK_REQUEST12 12
1391#define PA_GAS_COMEBACK_RESPONSE13 13
1392#define PA_TDLS_DISCOVERY_RESPONSE14 14
1393#define PA_LOCATION_TRACK_NOTIFICATION15 15
1394#define PA_QAB_REQUEST16 16
1395#define PA_QAB_RESPONSE17 17
1396#define PA_QMF_POLICY18 18
1397#define PA_QMF_POLICY_CHANGE19 19
1398#define PA_QLOAD_REQUEST20 20
1399#define PA_QLOAD_REPORT21 21
1400#define PA_HCCA_TXOP_ADVERTISEMENT22 22
1401#define PA_HCCA_TXOP_RESPONSE23 23
1402#define PA_PUBLIC_KEY24 24
1403#define PA_CHANNEL_AVAILABILITY_QUERY25 25
1404#define PA_CHANNEL_SCHEDULE_MANAGEMENT26 26
1405#define PA_CONTACT_VERIFICATION_SIGNAL27 27
1406#define PA_GDD_ENABLEMENT_REQUEST28 28
1407#define PA_GDD_ENABLEMENT_RESPONSE29 29
1408#define PA_NETWORK_CHANNEL_CONTROL30 30
1409#define PA_WHITE_SPACE_MAP_ANNOUNCEMENT31 31
1410#define PA_FTM_REQUEST32 32
1411#define PA_FTM33 33
1412#define PA_FILS_DISCOVERY34 34
1413/* 802.11aj */
1414#define PA_DCS_MEASUREMENT_REQUEST35 35
1415#define PA_DCS_MEASUREMENT_REPORT36 36
1416#define PA_DCS_REQUEST37 37
1417#define PA_DCS_RESPONSE38 38
1418#define PA_EXTENDED_NOTIFICATION_PERIOD_REQUEST39 39
1419#define PA_EXTENDED_NOTIFICATION_PERIOD_RESPONSE40 40
1420#define PA_EXTENDED_CHANNEL_SPLITTING_REQUEST41 41
1421#define PA_EXTENDED_CHANNEL_SPLITTING_RESPONSE42 42
1422/* 802.11aq */
1423#define PA_GROUP_ADDRESSED_GAS_REQUEST43 43
1424#define PA_GROUP_ADDRESSED_GAS_RESPONSE44 44
1425/* Unknown */
1426#define PA_ON_CHANNEL_TUNNEL_REQUEST45 45
1427#define PA_VALUE_4646 46
1428/* 802.11az */
1429#define PA_LOCATION_MEASUREMENT_REPORT47 47
1430#define PA_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT48 48
1431#define PA_PRIMARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT49 49
1432#define PA_SECONDARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT50 50
1433
1434/* Keep in sync with PA_* defines */
1435#define PPA_DSE_ENABLEMENT1 1
1436#define PPA_DSE_DEENABLEMENT2 2
1437#define PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4 4
1438#define PPA_DSE_MEASUREMENT_REQUEST5 5
1439#define PPA_DSE_MEASUREMENT_REPORT6 6
1440#define PPA_DSE_POWER_CONSTRAINT8 8
1441#define PPA_VENDOR_SPECIFIC9 9
1442#define PPA_GAS_INITIAL_REQUEST10 10
1443#define PPA_GAS_INITIAL_RESPONSE11 11
1444#define PPA_GAS_COMEBACK_REQUEST12 12
1445#define PPA_GAS_COMEBACK_RESPONSE13 13
1446#define PPA_QAB_REQUEST16 16
1447#define PPA_QAB_RESPONSE17 17
1448
1449#define HT_ACTION_NOTIFY_CHAN_WIDTH0 0
1450#define HT_ACTION_SM_PWR_SAVE1 1
1451#define HT_ACTION_PSMP_ACTION2 2
1452#define HT_ACTION_SET_PCO_PHASE3 3
1453#define HT_ACTION_MIMO_CSI4 4
1454#define HT_ACTION_MIMO_BEAMFORMING5 5
1455#define HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6 6
1456#define HT_ACTION_ANT_SEL_FEEDBACK7 7
1457#define HT_ACTION_HT_INFO_EXCHANGE8 8
1458
1459#define DMG_ACTION_PWR_SAVE_CONFIG_REQ0 0
1460#define DMG_ACTION_PWR_SAVE_CONFIG_RES1 1
1461#define DMG_ACTION_INFO_REQ2 2
1462#define DMG_ACTION_INFO_RES3 3
1463#define DMG_ACTION_HANDOVER_REQ4 4
1464#define DMG_ACTION_HANDOVER_RES5 5
1465#define DMG_ACTION_DTP_REQ6 6
1466#define DMG_ACTION_DTP_RES7 7
1467#define DMG_ACTION_RELAY_SEARCH_REQ8 8
1468#define DMG_ACTION_RELAY_SEARCH_RES9 9
1469#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10 10
1470#define DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11 11
1471#define DMG_ACTION_RLS_REQ12 12
1472#define DMG_ACTION_RLS_RES13 13
1473#define DMG_ACTION_RLS_ANNOUNCE14 14
1474#define DMG_ACTION_RLS_TEARDOWN15 15
1475#define DMG_ACTION_RELAY_ACK_REQ16 16
1476#define DMG_ACTION_RELAY_ACK_RES17 17
1477#define DMG_ACTION_TPA_REQ18 18
1478#define DMG_ACTION_TPA_RES19 19
1479#define DMG_ACTION_TPA_REP20 20
1480#define DMG_ACTION_ROC_REQ21 21
1481#define DMG_ACTION_ROC_RES22 22
1482
1483#define UNPROTECTED_DMG_ANNOUNCE0 0
1484#define UNPROTECTED_DMG_BRP1 1
1485
1486#define FST_SETUP_REQUEST0 0
1487#define FST_SETUP_RESPONSE1 1
1488#define FST_TEAR_DOWN2 2
1489#define FST_ACK_REQUEST3 3
1490#define FST_ACK_RESPONSE4 4
1491#define FST_ON_CHANNEL_TUNNEL_REQUEST5 5
1492
1493#define ROBUST_AV_STREAMING_SCS_REQUEST0 0
1494#define ROBUST_AV_STREAMING_SCS_RESPONSE1 1
1495#define ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_REQ2 2
1496#define ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_RSP3 3
1497#define ROBUST_AV_STREAMING_MSCS_REQUEST4 4
1498#define ROBUST_AV_STREAMING_MSCS_RESPONSE5 5
1499
1500
1501/* IEEE Std 802.11r-2008, 7.4.8, Table 7-57g */
1502#define FT_ACTION_REQUEST1 1
1503#define FT_ACTION_RESPONSE2 2
1504#define FT_ACTION_CONFIRM3 3
1505#define FT_ACTION_ACK4 4
1506
1507/* SA Query Action frame codes (IEEE 802.11w-2009, 7.4.9) */
1508#define SA_QUERY_REQUEST0 0
1509#define SA_QUERY_RESPONSE1 1
1510
1511/* IEEE Std 802.11z-2010, 7.4.11, Table 7-57v1 */
1512#define TDLS_SETUP_REQUEST0 0
1513#define TDLS_SETUP_RESPONSE1 1
1514#define TDLS_SETUP_CONFIRM2 2
1515#define TDLS_TEARDOWN3 3
1516#define TDLS_PEER_TRAFFIC_INDICATION4 4
1517#define TDLS_CHANNEL_SWITCH_REQUEST5 5
1518#define TDLS_CHANNEL_SWITCH_RESPONSE6 6
1519#define TDLS_PEER_PSM_REQUEST7 7
1520#define TDLS_PEER_PSM_RESPONSE8 8
1521#define TDLS_PEER_TRAFFIC_RESPONSE9 9
1522#define TDLS_DISCOVERY_REQUEST10 10
1523
1524/* IEEE Std 802.11-2012, 8.5.7.1, Table 8-206 */
1525#define RM_ACTION_RADIO_MEASUREMENT_REQUEST0 0
1526#define RM_ACTION_RADIO_MEASUREMENT_REPORT1 1
1527#define RM_ACTION_LINK_MEASUREMENT_REQUEST2 2
1528#define RM_ACTION_LINK_MEASUREMENT_REPORT3 3
1529#define RM_ACTION_NEIGHBOR_REPORT_REQUEST4 4
1530#define RM_ACTION_NEIGHBOR_REPORT_RESPONSE5 5
1531
1532/* 11s draft 12.0, table 7-57v30 */
1533#define MESH_ACTION_LINK_METRIC_REPORT0 0
1534#define MESH_ACTION_HWMP1 1
1535#define MESH_ACTION_GATE_ANNOUNCE2 2
1536#define MESH_ACTION_CONGESTION_CTL3 3
1537#define MESH_ACTION_MCCA_SETUP_REQUEST4 4
1538#define MESH_ACTION_MCCA_SETUP_REPLY5 5
1539#define MESH_ACTION_MCCA_ADV_REQUEST6 6
1540#define MESH_ACTION_MCCA_ADV7 7
1541#define MESH_ACTION_MCCA_TEARDOWN8 8
1542#define MESH_ACTION_TBTT_ADJ_REQUEST9 9
1543#define MESH_ACTION_TBTT_ADJ_RESPONSE10 10
1544
1545/* 11s draft 12.0, table 7-57v42: Multihop Action field values */
1546#define MULTIHOP_ACTION_PROXY_UPDATE0 0
1547#define MULTIHOP_ACTION_PROXY_UPDATE_CONF1 1
1548
1549/* 11s draft 12.0, table 7-57v24: Self-protected Action field values */
1550#define SELFPROT_ACTION_MESH_PEERING_OPEN1 1
1551#define SELFPROT_ACTION_MESH_PEERING_CONFIRM2 2
1552#define SELFPROT_ACTION_MESH_PEERING_CLOSE3 3
1553#define SELFPROT_ACTION_MESH_GROUP_KEY_INFORM4 4
1554#define SELFPROT_ACTION_MESH_GROUP_KEY_ACK5 5
1555
1556/* 11s draft 12.0, table 7-43bj6: Mesh Peering Protocol Identifier field values */
1557#define MESH_PEERING_PROTO_MGMT0 0
1558#define MESH_PEERING_PROTO_AMPE1 1
1559#define MESH_PEERING_PROTO_VENDOR255 255
1560
1561/* Vendor actions */
1562/* MARVELL */
1563#define MRVL_ACTION_MESH_MANAGEMENT1 1
1564
1565#define MRVL_MESH_MGMT_ACTION_RREQ0 0
1566#define MRVL_MESH_MGMT_ACTION_RREP1 1
1567#define MRVL_MESH_MGMT_ACTION_RERR2 2
1568#define MRVL_MESH_MGMT_ACTION_PLDM3 3
1569
1570#define ANQP_INFO_ANQP_QUERY_LIST256 256
1571#define ANQP_INFO_ANQP_CAPAB_LIST257 257
1572#define ANQP_INFO_VENUE_NAME_INFO258 258
1573#define ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO259 259
1574#define ANQP_INFO_NETWORK_AUTH_TYPE_INFO260 260
1575#define ANQP_INFO_ROAMING_CONSORTIUM_LIST261 261
1576#define ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262 262
1577#define ANQP_INFO_NAI_REALM_LIST263 263
1578#define ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264 264
1579#define ANQP_INFO_AP_GEOSPATIAL_LOCATION265 265
1580#define ANQP_INFO_AP_CIVIC_LOCATION266 266
1581#define ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI267 267
1582#define ANQP_INFO_DOMAIN_NAME_LIST268 268
1583#define ANQP_INFO_EMERGENCY_ALERT_ID_URI269 269
1584#define ANQP_INFO_TDLS_CAPAB_INFO270 270
1585#define ANQP_INFO_EMERGENCY_NAI271 271
1586#define ANQP_INFO_NEIGHBOR_REPORT272 272
1587#define ANQP_INFO_QUERY_AP_LIST273 273
1588#define ANQP_INFO_AP_LIST_RESPONSE274 274
1589#define ANQP_INFO_FILS_REALM_INFO275 275
1590#define ANQP_INFO_CAG276 276
1591#define ANQP_INFO_VENUE_URL277 277
1592#define ANQP_INFO_ADVICE_OF_CHARGE278 278
1593#define ANQP_INFO_LOCAL_CONTENT279 279
1594#define ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280 280
1595#define ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797 56797
1596
1597/* ANQP information ID - IEEE Std 802.11u-2011 - Table 7-43bk */
1598static const value_string anqp_info_id_vals[] = {
1599 {ANQP_INFO_ANQP_QUERY_LIST256, "ANQP Query list"},
1600 {ANQP_INFO_ANQP_CAPAB_LIST257, "ANQP Capability list"},
1601 {ANQP_INFO_VENUE_NAME_INFO258, "Venue Name information"},
1602 {ANQP_INFO_EMERGENCY_CALL_NUMBER_INFO259, "Emergency Call Number information"},
1603 {ANQP_INFO_NETWORK_AUTH_TYPE_INFO260,
1604 "Network Authentication Type information"},
1605 {ANQP_INFO_ROAMING_CONSORTIUM_LIST261, "Roaming Consortium list"},
1606 {ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262,
1607 "IP Address Type Availability information"},
1608 {ANQP_INFO_NAI_REALM_LIST263, "NAI Realm list"},
1609 {ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264, "3GPP Cellular Network information"},
1610 {ANQP_INFO_AP_GEOSPATIAL_LOCATION265, "AP Geospatial Location"},
1611 {ANQP_INFO_AP_CIVIC_LOCATION266, "AP Civic Location"},
1612 {ANQP_INFO_AP_LOCATION_PUBLIC_ID_URI267, "AP Location Public Identifier URI"},
1613 {ANQP_INFO_DOMAIN_NAME_LIST268, "Domain Name list"},
1614 {ANQP_INFO_EMERGENCY_ALERT_ID_URI269, "Emergency Alert Identifier URI"},
1615 {ANQP_INFO_TDLS_CAPAB_INFO270, "TDLS Capability information"},
1616 {ANQP_INFO_EMERGENCY_NAI271, "Emergency NAI"},
1617 {ANQP_INFO_NEIGHBOR_REPORT272, "Neighbor Report"},
1618 {ANQP_INFO_QUERY_AP_LIST273, "Query AP List"},
1619 {ANQP_INFO_AP_LIST_RESPONSE274, "AP List Response"},
1620 {ANQP_INFO_FILS_REALM_INFO275, "FILS Realm Info"},
1621 {ANQP_INFO_CAG276, "CAG"},
1622 {ANQP_INFO_VENUE_URL277, "Venue URL"},
1623 {ANQP_INFO_ADVICE_OF_CHARGE278, "Advice of Charge"},
1624 {ANQP_INFO_LOCAL_CONTENT279, "Local Content"},
1625 {ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280,
1626 "Network Authentication Type with Timestamp"},
1627 {ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797, "ANQP vendor-specific list"},
1628 {0, NULL((void*)0)}
1629};
1630static 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) }
;
1631
1632/* IEEE 802.11v - WNM Action field values */
1633enum wnm_action {
1634 WNM_EVENT_REQ = 0,
1635 WNM_EVENT_REPORT = 1,
1636 WNM_DIAGNOSTIC_REQ = 2,
1637 WNM_DIAGNOSTIC_REPORT = 3,
1638 WNM_LOCATION_CFG_REQ = 4,
1639 WNM_LOCATION_CFG_RESP = 5,
1640 WNM_BSS_TRANS_MGMT_QUERY = 6,
1641 WNM_BSS_TRANS_MGMT_REQ = 7,
1642 WNM_BSS_TRANS_MGMT_RESP = 8,
1643 WNM_FMS_REQ = 9,
1644 WNM_FMS_RESP = 10,
1645 WNM_COLLOCATED_INTERFERENCE_REQ = 11,
1646 WNM_COLLOCATED_INTERFERENCE_REPORT = 12,
1647 WNM_TFS_REQ = 13,
1648 WNM_TFS_RESP = 14,
1649 WNM_TFS_NOTIFY = 15,
1650 WNM_SLEEP_MODE_REQ = 16,
1651 WNM_SLEEP_MODE_RESP = 17,
1652 WNM_TIM_BROADCAST_REQ = 18,
1653 WNM_TIM_BROADCAST_RESP = 19,
1654 WNM_QOS_TRAFFIC_CAPAB_UPDATE = 20,
1655 WNM_CHANNEL_USAGE_REQ = 21,
1656 WNM_CHANNEL_USAGE_RESP = 22,
1657 WNM_DMS_REQ = 23,
1658 WNM_DMS_RESP = 24,
1659 WNM_TIMING_MEASUREMENT_REQ = 25,
1660 WNM_NOTIFICATION_REQ = 26,
1661 WNM_NOTIFICATION_RESP = 27
1662};
1663
1664static const value_string wnm_action_codes[] = {
1665 { WNM_EVENT_REQ, "Event Request" },
1666 { WNM_EVENT_REPORT, "Event Report" },
1667 { WNM_DIAGNOSTIC_REQ, "Diagnostic Request" },
1668 { WNM_DIAGNOSTIC_REPORT, "Diagnostic Report" },
1669 { WNM_LOCATION_CFG_REQ, "Location Configuration Request" },
1670 { WNM_LOCATION_CFG_RESP, "Location Configuration Response" },
1671 { WNM_BSS_TRANS_MGMT_QUERY, "BSS Transition Management Query" },
1672 { WNM_BSS_TRANS_MGMT_REQ, "BSS Transition Management Request" },
1673 { WNM_BSS_TRANS_MGMT_RESP, "BSS Transition Management Response" },
1674 { WNM_FMS_REQ, "FMS Request" },
1675 { WNM_FMS_RESP, "FMS Response" },
1676 { WNM_COLLOCATED_INTERFERENCE_REQ, "Collocated Interference Request" },
1677 { WNM_COLLOCATED_INTERFERENCE_REPORT, "Collocated Interference Report" },
1678 { WNM_TFS_REQ, "TFS Request" },
1679 { WNM_TFS_RESP, "TFS Response" },
1680 { WNM_TFS_NOTIFY, "TFS Notify" },
1681 { WNM_SLEEP_MODE_REQ, "WNM-Sleep Mode Request" },
1682 { WNM_SLEEP_MODE_RESP, "WNM-Sleep Mode Response" },
1683 { WNM_TIM_BROADCAST_REQ, "TIM Broadcast Request" },
1684 { WNM_TIM_BROADCAST_RESP, "TIM Broadcast Response" },
1685 { WNM_QOS_TRAFFIC_CAPAB_UPDATE, "QoS Traffic Capability Update" },
1686 { WNM_CHANNEL_USAGE_REQ, "Channel Usage Request" },
1687 { WNM_CHANNEL_USAGE_RESP, "Channel Usage Response" },
1688 { WNM_DMS_REQ, "DMS Request" },
1689 { WNM_DMS_RESP, "DMS Response" },
1690 { WNM_TIMING_MEASUREMENT_REQ, "Timing Measurement Request" },
1691 { WNM_NOTIFICATION_REQ, "WNM-Notification Request" },
1692 { WNM_NOTIFICATION_RESP, "WNM-Notification Response" },
1693 { 0, NULL((void*)0) }
1694};
1695static 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) }
;
1696
1697enum unprotected_wnm_action {
1698 UNPROTECTED_WNM_TIM = 0,
1699 UNPROTECTED_WNM_TIMING_MEASUREMENT = 1
1700};
1701
1702static const value_string unprotected_wnm_action_codes[] = {
1703 { UNPROTECTED_WNM_TIM, "TIM" },
1704 { UNPROTECTED_WNM_TIMING_MEASUREMENT, "Timing Measurement" },
1705 { 0, NULL((void*)0) }
1706};
1707static 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) }
;
1708
1709static const value_string wnm_notification_types[] = {
1710 { 0, "Firmware Update Notification" },
1711 { 1, "Reserved for use by WFA" },
1712 { 221, "Vendor Specific" },
1713 { 0, NULL((void*)0) }
1714};
1715
1716static value_string_ext wnm_notification_types_ext =
1717 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) }
;
1718
1719static const range_string wnm_notification_response_code[] = {
1720 { 0, 0, "Notification Acknowledged" },
1721 { 1, 255, "Reserved" },
1722 { 0, 0, NULL((void*)0) }
1723};
1724
1725/*** End: Action Fixed Parameter ***/
1726
1727static const value_string ieee80211_tag_measure_request_type_flags[] = {
1728 {0x00, "Basic Request"},
1729 {0x01, "Clear Channel Assessment (CCA) Request"},
1730 {0x02, "Receive Power Indication (RPI) Histogram Request"},
1731 {0x03, "Channel Load Request"},
1732 {0x04, "Noise Histogram Request"},
1733 {0x05, "Beacon Request"},
1734 {0x06, "Frame Request"},
1735 {0x07, "STA Statistics Request"},
1736 {0x08, "Location Configuration Indication (LCI) Request"},
1737 {0x09, "Transmit Stream Measurement Request"},
1738 {0x0a, "Multicast Diagnostics Request"},
1739 {0x0b, "Location Civic Request"},
1740 {0x0c, "Location Identifier Request"},
1741 {0x0d, "Directional Channel Quality Request"},
1742 {0x0e, "Directional Measurement Request"},
1743 {0x0f, "Directional Statistics Request"},
1744 {0x10, "Fine Timing Measurement Range Request"},
1745 {0xFF, "Measurement Pause Request"},
1746 {0x00, NULL((void*)0)}
1747};
1748static value_string_ext ieee80211_tag_measure_request_type_flags_ext =
1749 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) }
;
1750
1751static const value_string ieee80211_tag_measure_report_type_flags[] = {
1752 { 0x00, "Basic Report" },
1753 { 0x01, "Clear Channel Assessment (CCA) Report" },
1754 { 0x02, "Receive Power Indication (RPI) Histogram Report" },
1755 { 0x03, "Channel Load Report" },
1756 { 0x04, "Noise Histogram Report" },
1757 { 0x05, "Beacon Report" },
1758 { 0x06, "Frame Report" },
1759 { 0x07, "STA Statistics Report" },
1760 { 0x08, "Location Configuration Information (LCI) Report" },
1761 { 0x09, "Transmit Stream Measurement Report" },
1762 { 0x0a, "Multicast Diagnostics Report"},
1763 { 0x0b, "Location Civic Report"},
1764 { 0x0c, "Location Identifier Report"},
1765 { 0x0d, "Directional Channel Quality Report"},
1766 { 0x0e, "Directional Measurement Report"},
1767 { 0x0f, "Directional Statistics Report"},
1768 { 0x10, "Fine Timing Measurement Range Report"},
1769 { 0x00, NULL((void*)0) }
1770};
1771static value_string_ext ieee80211_tag_measure_report_type_flags_ext =
1772 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) }
;
1773
1774static const true_false_string ieee80211_tag_measure_report_frame_info_frame_type_flag = {
1775 "Measurement Pilot Frame",
1776 "Beacon/Probe Response Frame"
1777};
1778
1779static const true_false_string ig_tfs = {
1780 "Group address (multicast/broadcast)",
1781 "Individual address (unicast)"
1782};
1783
1784static const true_false_string lg_tfs = {
1785 "Locally administered address (this is NOT the factory default)",
1786 "Globally unique address (factory default)"
1787};
1788
1789static const true_false_string ieee80211_tag_measure_map_field_bss_flag = {
1790 "At least one valid MPDU was received by another BSS or IBSS during the measurement period.",
1791 "No valid MPDUs were received from another BSS or IBSS during the measurement period."
1792};
1793
1794static const value_string ieee80211_tag_measure_request_measurement_mode_flags[] = {
1795 { 0x00, "Passive" },
1796 { 0x01, "Active" },
1797 { 0x02, "Beacon Table" },
1798 { 0x00, NULL((void*)0) }
1799};
1800
1801#define MEASURE_REQ_BEACON_SUB_SSID0 0
1802#define MEASURE_REQ_BEACON_SUB_BRI1 1
1803#define MEASURE_REQ_BEACON_SUB_RD2 2
1804#define MEASURE_REQ_BEACON_SUB_REQUEST10 10
1805#define MEASURE_REQ_BEACON_SUB_REQUEST_EXT11 11
1806#define MEASURE_REQ_BEACON_SUB_APCP51 51
1807#define MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163 163
1808#define MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164 164
1809#define MEASURE_REQ_BEACON_SUB_VS221 221
1810
1811static const value_string ieee80211_tag_measure_request_beacon_sub_id_flags[] = {
1812 { MEASURE_REQ_BEACON_SUB_SSID0, "SSID" },
1813 { MEASURE_REQ_BEACON_SUB_BRI1, "Beacon Reporting Information" },
1814 { MEASURE_REQ_BEACON_SUB_RD2, "Reporting Detail" },
1815 { MEASURE_REQ_BEACON_SUB_REQUEST10, "Request" },
1816 { MEASURE_REQ_BEACON_SUB_REQUEST_EXT11, "Extended Request" },
1817 { MEASURE_REQ_BEACON_SUB_APCP51, "AP Channel Report" },
1818 { MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163, "Wide Channel Bandwidth Switch" },
1819 { MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164, "Last Beacon Report Indication Request" },
1820 { MEASURE_REQ_BEACON_SUB_VS221, "Vendor Specific" },
1821 { 0x00, NULL((void*)0)}
1822};
1823
1824static const value_string ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition_flags[] = {
1825 { 0x00, "Report to be issued after each measurement." },
1826 { 0x01, "The measured RCPI level is greater than an absolute threshold." },
1827 { 0x02, "The measured RCPI level is less than an absolute threshold." },
1828 { 0x03, "The measured RSNI level is greater than an absolute threshold." },
1829 { 0x04, "The measured RSNI level is less than an absolute threshold." },
1830 { 0x05, "The measured RCPI level is greater than a threshold defined by an offset from the serving AP's reference RCPI." },
1831 { 0x06, "The measured RCPI level is less than a threshold defined by an offset from the serving AP's reference RCPI." },
1832 { 0x07, "The measured RSNI level is greater than a threshold defined by an offset from the serving AP's reference RSNI." },
1833 { 0x08, "The measured RSNI level is less than a threshold defined by an offset from the serving AP's reference RSNI." },
1834 { 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." },
1835 { 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." },
1836 { 0xfe, "Report not required to be issued" },
1837 { 0x00, NULL((void*)0) }
1838};
1839
1840static const value_string ieee80211_tag_measure_request_beacon_sub_reporting_detail_flags[] = {
1841 { 0, "No fixed length fields or elements" },
1842 { 1, "All fixed length fields and any requested elements in the Request information element if present" },
1843 { 2, "All fixed length fields and elements (default, used when Reporting Detail subelement is not included in Beacon Request" },
1844 { 0x00, NULL((void*)0) }
1845};
1846
1847static const value_string ieee80211_tag_measure_request_group_id_flags[] = {
1848 { 0x00, "STA Counters from dot11CountersTable" },
1849 { 0x01, "STA Counters from dot11MacStatistics group" },
1850 { 0x02, "QoS STA Counters for UP0 from dot11QosCountersTable" },
1851 { 0x03, "QoS STA Counters for UP1 from dot11QosCountersTable" },
1852 { 0x04, "QoS STA Counters for UP2 from dot11QosCountersTable" },
1853 { 0x05, "QoS STA Counters for UP3 from dot11QosCountersTable" },
1854 { 0x06, "QoS STA Counters for UP4 from dot11QosCountersTable" },
1855 { 0x07, "QoS STA Counters for UP5 from dot11QosCountersTable" },
1856 { 0x08, "QoS STA Counters for UP6 from dot11QosCountersTable" },
1857 { 0x09, "QoS STA Counters for UP7 from dot11QosCountersTable" },
1858 { 0x0a, "BSS Average Access Delays" },
1859 { 0x0b, "STA Counters from dot11A-MSDU Group" },
1860 { 0x0c, "STA Counters from dot11A-MPDU Group" },
1861 { 0x0d, "STA Counters from dot11 BAR, Channel Width, PSMP Group" },
1862 { 0x0e, "STA Counters from dot11Protection Group" },
1863 { 0x0f, "STBC Group" },
1864 { 0x00, NULL((void*)0) }
1865};
1866static value_string_ext ieee80211_tag_measure_request_group_id_flags_ext =
1867 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) }
;
1868
1869static const value_string ieee80211_tag_measure_request_location_subject[] = {
1870 { 0, "Local" },
1871 { 1, "Remote" },
1872 { 2, "Third party" },
1873 { 0x00, NULL((void*)0) }
1874};
1875
1876static const value_string ieee80211_tag_measure_request_civic_location_type[] = {
1877 { 0, "IETF RFC 4776" },
1878 { 1, "Vendor Specific" },
1879 { 0x00, NULL((void*)0) }
1880};
1881
1882static const value_string ieee80211_tclas_process_flag[] = {
1883 {0x00, "Incoming MSDU's higher layer parameters have to match to the parameters in all associated TCLAS elements."},
1884 {0x01, "Incoming MSDU's higher layer parameters have to match to at least one of the associated TCLAS elements."},
1885 {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."},
1886 {0, NULL((void*)0)}
1887};
1888
1889
1890#define MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1 1
1891
1892static const value_string ieee80211_tag_measure_request_channel_load_sub_id_vals[] = {
1893 { MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1, "Channel Load Reporting Information" },
1894 { 221, "Vendor Specific" },
1895 { 0x00, NULL((void*)0)}
1896};
1897
1898static const value_string ieee80211_tag_measure_request_channel_load_sub_reporting_condition_vals[] = {
1899 { 0x00, "Report to be issued after each measurement (default, used when Channel Load Reporting Information subelement is not included in Channel Load Request)." },
1900 { 0x01, "Report to be issued when measured Channel Load is equal to or greater than the reference value." },
1901 { 0x02, "Report to be issued when measured Channel Load is equal to or less than the reference value." },
1902 { 0x00, NULL((void*)0)}
1903};
1904
1905#define MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1 1
1906
1907static const value_string ieee80211_tag_measure_request_noise_histogram_sub_id_vals[] = {
1908 { MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1, "Noise Histogram Reporting Information" },
1909 { 221, "Vendor Specific" },
1910 { 0x00, NULL((void*)0)}
1911};
1912
1913static const value_string ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition_vals[] = {
1914 { 0x00, "Report to be issued after each measurement (default, used when Noise Histogram Reporting Information subelement is not included in Noise Histogram Request)." },
1915 { 0x01, "Noise Histogram Report to be issued when measured ANPI is equal to or greater than the reference value." },
1916 { 0x02, "Noise Histogram Report to be issued when measured ANPI is equal to or less than the reference value." },
1917 { 0x00, NULL((void*)0)}
1918};
1919
1920#define MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1 1
1921#define MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2 2
1922#define MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163 163
1923#define MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164 164
1924
1925static const value_string ieee80211_tag_measure_report_beacon_sub_id_vals[] = {
1926 { MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1, "Reported Frame Body" },
1927 { MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2, "Reported Frame Body Fragment ID" },
1928 { MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163, "Wide Bandwidth Channel Switch"},
1929 { MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164, "Last Beacon Report Indication"},
1930 { 221, "Vendor Specific" },
1931 { 0x00, NULL((void*)0)}
1932};
1933
1934#define MEASURE_REP_LCI_SUB_REPORTED_LCI0 0
1935#define MEASURE_REP_LCI_SUB_REPORTED_AZIMUTH_REPORT1 1
1936#define MEASURE_REP_LCI_SUB_REPORTED_OR_STA2 2
1937#define MEASURE_REP_LCI_SUB_REPORTED_T_MAC3 3
1938#define MEASURE_REP_LCI_SUB_REPORTED_Z4 4
1939#define MEASURE_REP_LCI_SUB_REPORTED_RLE5 5
1940#define MEASURE_REP_LCI_SUB_REPORTED_URP6 6
1941#define MEASURE_REP_LCI_SUB_REPORTED_CO_BSSID7 7
1942
1943static const value_string ieee80211_tag_measure_report_lci_sub_id_vals[] = {
1944 { MEASURE_REP_LCI_SUB_REPORTED_LCI0, "LCI" },
1945 { MEASURE_REP_LCI_SUB_REPORTED_AZIMUTH_REPORT1, "Azimuth Report" },
1946 { MEASURE_REP_LCI_SUB_REPORTED_OR_STA2, "Originator Requesting STA MAC Address" },
1947 { MEASURE_REP_LCI_SUB_REPORTED_T_MAC3, "Target MAC Address" },
1948 { MEASURE_REP_LCI_SUB_REPORTED_Z4, "Z" },
1949 { MEASURE_REP_LCI_SUB_REPORTED_RLE5, "Relative Location Error" },
1950 { MEASURE_REP_LCI_SUB_REPORTED_URP6, "Usage Rules/Policy" },
1951 { MEASURE_REP_LCI_SUB_REPORTED_CO_BSSID7, "Co-Located BSSID List" },
1952 { 221, "Vendor Specific" },
1953 { 0x00, NULL((void*)0)}
1954};
1955
1956#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0 0
1957#define MEASURE_REP_CIVIC_SUB_REPORTED_OR_STA1 1
1958#define MEASURE_REP_CIVIC_SUB_REPORTED_T_MAC2 2
1959#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_REFERENCE3 3
1960#define MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_SHAPE4 4
1961#define MEASURE_REP_CIVIC_SUB_REPORTED_MAP_IMAGE5 5
1962#define MEASURE_REP_CIVIC_SUB_REPORTED_RESERVED6 6
1963#define MEASURE_REP_CIVIC_SUB_REPORTED_CO_BSSID7 7
1964
1965static const value_string ieee80211_tag_measure_report_civic_sub_id_vals[] = {
1966 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0, "Location Civic" },
1967 { MEASURE_REP_CIVIC_SUB_REPORTED_OR_STA1, "Originator Requesting STA MAC Address" },
1968 { MEASURE_REP_CIVIC_SUB_REPORTED_T_MAC2, "Target MAC Address" },
1969 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_REFERENCE3, "Location Reference" },
1970 { MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_SHAPE4, "Location Shape" },
1971 { MEASURE_REP_CIVIC_SUB_REPORTED_MAP_IMAGE5, "Map Image" },
1972 { MEASURE_REP_CIVIC_SUB_REPORTED_RESERVED6, "Reserved" },
1973 { MEASURE_REP_CIVIC_SUB_REPORTED_CO_BSSID7, "Co-Located BSSID List" },
1974 { 221, "Vendor Specific" },
1975 { 0x00, NULL((void*)0)}
1976};
1977
1978static const value_string frame_type[] = {
1979 {MGT_FRAME0x00, "Management frame"},
1980 {CONTROL_FRAME0x01, "Control frame"},
1981 {DATA_FRAME0x02, "Data frame"},
1982 {EXTENSION_FRAME0x03, "Extension frame"},
1983 {0, NULL((void*)0)}
1984};
1985
1986static const value_string tofrom_ds[] = {
1987 {0, "Not leaving DS or network is operating "
1988 "in AD-HOC mode (To DS: 0 From DS: 0)"},
1989 {FLAG_TO_DS0x01, "Frame from STA to DS via an AP (To DS: 1 "
1990 "From DS: 0)"},
1991 {FLAG_FROM_DS0x02, "Frame from DS to a STA via AP(To DS: 0 "
1992 "From DS: 1)"},
1993 {FLAG_TO_DS0x01|FLAG_FROM_DS0x02, "WDS (AP to AP) or Mesh (MP to MP) Frame "
1994 "(To DS: 1 From DS: 1)"},
1995 {0, NULL((void*)0)}
1996};
1997
1998static const true_false_string tods_flag = {
1999 "Frame is entering DS",
2000 "Frame is not entering DS"
2001};
2002
2003static const true_false_string fromds_flag = {
2004 "Frame is exiting DS",
2005 "Frame is not exiting DS"
2006};
2007
2008static const true_false_string more_fragments = {
2009 "More fragments follow",
2010 "This is the last fragment"
2011};
2012
2013static const true_false_string retry_flags = {
2014 "Frame is being retransmitted",
2015 "Frame is not being retransmitted"
2016};
2017
2018static const true_false_string s1g_dynamic_indication_flags = {
2019 "Dynamic",
2020 "Static"
2021};
2022
2023static const true_false_string pm_flags = {
2024 "STA will go to sleep",
2025 "STA will stay up"
2026};
2027
2028static const true_false_string md_flags = {
2029 "Data is buffered for STA at AP",
2030 "No data buffered"
2031};
2032
2033static const true_false_string protected_flags = {
2034 "Data is protected",
2035 "Data is not protected"
2036};
2037
2038static const true_false_string order_flags = {
2039 "Strictly ordered",
2040 "Not strictly ordered"
2041};
2042
2043static const true_false_string cf_ess_flags = {
2044 "Transmitter is an AP",
2045 "Transmitter is a STA"
2046};
2047
2048
2049static const true_false_string cf_privacy_flags = {
2050 "Data confidentiality required",
2051 "Data confidentiality not required"
2052};
2053
2054static const true_false_string cf_ibss_flags = {
2055 "Transmitter belongs to an IBSS",
2056 "Transmitter belongs to a BSS"
2057};
2058
2059static const true_false_string eosp_flag = {
2060 "End of service period",
2061 "Service period"
2062};
2063
2064static const true_false_string bit4_flag = {
2065 "Bits 8-15 of QoS Control field are Queue Size",
2066 "Bits 8-15 of QoS Control field are TXOP Duration Requested"
2067};
2068
2069static const true_false_string ieee80211_qos_amsdu_present_flag = {
2070 "A-MSDU",
2071 "MSDU"
2072};
2073
2074static const true_false_string csa_txrestrict_flags = {
2075 "Tx Restrict",
2076 "No Tx Restrict"
2077};
2078
2079static const true_false_string csa_initiator_flags = {
2080 "Initiator",
2081 "Non Initiator"
2082};
2083
2084static const true_false_string mesh_config_cap_power_save_level_flags = {
2085 "At least one of the peer-specific mesh power modes is deep sleep mode",
2086 "None of the peer-specific mesh power modes is deep sleep mode"
2087};
2088
2089static const true_false_string ieee80211_qos_mesh_ps = {
2090 "deep sleep mode",
2091 "light sleep mode"
2092};
2093
2094#define AUTH_ALG_OPEN0 0
2095#define AUTH_ALG_SHARED1 1
2096#define AUTH_ALG_FAST_BSS_TRANS2 2
2097#define AUTH_ALG_SAE3 3
2098#define AUTH_ALG_FILS_SK_WITHOUT_PFS4 4
2099#define AUTH_ALG_FILS_SK_WITH_PFS5 5
2100#define AUTH_ALG_FILS_PK6 6
2101#define AUTH_ALG_PASN7 7
2102#define AUTH_ALG_EPPKE9 9
2103#define AUTH_ALG_NETWORK_EAP0x80 0x80
2104
2105static const value_string auth_alg[] = {
2106 {AUTH_ALG_OPEN0, "Open System"},
2107 {AUTH_ALG_SHARED1, "Shared key"},
2108 {AUTH_ALG_FAST_BSS_TRANS2, "Fast BSS Transition"},
2109 {AUTH_ALG_SAE3, "Simultaneous Authentication of Equals (SAE)"},
2110 {AUTH_ALG_FILS_SK_WITHOUT_PFS4, "FILS Shared Key authentication without PFS"},
2111 {AUTH_ALG_FILS_SK_WITH_PFS5, "FILS Shared Key authentication with PFS"},
2112 {AUTH_ALG_FILS_PK6, "FILS Public Key authentication"},
2113 {AUTH_ALG_PASN7, "Pre-Association Security Negotiation (PASN)"},
2114 {AUTH_ALG_EPPKE9, "Enhanced Privacy Protection Key Exchange (EPPKE)"},
2115 {AUTH_ALG_NETWORK_EAP0x80, "Network EAP"}, /* Cisco proprietary? */
2116 {0, NULL((void*)0)}
2117};
2118
2119/* IANA - Internet Key Exchange (IKE) Attributes - Group Description (https://www.iana.org/assignments/ipsec-registry/ipsec-registry.xhtml) */
2120static const value_string ff_finite_cyclic_group_vals[] = {
2121 { 1, "default 768-bit MODP group"},
2122 { 2, "alternate 1024-bit MODP group"},
2123 { 3, "EC2N group on GP[2^155]"},
2124 { 4, "EC2N group on GP[2^185]"},
2125 { 5, "1536-bit MODP group"},
2126 {14, "2048-bit MODP group"},
2127 {15, "3072-bit MODP group"},
2128 {16, "4096-bit MODP group"},
2129 {17, "6144-bit MODP group"},
2130 {18, "8192-bit MODP group"},
2131 {19, "256-bit random ECP group"},
2132 {20, "384-bit random ECP group"},
2133 {21, "521-bit random ECP group"},
2134 {22, "1024-bit MODP Group with 160-bit Prime Order Subgroup"},
2135 {23, "2048-bit MODP Group with 224-bit Prime Order Subgroup"},
2136 {24, "2048-bit MODP Group with 256-bit Prime Order Subgroup"},
2137 {25, "192-bit Random ECP Group"},
2138 {26, "224-bit Random ECP Group"},
2139 {27, "224-bit Brainpool ECP group"},
2140 {28, "256-bit Brainpool ECP group"},
2141 {29, "384-bit Brainpool ECP group"},
2142 {30, "512-bit Brainpool ECP group"},
2143 {0, NULL((void*)0)}
2144};
2145
2146static const true_false_string ff_block_ack_params_amsdu_permitted_flag = {
2147 "Permitted in QoS Data MPDUs",
2148 "Not Permitted"
2149};
2150
2151static const true_false_string ff_block_ack_params_policy_flag = {
2152 "Immediate Block Ack",
2153 "Delayed Block Ack"
2154};
2155
2156static const value_string ff_channel_width_vals[] = {
2157 {0x00, "20 MHz channel width only"},
2158 {0x01, "Any channel width in the STA's Supported Channel Width Set"},
2159 {0, NULL((void*)0)}
2160};
2161
2162static const true_false_string ff_qos_info_ap_q_ack_flag = {
2163 "APs MIB attribute dot11QAckOptionImplemented is true",
2164 "APs MIB attribute dot11QAckOptionImplemented is false"
2165};
2166
2167static const true_false_string ff_qos_info_ap_queue_req_flag = {
2168 "AP can process a nonzero Queue Size subfield in the QoS Control field in QoS data frames",
2169 "AP cannot process a nonzero Queue Size subfield in the QoS Control field in QoS data frames"
2170};
2171
2172static const true_false_string ff_qos_info_ap_txop_request_flag = {
2173 "AP can process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames",
2174 "AP cannot process a nonzero TXOP Duration Requested subfield in the QoS Control field in QoS data frames"
2175};
2176
2177static const true_false_string ff_qos_info_sta_ac_flag = {
2178 "Trigger-enabled and Delivery-enabled",
2179 "Neither Trigger-enabled nor Delivery-enabled"
2180};
2181
2182static const true_false_string ff_qos_info_sta_q_ack_flag = {
2183 "STAs MIB attribute dot11QAckOptionImplemented is true",
2184 "STAs MIB attribute dot11QAckOptionImplemented is false"
2185};
2186
2187static const value_string ff_qos_info_sta_max_sp_len_flags[] = {
2188 {0x00, "AP may deliver all buffered MSDUs, A-MSDUs and MMPDUs"},
2189 {0x01, "AP may deliver a maximum of two MSDUs, A-MSDUs and MMPDUs per SP"},
2190 {0x02, "AP may deliver a maximum of four MSDUs, A-MSDUs and MMPDUs per SP"},
2191 {0x03, "AP may deliver a maximum of six MSDUs, A-MSDUs and MMPDUs per SP"},
2192 {0, NULL((void*)0)}
2193};
2194
2195static const true_false_string ff_qos_info_sta_more_data_ack_flag = {
2196 "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",
2197 "STA cannot process ACK frames with the More Data bit in the Frame Control field set to 1"
2198};
2199
2200static const true_false_string ff_sm_pwr_save_sm_mode_flag = {
2201 "Dynamic SM Power Save mode",
2202 "Static SM Power Save mode"
2203};
2204
2205static const true_false_string ff_pco_phase_cntrl_flag = {
2206 "40 MHz Phase",
2207 "20 MHz Phase"
2208};
2209
2210static const true_false_string ff_psmp_param_set_more_psmp_flag = {
2211 "More PSMP Sequences Follow",
2212 "No PSMP Sequences Follow"
2213};
2214
2215static const value_string ff_mimo_cntrl_nc_index_flags[] = {
2216 {0x00, "1 Column"},
2217 {0x01, "2 Columns"},
2218 {0x02, "3 Columns"},
2219 {0x03, "4 Columns"},
2220 {0, NULL((void*)0)}
2221};
2222
2223static const value_string ff_mimo_cntrl_nr_index_flags[] = {
2224 {0x00, "1 Row"},
2225 {0x01, "2 Rows"},
2226 {0x02, "3 Rows"},
2227 {0x03, "4 Rows"},
2228 {0, NULL((void*)0)}
2229};
2230
2231static const true_false_string ff_mimo_cntrl_channel_width_flag = {
2232 "40 MHz",
2233 "20 MHz"
2234};
2235
2236static const true_false_string ff_ht_info_information_request_flag = {
2237 "Requesting HT Information Exchange management action frame",
2238 "Should not send an HT Information Exchange management action frame"
2239};
2240
2241static const true_false_string ff_ht_info_40_mhz_intolerant_flag = {
2242 "Transmitting station is intolerant of 40 MHz operation",
2243 "Transmitting station permits 40 MHz operation"
2244};
2245
2246static const true_false_string ff_ht_info_sta_chan_width_flag = {
2247 "40 MHz",
2248 "20 MHz"
2249};
2250
2251static const value_string ff_ht_action_flags[] = {
2252 {HT_ACTION_NOTIFY_CHAN_WIDTH0, "Notify Channel Width"},
2253 {HT_ACTION_SM_PWR_SAVE1, "Spatial Multiplexing (SM) Power Save"},
2254 {HT_ACTION_PSMP_ACTION2, "Power Save Multi-Poll (PSMP) action frame"},
2255 {HT_ACTION_SET_PCO_PHASE3, "Set PCO Phase"},
2256 {HT_ACTION_MIMO_CSI4, "MIMO CSI Matrices"},
2257 {HT_ACTION_MIMO_BEAMFORMING5, "MIMO Non-compressed Beamforming"},
2258 {HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6, "MIMO Compressed Beamforming"},
2259 {HT_ACTION_ANT_SEL_FEEDBACK7, "Antenna Selection Indices Feedback"},
2260 {HT_ACTION_HT_INFO_EXCHANGE8, "HT Information Exchange"},
2261 {0x00, NULL((void*)0)}
2262};
2263
2264static const value_string ff_fst_action_flags[] = {
2265 {FST_SETUP_REQUEST0, "FST Setup Request"},
2266 {FST_SETUP_RESPONSE1, "FST Setup Response"},
2267 {FST_TEAR_DOWN2, "FST Tear Down"},
2268 {FST_ACK_REQUEST3, "FST Ack Request"},
2269 {FST_ACK_RESPONSE4, "FST Ack Response"},
2270 {FST_ON_CHANNEL_TUNNEL_REQUEST5, "FST On-channel Tunnel Request"},
2271 {0x00, NULL((void*)0)}
2272};
2273
2274static const value_string ff_robust_av_streaming_action_flags[] = {
2275 {ROBUST_AV_STREAMING_SCS_REQUEST0, "SCS Request"},
2276 {ROBUST_AV_STREAMING_SCS_RESPONSE1, "SCS Response"},
2277 {ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_REQ2, "Group Membership Request"},
2278 {ROBUST_AV_STREAMING_GROUP_MEMBERSHIP_RSP3, "Group Membership Response"},
2279 {ROBUST_AV_STREAMING_MSCS_REQUEST4, "MSCS Request"},
2280 {ROBUST_AV_STREAMING_MSCS_RESPONSE5, "MSCS Response"},
2281 {0x00, NULL((void*)0)}
2282};
2283
2284static const value_string ff_dmg_action_flags[] = {
2285 {DMG_ACTION_PWR_SAVE_CONFIG_REQ0, "Power Save Configuration Request"},
2286 {DMG_ACTION_PWR_SAVE_CONFIG_RES1, "Power Save Configuration Response"},
2287 {DMG_ACTION_INFO_REQ2, "Information Request"},
2288 {DMG_ACTION_INFO_RES3, "Information Response"},
2289 {DMG_ACTION_HANDOVER_REQ4, "Handover Request"},
2290 {DMG_ACTION_HANDOVER_RES5, "Handover Response"},
2291 {DMG_ACTION_DTP_REQ6, "DTP Request"},
2292 {DMG_ACTION_DTP_RES7, "DTP Response"},
2293 {DMG_ACTION_RELAY_SEARCH_REQ8, "Relay Search Request"},
2294 {DMG_ACTION_RELAY_SEARCH_RES9, "Relay Search Response"},
2295 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10, "Multi Relay Channel Measurement Request"},
2296 {DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11, "Multi Relay Channel Measurement Response"},
2297 {DMG_ACTION_RLS_REQ12, "RLS Request"},
2298 {DMG_ACTION_RLS_RES13, "RLS Response"},
2299 {DMG_ACTION_RLS_ANNOUNCE14, "RLS Announcement"},
2300 {DMG_ACTION_RLS_TEARDOWN15, "RLS Teardown"},
2301 {DMG_ACTION_RELAY_ACK_REQ16, "Relay ACK Request"},
2302 {DMG_ACTION_RELAY_ACK_RES17, "Relay ACK Response"},
2303 {DMG_ACTION_TPA_REQ18, "TPA Request"},
2304 {DMG_ACTION_TPA_RES19, "TPA Response"},
2305 {DMG_ACTION_TPA_REP20, "TPA Report"},
2306 {DMG_ACTION_ROC_REQ21, "ROC Request"},
2307 {DMG_ACTION_ROC_RES22, "ROC Response"},
2308 {0x00, NULL((void*)0)}
2309};
2310
2311static const value_string ff_unprotected_dmg_action_flags[] = {
2312 {UNPROTECTED_DMG_ANNOUNCE0, "Announce"},
2313 {UNPROTECTED_DMG_BRP1, "BRP"},
2314 {0x00, NULL((void*)0)}
2315};
2316static const value_string ff_mimo_cntrl_grouping_flags[] = {
2317 {0x00, "No Grouping"},
2318 {0x01, "Carrier Groups of 2"},
2319 {0x02, "Carrier Groups of 4"},
2320 {0x03, "Reserved"},
2321 {0, NULL((void*)0)}
2322};
2323
2324static const value_string ff_mimo_cntrl_coefficient_size_flags[] = {
2325 {0x00, "4 Bits"},
2326 {0x01, "5 Bits"},
2327 {0x02, "6 Bits"},
2328 {0x03, "8 Bits"},
2329 {0, NULL((void*)0)}
2330};
2331
2332static const value_string ff_mimo_cntrl_codebook_info_flags[] = {
2333 {0x00, "1 bit for 'Capital Psi', 3 bits for 'Small Psi'"},
2334 {0x01, "2 bit for 'Capital Psi', 4 bits for 'Small Psi'"},
2335 {0x02, "3 bit for 'Capital Psi', 5 bits for 'Small Psi'"},
2336 {0x03, "4 bit for 'Capital Psi', 6 bits for 'Small Psi'"},
2337 {0, NULL((void*)0)}
2338};
2339
2340static const value_string ff_ppa_action_codes[] = {
2341 {PPA_DSE_ENABLEMENT1, "Protected DSE enablement"},
2342 {PPA_DSE_DEENABLEMENT2, "Protected DSE deenablement"},
2343 {PPA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4, "Protected Extended Channel Switch Announcement"},
2344 {PPA_DSE_MEASUREMENT_REQUEST5, "Protected DSE measurement request"},
2345 {PPA_DSE_MEASUREMENT_REPORT6, "Protected DSE measurement report"},
2346 {PPA_DSE_POWER_CONSTRAINT8, "Protected DSE power constraint"},
2347 {PPA_VENDOR_SPECIFIC9, "Protected Vendor Specific"},
2348 {PPA_GAS_INITIAL_REQUEST10, "Protected GAS Initial Request"},
2349 {PPA_GAS_INITIAL_RESPONSE11, "Protected GAS Initial Response"},
2350 {PPA_GAS_COMEBACK_REQUEST12, "Protected GAS Comeback Request"},
2351 {PPA_GAS_COMEBACK_RESPONSE13, "Protected GAS Comeback Response"},
2352 {PPA_QAB_REQUEST16, "Protected QAB Request"},
2353 {PPA_QAB_RESPONSE17, "Protected QAB Response"},
2354 {0x00, NULL((void*)0)}
2355};
2356static 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) }
;
2357
2358static const value_string ff_pa_action_codes[] = {
2359 {PA_20_40_BSS_COEXISTENCE_MANAGEMENT0, "20/40 BSS Coexistence Management"},
2360 {PA_DSE_ENABLEMENT1, "DSE enablement"},
2361 {PA_DSE_DEENABLEMENT2, "DSE deenablement"},
2362 {PA_DSE_REG_LOC_ANNOUNCEMENT3, "DSE Registered Location Announcement"},
2363 {PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4, "Extended Channel Switch Announcement"},
2364 {PA_DSE_MEASUREMENT_REQUEST5, "DSE measurement request"},
2365 {PA_DSE_MEASUREMENT_REPORT6, "DSE measurement report"},
2366 {PA_MEASUREMENT_PILOT7, "Measurement Pilot"},
2367 {PA_DSE_POWER_CONSTRAINT8, "DSE power constraint"},
2368 {PA_VENDOR_SPECIFIC9, "Vendor Specific"},
2369 {PA_GAS_INITIAL_REQUEST10, "GAS Initial Request"},
2370 {PA_GAS_INITIAL_RESPONSE11, "GAS Initial Response"},
2371 {PA_GAS_COMEBACK_REQUEST12, "GAS Comeback Request"},
2372 {PA_GAS_COMEBACK_RESPONSE13, "GAS Comeback Response"},
2373 {PA_TDLS_DISCOVERY_RESPONSE14, "TDLS Discovery Response"},
2374 {PA_LOCATION_TRACK_NOTIFICATION15, "Location Track Notification"},
2375 {PA_QAB_REQUEST16, "QAB Request"},
2376 {PA_QAB_RESPONSE17, "QAB Response"},
2377 {PA_QMF_POLICY18, "QMF Policy"},
2378 {PA_QMF_POLICY_CHANGE19, "QMF Policy Change"},
2379 {PA_QLOAD_REQUEST20, "QLoad Request"},
2380 {PA_QLOAD_REPORT21, "QLoad Report"},
2381 {PA_HCCA_TXOP_ADVERTISEMENT22, "HCCA TXOP Advertisement"},
2382 {PA_HCCA_TXOP_RESPONSE23, "HCCA TXOP Response"},
2383 {PA_PUBLIC_KEY24, "Public Key"},
2384 {PA_CHANNEL_AVAILABILITY_QUERY25, "Channel Availability Query"},
2385 {PA_CHANNEL_SCHEDULE_MANAGEMENT26, "Channel Schedule Management"},
2386 {PA_CONTACT_VERIFICATION_SIGNAL27, "Contact Verification Signal"},
2387 {PA_GDD_ENABLEMENT_REQUEST28, "GDD Enablement Request"},
2388 {PA_GDD_ENABLEMENT_RESPONSE29, "GDD Enablement Response"},
2389 {PA_NETWORK_CHANNEL_CONTROL30, "Network Channel Control"},
2390 {PA_WHITE_SPACE_MAP_ANNOUNCEMENT31, "White Space Map Announcement"},
2391 {PA_FTM_REQUEST32, "FTM Request"},
2392 {PA_FTM33, "FTM"},
2393 {PA_FILS_DISCOVERY34, "FILS Discovery"},
2394 {PA_LOCATION_MEASUREMENT_REPORT47, "Location Measurement Report"},
2395 {PA_ISTA_PASSIVE_TB_RANGING_MEASUREMENT_REPORT48, "ISTA Passive TB Ranging Measurement Report"},
2396 {PA_PRIMARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT49, "Primary RSTA Broadcast Passive TB Ranging Measurement Report"},
2397 {PA_SECONDARY_RSTA_BROADCAST_PASSIVE_TB_RANGING_MEASUREMENT_REPORT50, "Secondary RSTA Broadcast Passive TB Ranging Measurement Report"},
2398 {0x00, NULL((void*)0)}
2399};
2400value_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) }
;
2401
2402static const value_string protected_ftm_action_vals[] = {
2403 {0, "Reserved"},
2404 {1, "Protected FTM Request"},
2405 {2, "Protected FTM"},
2406 {3, "Protected Location Measurement Report"},
2407 {0, NULL((void*)0)}
2408};
2409
2410static const value_string ftm_trigger_vals[] = {
2411 {0, "Stop sending FTM frames"},
2412 {1, "Start or continue sending FTM frames"},
2413 /* all other values reserved */
2414 {0, NULL((void*)0)}
2415};
2416
2417static const value_string category_codes[] = {
2418 {CAT_SPECTRUM_MGMT0, "Spectrum Management (SM)"},
2419 {CAT_QOS1, "Quality of Service (QoS)"},
2420 {CAT_DLS2, "Direct-Link Setup (DLS)"},
2421 {CAT_BLOCK_ACK3, "Block Ack"},
2422 {CAT_PUBLIC4, "Public Action"},
2423 {CAT_RADIO_MEASUREMENT5, "Radio Measurement"},
2424 {CAT_FAST_BSS_TRANSITION6, "Fast BSS Transition"},
2425 {CAT_HT7, "High Throughput"},
2426 {CAT_SA_QUERY8, "SA Query"},
2427 {CAT_PUBLIC_PROTECTED9, "Protected Dual of Public Action"},
2428 {CAT_WNM10, "WNM"},
2429 {CAT_UNPROTECTED_WNM11, "Unprotected WNM"},
2430 {CAT_TDLS12, "TDLS"},
2431 {CAT_MESH13, "MESH"},
2432 {CAT_MULTIHOP14, "Multihop"},
2433 {CAT_SELF_PROTECTED15, "Self-protected"},
2434 {CAT_DMG16, "DMG"},
2435 {CAT_MGMT_NOTIFICATION17, "Management Notification"},
2436 {CAT_FAST_SESSION_TRANSFER18, "Fast Session Transfer"},
2437 {CAT_ROBUST_AV_STREAMING19, "Robust AV Streaming"},
2438 {CAT_UNPROTECTED_DMG20, "Unprotected DMG"},
2439 {CAT_VHT21, "VHT"},
2440 {CAT_S1G22, "S1G"},
2441 {CAT_PROTECTED_S1G23, "Protected S1G"},
2442 {CAT_FLOW_CONTROL24, "Flow Control"},
2443 {CAT_CONTROL_RESPONSE_MCS_NEG25, "Control Response MCS Negotiation"},
2444 {CAT_FILS26, "FILS"},
2445 {CAT_HE30, "HE"},
2446 {CAT_PROTECTED_HE31, "Protected HE"},
2447 {CAT_PROTECTED_FTM34, "Protected FTM"},
2448 {CAT_EHT36, "EHT"},
2449 {CAT_PROTECTED_EHT37, "Protected EHT"},
2450 {CAT_VENDOR_SPECIFIC_PROTECTED126, "Vendor-specific Protected"},
2451 {CAT_VENDOR_SPECIFIC127, "Vendor Specific"},
2452
2453 {0x80 | CAT_SPECTRUM_MGMT0, "Spectrum Management (SM) (error)"},
2454 {0x80 | CAT_QOS1, "Quality of Service (QoS (error))"},
2455 {0x80 | CAT_DLS2, "Direct-Link Setup (DLS) (error)"},
2456 {0x80 | CAT_BLOCK_ACK3, "Block Ack (error)"},
2457 {0x80 | CAT_PUBLIC4, "Public Action (error)"},
2458 {0x80 | CAT_RADIO_MEASUREMENT5, "Radio Measurement (error)"},
2459 {0x80 | CAT_FAST_BSS_TRANSITION6, "Fast BSS Transition (error)"},
2460 {0x80 | CAT_HT7, "High Throughput (error)"},
2461 {0x80 | CAT_SA_QUERY8, "SA Query (error)"},
2462 {0x80 | CAT_PUBLIC_PROTECTED9, "Protected Dual of Public Action (error)"},
2463 {0x80 | CAT_WNM10, "WNM (error)"},
2464 {0x80 | CAT_UNPROTECTED_WNM11, "Unprotected WNM (error)"},
2465 {0x80 | CAT_TDLS12, "TDLS (error)"},
2466 {0x80 | CAT_MESH13, "Mesh (error)"},
2467 {0x80 | CAT_MULTIHOP14, "Multihop (error)"},
2468 {0x80 | CAT_SELF_PROTECTED15, "Self-protected (error)"},
2469 {0x80 | CAT_DMG16, "DMG (error)"},
2470 {0x80 | CAT_MGMT_NOTIFICATION17, "Management Notification (error)"},
2471 {0x80 | CAT_FAST_SESSION_TRANSFER18, "Fast Session Transfer (error)"},
2472 {0x80 | CAT_ROBUST_AV_STREAMING19, "Robust AV Streaming (error)"},
2473 {0x80 | CAT_UNPROTECTED_DMG20, "Unprotected DMG (error)"},
2474 {0x80 | CAT_VHT21, "VHT (error)"},
2475 {0x80 | CAT_HE30, "HE (error)"},
2476 {0x80 | CAT_PROTECTED_HE31, "Protected HE (error)"},
2477 {0x80 | CAT_PROTECTED_FTM34, "Protected FTM (error)"},
2478 {0x80 | CAT_EHT36, "EHT (error)"},
2479 {0x80 | CAT_PROTECTED_EHT37, "Protected EHT (error)"},
2480 {0x80 | CAT_VENDOR_SPECIFIC_PROTECTED126, "Vendor-specific Protected (error)"},
2481 {0x80 | CAT_VENDOR_SPECIFIC127, "Vendor Specific (error)"},
2482 {0, NULL((void*)0)}
2483};
2484static 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) }
;
2485
2486#define NR_SUB_ID_TSF_INFO1 1
2487#define NR_SUB_ID_CON_COU_STR2 2
2488#define NR_SUB_ID_BSS_TRN_CAN_PREF3 3
2489#define NR_SUB_ID_BSS_TER_DUR4 4
2490#define NR_SUB_ID_BEARING5 5
2491#define NR_SUB_ID_WIDE_BW_CHANNEL6 6
2492
2493#define NR_SUB_ID_MEASUREMENT_REPORT39 39
2494#define NR_SUB_ID_HT_CAPABILITIES45 45
2495#define NR_SUB_ID_HT_OPERATION61 61
2496#define NR_SUB_ID_SEC_CHANNEL_OFFSET62 62
2497#define NR_SUB_ID_MEASUREMENT_PILOT_INFO66 66
2498#define NR_SUB_ID_RM_ENABLE_CAP70 70
2499#define NR_SUB_ID_HT_MULTIPLE_BSSID71 71
2500#define NR_SUB_ID_VHT_CAPABILITIES191 191
2501#define NR_SUB_ID_VHT_OPERATION192 192
2502#define NR_SUB_ID_HE_CAPABILITIES193 193
2503#define NR_SUB_ID_HE_OPERATION194 194
2504#define NR_SUB_ID_EHT_CAPABILITIES199 199
2505#define NR_SUB_ID_EHT_OPERATION200 200
2506#define NR_SUB_ID_BASIC_MULTI_LINK201 201
2507
2508#define NR_SUB_ID_VENDOR_SPECIFIC221 221
2509
2510static const value_string ieee80211_neighbor_report_subelement_id_vals[] = {
2511 {NR_SUB_ID_TSF_INFO1, "TSF Information"},
2512 {NR_SUB_ID_CON_COU_STR2, "Condensed Country String"},
2513 {NR_SUB_ID_BSS_TRN_CAN_PREF3, "BSS Transition Candidate Preference"},
2514 {NR_SUB_ID_BSS_TER_DUR4, "BSS Termination Duration"},
2515 {NR_SUB_ID_BEARING5, "Bearing"},
2516 {NR_SUB_ID_WIDE_BW_CHANNEL6, "Wide Bandwidth Channel"},
2517 {NR_SUB_ID_MEASUREMENT_REPORT39, "Measurement Report"},
2518 {NR_SUB_ID_HT_CAPABILITIES45, "HT Capabilities"},
2519 {NR_SUB_ID_HT_OPERATION61, "HT Operation"},
2520 {NR_SUB_ID_SEC_CHANNEL_OFFSET62, "Secondary Channel Offset"},
2521 {NR_SUB_ID_MEASUREMENT_PILOT_INFO66, "Measurement Pilot Transmission"},
2522 {NR_SUB_ID_RM_ENABLE_CAP70, "RM Enabled Capabilities"},
2523 {NR_SUB_ID_HT_MULTIPLE_BSSID71, "Multiple BSSID"},
2524 {NR_SUB_ID_VHT_CAPABILITIES191, "VHT Capabilities"},
2525 {NR_SUB_ID_VHT_OPERATION192, "VHT Operation"},
2526 {NR_SUB_ID_HE_CAPABILITIES193, "HE Capabilities"},
2527 {NR_SUB_ID_HE_OPERATION194, "HE Operation"},
2528 {NR_SUB_ID_EHT_CAPABILITIES199, "EHT Capabilities"},
2529 {NR_SUB_ID_EHT_OPERATION200, "EHT Operation"},
2530 {NR_SUB_ID_BASIC_MULTI_LINK201, "Basic Multi-Link"},
2531 {NR_SUB_ID_VENDOR_SPECIFIC221, "Vendor Specific"},
2532 {0, NULL((void*)0)}
2533};
2534
2535static const value_string ieee80211_neighbor_report_bssid_info_reachability_vals[] = {
2536 {0, "Reserved"},
2537 {1, "Not Reachable"},
2538 {2, "Unknown"},
2539 {3, "Reachable"},
2540 {0, NULL((void*)0)}
2541};
2542
2543static const value_string action_codes[] = {
2544 {SM_ACTION_MEASUREMENT_REQUEST0, "Measurement Request"},
2545 {SM_ACTION_MEASUREMENT_REPORT1, "Measurement Report"},
2546 {SM_ACTION_TPC_REQUEST2, "TPC Request"},
2547 {SM_ACTION_TPC_REPORT3, "TPC Report"},
2548 {SM_ACTION_CHAN_SWITCH_ANNC4, "Channel Switch Announcement"},
2549 {0, NULL((void*)0)}
2550};
2551
2552static const value_string vendor_action_types_mrvl[] = {
2553 {MRVL_ACTION_MESH_MANAGEMENT1, "Mesh Management"},
2554 {0, NULL((void*)0)}
2555};
2556
2557static const value_string mesh_mgt_action_codes_mrvl[] = {
2558 {MRVL_MESH_MGMT_ACTION_RREQ0, "Route Request"},
2559 {MRVL_MESH_MGMT_ACTION_RREP1, "Route Response"},
2560 {MRVL_MESH_MGMT_ACTION_RERR2, "Route Error"},
2561 {MRVL_MESH_MGMT_ACTION_PLDM3, "Peer Link Down"},
2562 {0, NULL((void*)0)}
2563};
2564
2565static const value_string mesh_path_selection_codes[] = {
2566 {0x0, "Hybrid Wireless Mesh Protocol"},
2567 {0, NULL((void*)0)}
2568};
2569
2570static const value_string mesh_metric_codes[] = {
2571 {0x0, "Airtime Link Metric"},
2572 {0, NULL((void*)0)}
2573};
2574
2575static const value_string wme_action_codes[] = {
2576 {0x00, "Setup request"},
2577 {0x01, "Setup response"},
2578 {0x02, "Teardown"},
2579 {0x00, NULL((void*)0)}
2580};
2581
2582static const value_string wme_status_codes[] = {
2583 {0x00, "Admission accepted"},
2584 {0x01, "Invalid parameters"},
2585 {0x03, "Refused"},
2586 {0x00, NULL((void*)0)}
2587};
2588
2589static const value_string mesh_action[] = {
2590 {MESH_ACTION_LINK_METRIC_REPORT0, "Mesh Link Metric Report"},
2591 {MESH_ACTION_HWMP1, "HWMP Mesh Path Selection"},
2592 {MESH_ACTION_GATE_ANNOUNCE2, "Gate Announcement"},
2593 {MESH_ACTION_CONGESTION_CTL3, "Congestion Control Notification"},
2594 {MESH_ACTION_MCCA_SETUP_REQUEST4, "MCCA Setup Request"},
2595 {MESH_ACTION_MCCA_SETUP_REPLY5, "MCCA Setup Reply"},
2596 {MESH_ACTION_MCCA_ADV_REQUEST6, "MCCA Advertisement Request"},
2597 {MESH_ACTION_MCCA_ADV7, "MCCA Advertisement"},
2598 {MESH_ACTION_MCCA_TEARDOWN8, "MCCA Teardown"},
2599 {MESH_ACTION_TBTT_ADJ_REQUEST9, "TBTT Adjustment Request"},
2600 {MESH_ACTION_TBTT_ADJ_RESPONSE10, "TBTT Adjustment Response"},
2601 {0, NULL((void*)0)}
2602};
2603static 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
) }
;
2604
2605static const value_string multihop_action[] = {
2606 {MULTIHOP_ACTION_PROXY_UPDATE0, "Proxy Update"},
2607 {MULTIHOP_ACTION_PROXY_UPDATE_CONF1, "Proxy Update Confirmation"},
2608 {0, NULL((void*)0)}
2609};
2610
2611static const value_string selfprot_action[] = {
2612 {SELFPROT_ACTION_MESH_PEERING_OPEN1, "Mesh Peering Open"},
2613 {SELFPROT_ACTION_MESH_PEERING_CONFIRM2, "Mesh Peering Confirm"},
2614 {SELFPROT_ACTION_MESH_PEERING_CLOSE3, "Mesh Peering Close"},
2615 {SELFPROT_ACTION_MESH_GROUP_KEY_INFORM4, "Mesh Group Key Inform"},
2616 {SELFPROT_ACTION_MESH_GROUP_KEY_ACK5, "Mesh Group Key Ack"},
2617 {0, NULL((void*)0)}
2618};
2619
2620static const value_string mesh_peering_proto_ids[] = {
2621 {MESH_PEERING_PROTO_MGMT0, "Mesh peering management protocol"},
2622 {MESH_PEERING_PROTO_AMPE1, "Authenticated mesh peering exchange protocol"},
2623 {MESH_PEERING_PROTO_VENDOR255, "Vendor specific"},
2624 {0, NULL((void*)0)}
2625};
2626
2627static const true_false_string hwmp_targ_usn_flags = {
2628 "[USN = 1] Target Sequence Number Unknown at Originator",
2629 "[USN = 0] Target Sequence Number Known at Originator"
2630};
2631
2632static const true_false_string hwmp_targ_to_flags = {
2633 "[TO = 1] Only Target Will Respond",
2634 "[TO = 0] Intermediate Nodes May Respond"
2635};
2636
2637static const value_string ack_policy[] = {
2638 {0x00, "Normal Ack"},
2639 {0x01, "No Ack"},
2640 {0x02, "No explicit acknowledgment"},
2641 {0x03, "Block Ack"},
2642 {0x00, NULL((void*)0)}
2643};
2644
2645static const value_string qos_action_codes[] = {
2646 {QOS_ACTION_ADDTS_REQUEST0, "ADDTS Request"},
2647 {QOS_ACTION_ADDTS_RESPONSE1, "ADDTS Response"},
2648 {QOS_ACTION_DELTS2, "DELTS"},
2649 {QOS_ACTION_SCHEDULE3, "Schedule"},
2650 {QOS_ACTION_MAP_CONFIGURE4, "QoS Map Configure"},
2651 {0, NULL((void*)0)}
2652};
2653
2654static const value_string ba_action_codes[] = {
2655 {BA_ADD_BLOCK_ACK_REQUEST0, "Add Block Ack Request"},
2656 {BA_ADD_BLOCK_ACK_RESPONSE1, "Add Block Ack Response"},
2657 {BA_DELETE_BLOCK_ACK2, "Delete Block Ack"},
2658 {BA_NDP_ADD_BLOCK_ACK_REQUEST128, "NDP ADDBA Request"},
2659 {BA_NDP_ADD_BLOCK_ACK_RESPONSE129, "NDP ADDBA Response"},
2660 {BA_NDP_DELETE_BLOCK_ACK130, "NDP DELBA"},
2661 {BA_BAT_ADD_BLOCK_ACK_REQUEST132, "BAT ADDBA Request"},
2662 {BA_BAT_ADD_BLOCK_ACK_RESPONSE133, "BAT ADDBA Response"},
2663 {BA_BAT_DELETE_BLOCK_ACK134, "BAT DELBA"},
2664 {0x00, NULL((void*)0)}
2665};
2666
2667static const value_string dls_action_codes[] = {
2668 {DLS_ACTION_REQUEST0, "DLS Request"},
2669 {DLS_ACTION_RESPONSE1, "DLS Response"},
2670 {DLS_ACTION_TEARDOWN2, "DLS Teardown"},
2671 {0, NULL((void*)0)}
2672};
2673
2674static const value_string tsinfo_type[] = {
2675 {0x0, "Aperiodic or unspecified Traffic"},
2676 {0x1, "Periodic Traffic"},
2677 {0, NULL((void*)0)}
2678};
2679
2680static const value_string tsinfo_direction[] = {
2681 {0x00, "Uplink"},
2682 {0x01, "Downlink"},
2683 {0x02, "Direct link"},
2684 {0x03, "Bidirectional link"},
2685 {0, NULL((void*)0)}
2686};
2687
2688static const value_string tsinfo_access[] = {
2689 {0x00, "Reserved"},
2690 {0x01, "EDCA"},
2691 {0x02, "HCCA"},
2692 {0x03, "HEMM"},
2693 {0, NULL((void*)0)}
2694};
2695
2696static const value_string qos_up[] = {
2697 {0x00, "Best Effort"},
2698 {0x01, "Background"},
2699 {0x02, "Spare"},
2700 {0x03, "Excellent Effort"},
2701 {0x04, "Controlled Load"},
2702 {0x05, "Video"},
2703 {0x06, "Voice"},
2704 {0x07, "Network Control"},
2705 {0, NULL((void*)0)}
2706};
2707
2708static const range_string classifier_type[] = {
2709 {0x00, 0x00, "Ethernet parameters"},
2710 {0x01, 0x01, "TCP/UDP IP parameters"},
2711 {0x02, 0x02, "IEEE 802.1D/Q parameters"},
2712 {0x03, 0x03, "Filter Offset parameters"},
2713 {0x04, 0x04, "IP and higher layer parameters"},
2714 {0x05, 0x05, "IEEE 802.1D/Q parameters"},
2715 {0x06, 0x06, "IEEE 802.11 MAC header parameters"},
2716 {0x07, 0x07, "IEEE Std 802.11 downlink PV1 MPDU MAC header parameters"},
2717 {0x08, 0x08, "IEEE Std 802.11 non-downlink PV1 MPDU MAC header parameters"},
2718 {0x09, 0x09, "IEEE Std 802.11 PV1 MPDU Full Address MAC header parameters"},
2719 {0x0A, 0x0A, "IP extensions and higher layer parameters"},
2720 {0x0B, 0xFF, "Reserved" },
2721 {0, 0, NULL((void*)0)}
2722};
2723
2724static const true_false_string ieee80211_block_ack_control_ack_policy_flag = {
2725 "Sender Does Not Require Immediate Acknowledgement",
2726 "Immediate Acknowledgement Required"
2727};
2728
2729static const value_string ft_action_codes[] = {
2730 {FT_ACTION_REQUEST1, "FT Request"},
2731 {FT_ACTION_RESPONSE2, "FT Response"},
2732 {FT_ACTION_CONFIRM3, "FT Confirm"},
2733 {FT_ACTION_ACK4, "FT Ack"},
2734 {0, NULL((void*)0)}
2735};
2736
2737static const value_string sa_query_action_codes[] = {
2738 {SA_QUERY_REQUEST0, "SA Query Request"},
2739 {SA_QUERY_RESPONSE1, "SA Query Response"},
2740 {0, NULL((void*)0)}
2741};
2742
2743static const value_string ieee80211_data_encap_payload_types[] = {
2744 {1, "Remote Request/Response"},
2745 {2, "TDLS"},
2746 {0, NULL((void*)0)}
2747};
2748
2749static const true_false_string rsn_preauth_flags = {
2750 "Transmitter supports pre-authentication",
2751 "Transmitter does not support pre-authentication"
2752};
2753
2754static const true_false_string rsn_no_pairwise_flags = {
2755 "Transmitter cannot support WEP default key 0 simultaneously with "
2756 "Pairwise key",
2757 "Transmitter can support WEP default key 0 simultaneously with "
2758 "Pairwise key"
2759};
2760
2761static const value_string rsn_cap_replay_counter[] = {
2762 {0x00, "1 replay counter per PTKSA/GTKSA/STAKeySA"},
2763 {0x01, "2 replay counters per PTKSA/GTKSA/STAKeySA"},
2764 {0x02, "4 replay counters per PTKSA/GTKSA/STAKeySA"},
2765 {0x03, "16 replay counters per PTKSA/GTKSA/STAKeySA"},
2766 {0, NULL((void*)0)}
2767};
2768
2769static const true_false_string ht_ldpc_coding_flag = {
2770 "Transmitter supports receiving LDPC coded packets",
2771 "Transmitter does not support receiving LDPC coded packets"
2772};
2773
2774static const true_false_string ht_chan_width_flag = {
2775 "Transmitter supports 20MHz and 40MHz operation",
2776 "Transmitter only supports 20MHz operation"
2777};
2778
2779static const value_string ht_sm_pwsave_flag[] = {
2780 {0x00, "Static SM Power Save mode"},
2781 {0x01, "Dynamic SM Power Save mode"},
2782 {0x02, "Reserved"},
2783 {0x03, "SM Power Save disabled"},
2784 {0x00, NULL((void*)0)}
2785};
2786
2787static const true_false_string ht_green_flag = {
2788 "Transmitter is able to receive PPDUs with Green Field (GF) preamble",
2789 "Transmitter is not able to receive PPDUs with Green Field (GF) preamble"
2790};
2791
2792static const value_string ht_rx_stbc_flag[] = {
2793 {0x00, "No Rx STBC support"},
2794 {0x01, "Rx support of one spatial stream"},
2795 {0x02, "Rx support of one and two spatial streams"},
2796 {0x03, "Rx support of one, two, and three spatial streams"},
2797 {0x00, NULL((void*)0)}
2798};
2799
2800 /* IEEE Stc 802.11ac-2013 8.4.2.29 Extended Capabilities element*/
2801static const value_string vht_max_mpdu_in_amsdu[] = {
2802 {0x00, "No limit"},
2803 {0x01, "32"},
2804 {0x02, "16"},
2805 {0x03, "8"},
2806 {0, NULL((void*)0)}
2807};
2808
2809 /* IEEE Stc 802.11ac/D3.1 */
2810
2811static const value_string vht_max_mpdu_length_flag[] = {
2812 {0x00, "3 895"},
2813 {0x01, "7 991"},
2814 {0x02, "11 454"},
2815 {0x03, "Reserved"},
2816 {0x00, NULL((void*)0)}
2817};
2818
2819static const value_string vht_supported_chan_width_set_flag[] = {
2820 {0x00, "Neither 160MHz nor 80+80 supported"},
2821 {0x01, "160MHz supported"},
2822 {0x02, "160MHz and 80+80 Supported"},
2823 {0x03, "Reserved"},
2824 {0x00, NULL((void*)0)}
2825};
2826
2827static const value_string vht_rx_stbc_flag[] = {
2828 {0x00, "None"},
2829 {0x01, "1 Spatial Stream Supported"},
2830 {0x02, "1 to 2 Spatial Stream Supported"},
2831 {0x03, "1 to 3 Spatial Stream Supported"},
2832 {0x04, "1 to 4 Spatial Stream Supported"},
2833 {0x05, "Reserved"},
2834 {0x06, "Reserved"},
2835 {0x07, "Reserved"},
2836 {0x00, NULL((void*)0)}
2837};
2838
2839static const value_string num_plus_one_3bit_flag[] = {
2840 {0x00, "1"},
2841 {0x01, "2"},
2842 {0x02, "3"},
2843 {0x03, "4"},
2844 {0x04, "5"},
2845 {0x05, "6"},
2846 {0x06, "7"},
2847 {0x07, "8"},
2848 {0x00, NULL((void*)0)}
2849};
2850
2851static const value_string vht_max_ampdu_flag[] = {
2852 {0x00, "8 191"},
2853 {0x01, "16 383"},
2854 {0x02, "32 767"},
2855 {0x03, "65 535"},
2856 {0x04, "131 071"},
2857 {0x05, "262 143"},
2858 {0x06, "524 287"},
2859 {0x07, "1 048 575"},
2860 {0x00, NULL((void*)0)}
2861};
2862
2863static const value_string vht_link_adapt_flag[] = {
2864 {0x00, "No Feedback"},
2865 {0x01, "Reserved (logically only solicited feedback)"},
2866 {0x02, "Unsolicited feedback only"},
2867 {0x03, "Both (can provide unsolicited feedback and respond to VHT MRQ)"},
2868 {0x00, NULL((void*)0)}
2869};
2870
2871static const value_string vht_supported_mcs_flag[] = {
2872 {0x00, "MCS 0-7"},
2873 {0x01, "MCS 0-8"},
2874 {0x02, "MCS 0-9"},
2875 {0x03, "Not Supported"},
2876 {0x00, NULL((void*)0)}
2877};
2878
2879static const value_string vht_tpe_pwr_units[] = {
2880 { 0, "Local EIRP" },
2881 { 1, "Local EIRP PSD" },
2882 { 2, "Regulatory client EIRP" },
2883 { 3, "Regulatory client EIRP PSD" },
2884 { 4, "Additional regulatory client EIRP" },
2885 { 5, "Additional regulatory client EIRP PSD" },
2886 { 6, "Reserved" },
2887 { 7, "Reserved" },
2888 {0x00, NULL((void*)0)}
2889};
2890
2891static const true_false_string vht_ndp_annc_sta_info_feedback_type = {
2892 "MU feedback requested",
2893 "SU feedback requested"
2894};
2895
2896static const true_false_string ht_max_amsdu_flag = {
2897 "7935 bytes",
2898 "3839 bytes"
2899};
2900
2901static const true_false_string ht_dss_cck_40_flag = {
2902 "Will/Can use DSSS/CCK in 40 MHz",
2903 "Won't/Can't use of DSSS/CCK in 40 MHz"
2904};
2905
2906static const true_false_string ht_40_mhz_intolerant_flag = {
2907 "Use of 40 MHz transmissions restricted/disallowed",
2908 "Use of 40 MHz transmissions unrestricted/allowed"
2909};
2910
2911static const value_string ampduparam_mpdu_start_spacing_flags[] = {
2912 {0x00, "No restriction"},
2913 {0x01, "1/4 [usec]"},
2914 {0x02, "1/2 [usec]"},
2915 {0x03, "1 [usec]"},
2916 {0x04, "2 [usec]"},
2917 {0x05, "4 [usec]"},
2918 {0x06, "8 [usec]"},
2919 {0x07, "16 [usec]"},
2920 {0x00, NULL((void*)0)}
2921};
2922
2923static const true_false_string mcsset_tx_rx_mcs_set_not_equal_flag = {
2924 "Not Equal",
2925 "Equal",
2926};
2927
2928static const value_string mcsset_tx_max_spatial_streams_flags[] = {
2929 {0x00, "1 spatial stream"},
2930 {0x01, "2 spatial streams"},
2931 {0x02, "3 spatial streams"},
2932 {0x03, "4 spatial streams"},
2933 {0x04, "TX MCS Set Not Defined"},
2934 {0x00, NULL((void*)0)}
2935};
2936
2937static const value_string htex_mcs_flags[] = {
2938 {0x00, "STA does not provide MCS feedback"},
2939 {0x01, "Reserved"},
2940 {0x02, "STA provides only unsolicited MCS feedback"},
2941 {0x03, "STA can provide MCS feedback in response to MRQ as well as unsolicited MCS feedback"},
2942 {0x00, NULL((void*)0)}
2943};
2944
2945static const value_string txbf_calib_flag[] = {
2946 {0x00, "Not supported"},
2947 {0x01, "Can respond to a calibration request but cannot initiate calibration"},
2948 {0x02, "Reserved"},
2949 {0x03, "Can both initiate and respond to a calibration request"},
2950 {0x00, NULL((void*)0)}
2951};
2952
2953static const value_string txbf_feedback_flags[] = {
2954 {0x00, "Not supported"},
2955 {0x01, "Delayed feedback capable"},
2956 {0x02, "Immediate feedback capable"},
2957 {0x03, "Delayed and immediate feedback capable"},
2958 {0x00, NULL((void*)0)}
2959};
2960
2961static const value_string txbf_antenna_flags[] = {
2962 {0x00, "1 TX antenna sounding"},
2963 {0x01, "2 TX antenna sounding"},
2964 {0x02, "3 TX antenna sounding"},
2965 {0x03, "4 TX antenna sounding"},
2966 {0x00, NULL((void*)0)}
2967};
2968
2969static const value_string txbf_csi_max_rows_bf_flags[] = {
2970 {0x00, "1 row of CSI"},
2971 {0x01, "2 rows of CSI"},
2972 {0x02, "3 rows of CSI"},
2973 {0x03, "4 rows of CSI"},
2974 {0x00, NULL((void*)0)}
2975};
2976
2977static const value_string txbf_chan_est_flags[] = {
2978 {0x00, "1 space time stream"},
2979 {0x01, "2 space time streams"},
2980 {0x02, "3 space time streams"},
2981 {0x03, "4 space time streams"},
2982 {0x00, NULL((void*)0)}
2983};
2984
2985static const value_string txbf_min_group_flags[] = {
2986 {0x00, "No grouping supported"},
2987 {0x01, "Groups of 1, 2 supported"},
2988 {0x02, "Groups of 1, 4 supported"},
2989 {0x03, "Groups of 1, 2, 4 supported"},
2990 {0x00, NULL((void*)0)}
2991};
2992
2993static const value_string hta_ext_chan_offset_flag[] = {
2994 {0x00, "No Extension Channel"},
2995 {0x01, "Extension Channel above control channel"},
2996 {0x02, "Undefined"},
2997 {0x03, "Extension Channel below control channel"},
2998 {0x00, NULL((void*)0)}
2999};
3000
3001static const true_false_string hta_rec_tx_width_flag = {
3002 "Any channel width enabled",
3003 "Use 20MHz channel (control)"
3004};
3005
3006static const true_false_string hta_rifs_mode_flag = {
3007 "Use of RIFS permitted",
3008 "Use of RIFS prohibited"
3009};
3010
3011static const true_false_string hta_controlled_access_flag = {
3012 "Not only PSMP",
3013 "PSMP only"
3014};
3015
3016static const value_string hta_service_interval_flag[] = {
3017 {0x00, "5ms"},
3018 {0x01, "10ms"},
3019 {0x02, "15ms"},
3020 {0x03, "20ms"},
3021 {0x04, "25ms"},
3022 {0x05, "30ms"},
3023 {0x06, "35ms"},
3024 {0x07, "40ms"},
3025 {0x00, NULL((void*)0)}
3026};
3027
3028static const value_string hta_operating_mode_flag[] = {
3029 {0x00, "Pure HT, no protection"},
3030 {0x01, "There may be non-HT devices (control & ext channel)"},
3031 {0x02, "No non-HT is associated, but at least 1 20MHz is. protect on"},
3032 {0x03, "Mixed: no non-HT is associated, protect on"},
3033 {0x00, NULL((void*)0)}
3034};
3035
3036static const true_false_string hta_non_gf_devices_flag = {
3037 "All HT devices associated are GF capable",
3038 "One or More HT devices are not GF capable"
3039};
3040
3041static const true_false_string hta_dual_stbc_protection_flag = {
3042 "Dual CTS protections is used",
3043 "Regular use of RTS/CTS"
3044};
3045
3046static const true_false_string hta_secondary_beacon_flag = {
3047 "Secondary Beacon",
3048 "Primary Beacon"
3049};
3050
3051static const true_false_string hta_lsig_txop_protection_flag = {
3052 "Full Support",
3053 "Not full support"
3054};
3055
3056static const true_false_string hta_pco_active_flag = {
3057 "PCO is activated in the BSS",
3058 "PCO is not activated in the BSS"
3059};
3060
3061static const true_false_string hta_pco_phase_flag = {
3062 "Switch to 20MHz phase/keep 20MHz",
3063 "Switch to 40MHz phase/keep 40MHz"
3064};
3065
3066static const value_string ht_info_secondary_channel_offset_flags[] = {
3067 {0x00, "No secondary channel"},
3068 {0x01, "Secondary channel is above the primary channel"},
3069 {0x02, "Reserved"},
3070 {0x03, "Secondary channel is below the primary channel"},
3071 {0x00, NULL((void*)0)}
3072};
3073
3074static const true_false_string ht_info_channel_sta_width_flag = {
3075 "Channel of any width supported",
3076 "20 MHz channel width only"
3077};
3078
3079static const true_false_string ht_info_rifs_mode_flag = {
3080 "Permitted",
3081 "Prohibited"
3082};
3083
3084static const value_string ht_info_operating_protection_mode_flags[] = {
3085 {0x00, "No protection mode"},
3086 {0x01, "HT non-member protection mode"},
3087 {0x02, "20 MHz protection mode"},
3088 {0x03, "non-HT mixed mode"},
3089 {0x00, NULL((void*)0)}
3090};
3091
3092static const true_false_string ht_info_non_greenfield_sta_present_flag = {
3093 "One or more associated STAs are not greenfield capable",
3094 "All associated STAs are greenfield capable"
3095};
3096
3097static const true_false_string ht_info_obss_non_ht_stas_present_flag = {
3098 "Use of protection for non-HT STAs by overlapping BSSs is needed",
3099 "Use of protection for non-HT STAs by overlapping BSSs is not needed"
3100};
3101
3102static const true_false_string ht_info_dual_beacon_flag = {
3103 "AP transmits a secondary beacon",
3104 "No second beacon is transmitted"
3105};
3106
3107static const true_false_string ht_info_stbc_beacon_flag = {
3108 "STBC beacon",
3109 "Primary beacon"
3110};
3111
3112static const true_false_string htc_lac_trq_flag = {
3113 "Want sounding PPDU",
3114 "Don't want sounding PPDU"
3115};
3116
3117static const true_false_string htc_lac_mai_mrq_flag = {
3118 "MCS feedback requested",
3119 "No MCS feedback requested"
3120};
3121
3122static const value_string ieee80211_htc_lac_asel_command_flags[] = {
3123 {0x00, "Transmit Antenna Selection Sounding Indication (TXASSI)"},
3124 {0x01, "Transmit Antenna Selection Sounding Request (TXASSR)"},
3125 {0x02, "Receive Antenna Selection Sounding Indication (RXASSI)"},
3126 {0x03, "Receive Antenna Selection Sounding Request (RXASSR)"},
3127 {0x04, "Sounding Label"},
3128 {0x05, "No feedback, ASEL training failure"},
3129 {0x06, "Transmit Antenna Selection Sounding Indication (TXASSI) requesting feedback of explicit CSI"},
3130 {0x07, "Reserved"},
3131 {0x00, NULL((void*)0)}
3132};
3133
3134static const value_string ieee80211_htc_cal_pos_flags[] = {
3135 {0x00, "Not a calibration frame"},
3136 {0x01, "Calibration Start"},
3137 {0x02, "Sounding Response"},
3138 {0x03, "Sounding Complete"},
3139 {0x00, NULL((void*)0)}
3140};
3141
3142static const value_string ieee80211_htc_csi_steering_flags[] = {
3143 {0x00, "No feedback required"},
3144 {0x01, "CSI"},
3145 {0x02, "Non-compressed Beamforming Feedback Matrix"},
3146 {0x03, "Compressed Beamforming Feedback Matrix"},
3147 {0x00, NULL((void*)0)}
3148};
3149
3150static const true_false_string ieee80211_htc_ndp_announcement_flag = {
3151 "NDP will follow",
3152 "No NDP will follow"
3153};
3154
3155static const value_string ieee80211_htc_bw_recommended_vht_mcs_vals[] = {
3156 {0, "20 MHz"},
3157 {1, "40 MHz"},
3158 {2, "80 MHz"},
3159 {3, "160 MHz and 80+80 MHz"},
3160 {0, NULL((void*)0)}
3161};
3162
3163static const value_string ieee80211_htc_s1g_bw_recommended_vht_mcs_vals[] = {
3164 {0, "1 MHz"},
3165 {1, "2 MHz"},
3166 {2, "4 MHz"},
3167 {3, "8 MHz"},
3168 {4, "16 MHz"},
3169 {5, "Reserved"},
3170 {6, "Reserved"},
3171 {7, "Reserved"},
3172 {0, NULL((void*)0)}
3173};
3174
3175static const value_string ieee80211_htc_coding_type_vals[] = {
3176 {0, "BCC"},
3177 {1, "LDPC"},
3178 {0, NULL((void*)0)}
3179};
3180
3181static const value_string ieee80211_htc_fb_tx_type_vals[] = {
3182 {0, "Not beamformed"},
3183 {1, "Beamformed"},
3184 {0, NULL((void*)0)}
3185};
3186
3187static const value_string ieee80211_tag_secondary_channel_offset_flags[] = {
3188 {0x00, "No Secondary Channel"},
3189 {0x01, "Above Primary Channel"},
3190 {0x02, "Reserved"},
3191 {0x03, "Below Primary Channel"},
3192 {0x00, NULL((void*)0)}
3193};
3194
3195#define BSS_BITMASK_UP00x0001 0x0001
3196#define BSS_BITMASK_UP10x0002 0x0002
3197#define BSS_BITMASK_UP20x0004 0x0004
3198#define BSS_BITMASK_UP30x0008 0x0008
3199#define BSS_BITMASK_UP40x0010 0x0010
3200#define BSS_BITMASK_UP50x0020 0x0020
3201#define BSS_BITMASK_UP60x0040 0x0040
3202#define BSS_BITMASK_UP70x0080 0x0080
3203#define BSS_BITMASK_AC00x0100 0x0100
3204#define BSS_BITMASK_AC10x0200 0x0200
3205#define BSS_BITMASK_AC20x0400 0x0400
3206#define BSS_BITMASK_AC30x0800 0x0800
3207#define BSS_BITMASK_RSV0xF000 0xF000
3208
3209static const value_string ieee80211_tag_ext_channel_switch_announcement_switch_mode_flags[] = {
3210 {0x00, "Frames may be transmitted before the channel switch has been completed"},
3211 {0x01, "No more frames are to be transmitted until the channel switch has been completed"},
3212 {0x00, NULL((void*)0)}
3213};
3214
3215static const value_string service_interval_granularity_vals[] = {
3216 { 0, "5 ms" },
3217 { 1, "10 ms" },
3218 { 2, "15 ms" },
3219 { 3, "20 ms" },
3220 { 4, "25 ms" },
3221 { 5, "30 ms" },
3222 { 6, "35 ms" },
3223 { 7, "40 ms" },
3224 { 0x00, NULL((void*)0) }
3225};
3226
3227static const value_string wep_type_vals[] = {
3228 { DOT11DECRYPT_KEY_TYPE_WEP0, STRING_KEY_TYPE_WEP"wep" },
3229 { DOT11DECRYPT_KEY_TYPE_WPA_PWD3, STRING_KEY_TYPE_WPA_PWD"wpa-pwd" },
3230 { DOT11DECRYPT_KEY_TYPE_WPA_PSK4, STRING_KEY_TYPE_WPA_PSK"wpa-psk" },
3231 { DOT11DECRYPT_KEY_TYPE_TK6, STRING_KEY_TYPE_TK"tk" },
3232 { DOT11DECRYPT_KEY_TYPE_MSK7, STRING_KEY_TYPE_MSK"msk" },
3233 { 0x00, NULL((void*)0) }
3234};
3235
3236static const value_string ieee80211_ht_pren_type_vals[] = {
3237 { 51, "HT Capabilities (802.11n D1.10)" },
3238 { 52, "HT Additional Capabilities (802.11n D1.00)" },
3239 { 0, NULL((void*)0) }
3240};
3241
3242static const true_false_string ieee80211_cf_ssw_direction = {
3243 "Transmitted by the beamforming responder",
3244 "Transmitted by the beamforming initiator"
3245};
3246
3247static const value_string bss_type[] = {
3248 {0x0, "Reserved"},
3249 {0x1, "IBSS"},
3250 {0x2, "PBSS"},
3251 {0x3, "Infrastructure BSS"},
3252 {0, NULL((void*)0)}
3253};
3254
3255static const value_string band_id[] = {
3256 {0x0, "TV white spaces"},
3257 {0x1, "Sub-1 GHz (excluding TV white spaces)"},
3258 {0x2, "2.4 GHz"},
3259 {0x3, "3.6 GHz"},
3260 {0x4, "4.9 and 5 GHz"},
3261 {0x5, "60 GHz"},
3262 {0x6, "45 GHz"},
3263 {0x7, "6 GHz"},
3264 {0, NULL((void*)0)}
3265};
3266
3267static const value_string extended_sc_mcs[] = {
3268 {0x0, "None"},
3269 {0x1, "MCS 9.1"},
3270 {0x2, "MCS 12.1"},
3271 {0x3, "MCS 12.2"},
3272 {0x4, "MCS 12.3"},
3273 {0x5, "MCS 12.4"},
3274 {0x6, "MCS 12.5"},
3275 {0x7, "MCS 12.6"},
3276 {0, NULL((void*)0)}
3277};
3278
3279static const range_string max_basic_sf_amsdu[] = {
3280 {0, 0, "No Limit"},
3281 {1, 1, "4 Basic subframes"},
3282 {2, 2, "8 Basic subframes"},
3283 {3, 3, "16 Basic subframes"},
3284 {4, 4, "32 Basic subframes"},
3285 {5, 5, "64 Basic subframes"},
3286 {6, 6, "128 Basic subframes"},
3287 {7, 7, "256 Basic subframes"},
3288 {8, 255, "reserved"},
3289 {0, 0, NULL((void*)0)}
3290};
3291
3292static const range_string max_short_sf_amsdu[] = {
3293 {0, 0, "No Limit"},
3294 {1, 1, "32 Short subframes"},
3295 {2, 2, "64 Short subframes"},
3296 {3, 3, "128 Short subframes"},
3297 {4, 4, "256 Short subframes"},
3298 {5, 5, "512 Short subframes"},
3299 {6, 6, "1024 Short subframes"},
3300 {7, 255, "reserved"},
3301 {0, 0, NULL((void*)0)}
3302};
3303
3304static const value_string allocation_type[] = {
3305 {0x0, "SP Allocation"},
3306 {0x1, "CBAP allocation"},
3307 {0, NULL((void*)0)}
3308};
3309
3310static const value_string vht_operation_info_channel_width[] = {
3311 {0x00, "20MHz or 40MHz"},
3312 {0x01, "80MHZ"},
3313 {0x10, "160MHz"},
3314 {0x11, "80MHz+80MHz"},
3315 {0, NULL((void*)0)}
3316};
3317static const value_string operating_mode_field_channel_width[] = {
3318 {0x00, "20MHz"},
3319 {0x01, "40MHZ"},
3320 {0x02, "80MHz"},
3321 {0x03, "160MHz or 80MHz+80MHz"},
3322 {0, NULL((void*)0)}
3323};
3324
3325static const value_string operat_mode_field_rxnss[] = {
3326 {0x0, "1Nss"},
3327 {0x1, "2Nss"},
3328 {0x2, "3Nss"},
3329 {0x3, "4Nss"},
3330 {0x4, "5Nss"},
3331 {0x5, "6Nss"},
3332 {0x6, "7Nss"},
3333 {0x7, "8Nss"},
3334 {0, NULL((void*)0)}
3335};
3336
3337#define VHT_ACT_VHT_COMPRESSED_BEAMFORMING0 0
3338#define VHT_ACT_GROUP_ID_MANAGEMENT1 1
3339#define VHT_ACT_OPERATION_MODE_NOTIFICATION2 2
3340
3341static const value_string vht_action_vals[] = {
3342 {VHT_ACT_VHT_COMPRESSED_BEAMFORMING0, "VHT Compressed Beamforming"},
3343 {VHT_ACT_GROUP_ID_MANAGEMENT1, "Group ID Management"},
3344 {VHT_ACT_OPERATION_MODE_NOTIFICATION2, "Operating Mode Notification"},
3345 {0, NULL((void*)0)}
3346};
3347
3348static const value_string ff_vht_mimo_cntrl_nc_index_vals[] = {
3349 {0x00, "1 Column"},
3350 {0x01, "2 Columns"},
3351 {0x02, "3 Columns"},
3352 {0x03, "4 Columns"},
3353 {0x04, "5 Columns"},
3354 {0x05, "6 Columns"},
3355 {0x06, "7 Columns"},
3356 {0x07, "8 Columns"},
3357 {0, NULL((void*)0)}
3358};
3359
3360static const value_string ff_vht_mimo_cntrl_nr_index_vals[] = {
3361 {0x00, "1 Row"},
3362 {0x01, "2 Rows"},
3363 {0x02, "3 Rows"},
3364 {0x03, "4 Rows"},
3365 {0x04, "5 Rows"},
3366 {0x05, "6 Rows"},
3367 {0x06, "7 Rows"},
3368 {0x07, "8 Rows"},
3369 {0, NULL((void*)0)}
3370};
3371
3372static const value_string ff_vht_mimo_cntrl_channel_width_vals[] = {
3373 {0x00, "20 MHz"},
3374 {0x01, "40 MHz"},
3375 {0x02, "80 MHz"},
3376 {0x03, "160 MHz / 80+80 MHz"},
3377 {0, NULL((void*)0)}
3378};
3379
3380static const value_string ff_vht_mimo_cntrl_grouping_vals[] = {
3381 {0x00, "1 (No Grouping)"},
3382 {0x01, "2"},
3383 {0x02, "4"},
3384 {0x03, "Reserved"},
3385 {0, NULL((void*)0)}
3386};
3387
3388static const value_string ff_vht_mimo_cntrl_feedback_vals[] = {
3389 {0x00, "SU"},
3390 {0x01, "MU"},
3391 {0, NULL((void*)0)}
3392};
3393
3394#define S1G_ACT_AID_SWITCH_REQUEST0 0
3395#define S1G_ACT_AID_SWITCH_RESPONSE1 1
3396#define S1G_ACT_SYNC_CONTROL2 2
3397#define S1G_ACT_STA_INFO_ANNOUNCE3 3
3398#define S1G_ACT_EDCA_PARAM_SET4 4
3399#define S1G_ACT_EL_OPERATION5 5
3400#define S1G_ACT_TWT_SETUP6 6
3401#define S1G_ACT_TWT_TEARDOWN7 7
3402#define S1G_ACT_SECT_GROUP_ID_LIST8 8
3403#define S1G_ACT_SECT_ID_FEEDBACK9 9
3404#define S1G_ACT_RESERVED10 10
3405#define S1G_ACT_TWT_INFORMATION11 11
3406
3407static const value_string s1g_action_vals[] = {
3408 {S1G_ACT_AID_SWITCH_REQUEST0, "AID Switch Request"},
3409 {S1G_ACT_AID_SWITCH_RESPONSE1, "AID Switch Response"},
3410 {S1G_ACT_SYNC_CONTROL2, "Sync Control"},
3411 {S1G_ACT_STA_INFO_ANNOUNCE3, "STA Information Announcement"},
3412 {S1G_ACT_EDCA_PARAM_SET4, "EDCA Parameter Set"},
3413 {S1G_ACT_EL_OPERATION5, "EL Operation"},
3414 {S1G_ACT_TWT_SETUP6, "TWT Setup"},
3415 {S1G_ACT_TWT_TEARDOWN7, "TWT Teardown"},
3416 {S1G_ACT_SECT_GROUP_ID_LIST8, "Sectorized Group ID List"},
3417 {S1G_ACT_SECT_ID_FEEDBACK9, "Sector ID Feedback"},
3418 {S1G_ACT_RESERVED10, "Reserved"},
3419 {S1G_ACT_TWT_INFORMATION11, "TWT Information"},
3420 {0, NULL((void*)0)},
3421};
3422
3423#define PROT_S1G_ACT_REACH_ADDR_UPDATE0 0
3424#define PROT_S1G_ACT_RELAY_ACTIVATE_REQ1 1
3425#define PROT_S1G_ACT_RELAY_ACTIVATE_RESP2 2
3426#define PROT_S1G_ACT_HEADER_COMPRESSION3 3
3427#define PROT_S1G_ACT_TWT_SETUP4 4
3428#define PROT_S1G_ACT_TWT_TEARDOWN5 5
3429#define PROT_S1G_ACT_TWT_INFORMATION6 6
3430#define PROT_S1G_ACT_AID_SWITCH_REQUEST7 7
3431#define PROT_S1G_ACT_AID_SWITCH_RESPONSE8 8
3432#define PROT_S1G_ACT_SYNC_CONTROL9 9
3433#define PROT_S1G_ACT_STA_INFO_ANNOUNCE10 10
3434#define PROT_S1G_ACT_EDCA_PARAM_SET11 11
3435#define PROT_S1G_ACT_EL_OPERATION12 12
3436#define PROT_S1G_ACT_SECT_GROUP_ID_LIST13 13
3437#define PROT_S1G_ACT_SECT_ID_FEEDBACK14 14
3438
3439static const value_string prot_s1g_action_vals[] = {
3440 {PROT_S1G_ACT_REACH_ADDR_UPDATE0, "Reachable Address Update"},
3441 {PROT_S1G_ACT_RELAY_ACTIVATE_REQ1, "Relay Activation Request"},
3442 {PROT_S1G_ACT_RELAY_ACTIVATE_RESP2, "Relay Activation Response"},
3443 {PROT_S1G_ACT_HEADER_COMPRESSION3, "Header Compression"},
3444 {PROT_S1G_ACT_TWT_SETUP4, "Protected TWT Setup"},
3445 {PROT_S1G_ACT_TWT_TEARDOWN5, "Protected TWT Teardown"},
3446 {PROT_S1G_ACT_TWT_INFORMATION6, "Protected TWT Information"},
3447 {PROT_S1G_ACT_AID_SWITCH_REQUEST7, "Protected AID Switch Request"},
3448 {PROT_S1G_ACT_AID_SWITCH_RESPONSE8, "Protected AID Switch Response"},
3449 {PROT_S1G_ACT_SYNC_CONTROL9, "Protected Sync Control"},
3450 {PROT_S1G_ACT_STA_INFO_ANNOUNCE10, "Protected STA Information Announcement"},
3451 {PROT_S1G_ACT_EDCA_PARAM_SET11, "Protected EDCA Parameter Set"},
3452 {PROT_S1G_ACT_EL_OPERATION12, "Protected EL Operation"},
3453 {PROT_S1G_ACT_SECT_GROUP_ID_LIST13, "Protected Sectorized Group ID List"},
3454 {PROT_S1G_ACT_SECT_ID_FEEDBACK14, "Protected Sector ID Feedback"},
3455 {0, NULL((void*)0)},
3456};
3457
3458static const value_string twt_neg_type_vals[] = {
3459 {0x0, "Individual TWT"},
3460 {0x1, "Wake TBTT"},
3461 {0x2, "Broadcast TWT schedule, TWT element in broadcast management frame"},
3462 {0x3, "Broadcast TWT schedule, TWT element in unicast management frame"},
3463 {0, NULL((void*)0)},
3464};
3465
3466static const true_false_string twt_responder_pm_mode_tfs = {
3467 "AP may doze outside the TWT",
3468 "AP is always awake",
3469};
3470
3471static const true_false_string twt_requester_tfs = {
3472 "This STA is a TWT Requesting STA",
3473 "This STA is a TWT Responding STA or a TWT scheduling AP",
3474};
3475
3476static const true_false_string twt_info_frame_disabled_tfs = {
3477 "Reception of TWT Information frames is disabled",
3478 "Reception of TWT Information frames is enabled",
3479};
3480
3481static const true_false_string twt_wake_duration_unit_tfs = {
3482 "1 TU",
3483 "256 microseconds",
3484};
3485
3486#define REQUEST_TWT0 0
3487#define SUGGEST_TWT1 1
3488#define DEMAND_TWT2 2
3489#define TWT_GROUPING3 3
3490#define ACCEPT_TWT4 4
3491#define ALTERNATE_TWT5 5
3492#define DICTATE_TWT6 6
3493#define REJECT_TWT7 7
3494
3495static const value_string twt_setup_cmd[] = {
3496 {REQUEST_TWT0, "Request TWT"},
3497 {SUGGEST_TWT1, "Suggest TWT"},
3498 {DEMAND_TWT2, "Demand TWT"},
3499 {TWT_GROUPING3, "TWT Grouping"},
3500 {ACCEPT_TWT4, "Accept TWT"},
3501 {ALTERNATE_TWT5, "Alternate TWT"},
3502 {DICTATE_TWT6, "Dictate TWT"},
3503 {REJECT_TWT7, "Reject TWT"},
3504 {0, NULL((void*)0)},
3505};
3506
3507static const true_false_string twt_trigger = {
3508 "TWT SP includes trigger frames",
3509 "TWT SP does not include trigger frames",
3510};
3511
3512static const true_false_string twt_implicit = {
3513 "TWT is implicit",
3514 "TWT is explicit",
3515};
3516
3517static const true_false_string twt_flow_type = {
3518 "TWT is unannounced, the TWT responding STA can send frames at any time",
3519 "TWT is announced, the TWT Requesting STA will send trigger frames",
3520};
3521
3522static const value_string he_phy_device_class_vals[] = {
3523 { 0, "Class B Device" },
3524 { 1, "Class A Device" },
3525 { 0, NULL((void*)0) }
3526};
3527
3528static const value_string he_phy_midamble_tx_rx_max_nsts_vals[] = {
3529 { 0, "1 Space-Time Stream" },
3530 { 1, "2 Space-Time Streams" },
3531 { 2, "3 Space-Time Streams" },
3532 { 3, "4 Space-Time Streams" },
3533 { 0, NULL((void*)0) }
3534};
3535
3536static const value_string he_phy_dcm_max_constellation_vals[] = {
3537 { 0, "DCM is not supported" },
3538 { 1, "BPSK" },
3539 { 2, "QPSK" },
3540 { 3, "16-QAM" },
3541 { 0, NULL((void*)0) }
3542};
3543
3544static const value_string he_phy_dcm_max_nss_vals[] = {
3545 { 0, "1 Spatial Stream" },
3546 { 1, "2 Spatial Streams" },
3547 { 0, NULL((void*)0) }
3548};
3549
3550static const value_string he_phy_dcm_max_ru_vals[] = {
3551 { 0, "242-tone RU" },
3552 { 1, "484-tone RU" },
3553 { 2, "996-tone RU" },
3554 { 3, "2x996-tone RU"},
3555 { 0, NULL((void*)0) }
3556};
3557
3558static const value_string he_phy_nominal_packet_padding_vals[] = {
3559 { 0, "0 µs for all constellations, Nss and RU allocations" },
3560 { 1, "8 µs for all constellations, Nss and RU allocations" },
3561 { 2, "16 µs for all constellations, Nss and RU allocations" },
3562 { 3, "Reserved" },
3563 { 0, NULL((void*)0) }
3564};
3565
3566// MBO-OCE attributes
3567#define MBO_AP_CAPABILITY_INDICATION1 1
3568#define MBO_NON_PREF_CHANNEL_REPORT2 2
3569#define MBO_CELLULAR_DATA_CAPABILITIES3 3
3570#define MBO_ASSOCIATION_DISALLOWED4 4
3571#define MBO_CELLULAR_DATA_PREFERENCE5 5
3572#define MBO_TRANSITION_REASON6 6
3573#define MBO_TRANSITION_REJECTION_REASON7 7
3574#define MBO_ASSOCIATION_RETRY_DELAY8 8
3575#define OCE_CAPABILITY_INDICATION101 101
3576#define OCE_RSSI_ASSOCIATION_REJECTION102 102
3577#define OCE_REDUCED_WAN_METRICS103 103
3578#define OCE_RNR_COMPLETENESS104 104
3579#define OCE_PROBE_SUPPR_BSSID105 105
3580#define OCE_PROBE_SUPPR_SSID106 106
3581
3582static const value_string wfa_mbo_oce_attr_id_vals[] = {
3583 { MBO_AP_CAPABILITY_INDICATION1, "MBO AP Capability Indication"},
3584 { MBO_NON_PREF_CHANNEL_REPORT2, "Non-preferred Channel Report"},
3585 { MBO_CELLULAR_DATA_CAPABILITIES3, "Cellular Data Capabilities"},
3586 { MBO_ASSOCIATION_DISALLOWED4, "Association Disallowed"},
3587 { MBO_CELLULAR_DATA_PREFERENCE5, "Cellular Data Connection Preference"},
3588 { MBO_TRANSITION_REASON6, "Transition Reason Code BTM Request"},
3589 { MBO_TRANSITION_REJECTION_REASON7, "Transition Rejection Reason Code"},
3590 { MBO_ASSOCIATION_RETRY_DELAY8, "Association Retry Delay"},
3591 { OCE_CAPABILITY_INDICATION101, "OCE Capability Indication" },
3592 { OCE_RSSI_ASSOCIATION_REJECTION102, "RSSI-based (Re-)Association Rejection" },
3593 { OCE_REDUCED_WAN_METRICS103, "Reduced WAN Metrics" },
3594 { OCE_RNR_COMPLETENESS104, "RNR Completeness" },
3595 { OCE_PROBE_SUPPR_BSSID105, "Probe Suppression BSSIDs" },
3596 { OCE_PROBE_SUPPR_SSID106, "Probe Suppression SSIDs" },
3597 { 0, NULL((void*)0)}
3598};
3599
3600static const value_string wfa_mbo_non_pref_chan_pref_vals[] = {
3601 { 0, "non-operable band/channel for the STA"},
3602 { 1, "band/channel the STA prefers not to operate in"},
3603 { 255, "band/channel the STA prefers to operate in"},
3604 { 0, NULL((void*)0) }
3605};
3606
3607static const value_string wfa_mbo_non_pref_chan_reason_vals[] = {
3608 { 0, "Unspecified reason"},
3609 { 1, "An unacceptable level of interference is being experienced by STA in this channel"},
3610 { 2, "The STA has another active connection in this channel, "
3611 "or near enough to this channel to cause operating interference"},
3612 { 0, NULL((void*)0) }
3613};
3614
3615static const value_string wfa_mbo_cellular_cap_vals[] = {
3616 { 1, "Cellular data connection available"},
3617 { 2, "Cellular data connection not available"},
3618 { 3, "Not Cellular data capable"},
3619 { 0, NULL((void*)0) }
3620};
3621
3622static const value_string wfa_mbo_assoc_disallow_reason_vals[] = {
3623 { 1, "Unspecified reason"},
3624 { 2, "Maximum number of associated STAs reached"},
3625 { 3, "Air interface is overloaded"},
3626 { 4, "Authentication server overloaded"},
3627 { 5, "Insufficient RSSI"},
3628 { 0, NULL((void*)0) }
3629};
3630
3631static const value_string wfa_mbo_cellular_pref_vals[] = {
3632 { 0, "Excluded. The AP does not want STA to use the cellular data connection"},
3633 { 1, "The AP prefers the STA should not use cellular data connection"},
3634 { 255, "The AP prefers the STA should use cellular data connection"},
3635 { 0, NULL((void*)0) }
3636};
3637
3638static const value_string wfa_mbo_transition_reason_vals[] = {
3639 { 0, "Unspecified"},
3640 { 1, "Excessive frame loss rate"},
3641 { 2, "Excessive delay for current traffic stream"},
3642 { 3, "Insufficient bandwidth for current traffic stream"},
3643 { 4, "Load balancing"},
3644 { 5, "Low RSSI"},
3645 { 6, "Received excessive number of retransmissions"},
3646 { 7, "High interference"},
3647 { 8, "Gray zone"},
3648 { 9, "Transitioning to a premium AP"},
3649 { 0, NULL((void*)0) }
3650};
3651
3652static const value_string wfa_mbo_transition_rej_reason_vals[] = {
3653 { 0, "Unspecified"},
3654 { 1, "Excessive frame loss rate expected by the STA if it transitions"},
3655 { 2, "Excessive delay for current traffic stream would be incurred by BSS transition at this time"},
3656 { 3, "Insufficient QoS capacity for current traffic stream expected by the STA if it transitions"},
3657 { 4, "Low RSSI in frames being received by the STA from to the suggested candidate BSS(s)"},
3658 { 5, "High interference expected by STA if it transitions"},
3659 { 6, "Service Availability – the STA expects that services it needs "
3660 "which are available at its serving AP will not be available if it transitions"},
3661 { 0, NULL((void*)0) }
3662};
3663
3664/* 802.11ai FILS Discovery */
3665#define PA_FILS_FC_SSID_LENGTH0x001F 0x001F
3666#define PA_FILS_FC_CAPABILITY0x0020 0x0020
3667#define PA_FILS_FC_SHORT_SSID0x0040 0x0040
3668#define PA_FILS_FC_AP_CSN0x0080 0x0080
3669#define PA_FILS_FC_ANO0x0100 0x0100
3670#define PA_FILS_FC_CCFS10x0200 0x0200
3671#define PA_FILS_FC_PC0x0400 0x0400
3672#define PA_FILS_FC_RSN_INFO0x0800 0x0800
3673#define PA_FILS_FC_LENGTH0x1000 0x1000
3674#define PA_FILS_FC_MD0x2000 0x2000
3675#define PA_FILS_FC_RESERVED0xC000 0xC000
3676
3677static const value_string fils_discovery_capability_bss_operating_channel_width[] = {
3678 {0, "20MHz (or 22Mhz) / TVHT_W"},
3679 {1, "40MHZ / TVHT_W+W"},
3680 {2, "80MHz / TVHT_2W"},
3681 {3, "160MHz or 80MHz+80MHz / TVHT_4W or TVHT_2W+2W"},
3682 {0, NULL((void*)0)}
3683};
3684
3685static const value_string fils_discovery_capability_max_number_of_spatial_streams[] = {
3686 {0, "1 spatial stream"},
3687 {1, "2 spatial streams"},
3688 {2, "3 spatial streams"},
3689 {3, "4 spatial streams"},
3690 {4, "5-8 spatial streams"},
3691 {0, NULL((void*)0)}
3692};
3693
3694static const value_string fils_discovery_capability_phy_index[] = {
3695 {0, "HR/DSSS"},
3696 {1, "ERP-OFDM"},
3697 {2, "HT"},
3698 {3, "VHT or TVHT"},
3699 {4, "HE"},
3700 {0x00, NULL((void*)0)}
3701};
3702
3703static const value_string fils_discovery_capability_fils_minimum_rate_dsss[] = {
3704 {0, "1 Mbps"},
3705 {1, "2 Mbps"},
3706 {2, "5.5 Mbps"},
3707 {3, "11 Mbps"},
3708 {0x00, NULL((void*)0)}
3709};
3710
3711static const value_string fils_discovery_capability_fils_minimum_rate_ofdm[] = {
3712 {0, "6 Mbps"},
3713 {1, "9 Mbps"},
3714 {2, "12 Mbps"},
3715 {3, "18 Mbps"},
3716 {4, "24 Mbps"},
3717 {0x00, NULL((void*)0)}
3718};
3719
3720static const value_string fils_discovery_capability_fils_minimum_rate_ht_vht_tvht[] = {
3721 {0, "MCS 0"},
3722 {1, "MCS 1"},
3723 {2, "MCS 2"},
3724 {3, "MCS 3"},
3725 {4, "MCS 4"},
3726 {0x00, NULL((void*)0)}
3727};
3728
3729static const value_string fils_discovery_capability_fils_minimum_rate_he[] = {
3730 {0, "HE-MCS 0"},
3731 {1, "HE-MCS 1"},
3732 {2, "HE-MCS 2"},
3733 {3, "HE-MCS 3"},
3734 {4, "HE-MCS 4"},
3735 {0x00, NULL((void*)0)}
3736};
3737
3738static const value_string wfa_rsne_variant_vals[] = {
3739 { 0, "RSNE" },
3740 { 1, "RSNE Override" },
3741 { 2, "RSNE Override 2" },
3742 { 0, NULL((void*)0) }
3743};
3744
3745static int proto_wlan;
3746static int proto_centrino;
3747static int proto_aggregate;
3748static bool_Bool ieee80211_tvb_invalid;
3749static int proto_eapol; /* Externally retrieved */
3750
3751/* ************************************************************************* */
3752/* Header field info values for FC-field */
3753/* ************************************************************************* */
3754static int hf_ieee80211_fc_field;
3755static int hf_ieee80211_fc_proto_version;
3756static int hf_ieee80211_fc_frame_type;
3757static int hf_ieee80211_fc_frame_subtype;
3758static int hf_ieee80211_fc_frame_extension;
3759static int hf_ieee80211_fc_frame_type_subtype;
3760
3761static int hf_ieee80211_fc_flags;
3762static int hf_ieee80211_fc_flags_str;
3763static int hf_ieee80211_fc_to_ds;
3764static int hf_ieee80211_fc_from_ds;
3765static int hf_ieee80211_fc_data_ds;
3766
3767static int hf_ieee80211_fc_more_frag;
3768static int hf_ieee80211_fc_retry;
3769static int hf_ieee80211_fc_pwr_mgt;
3770static int hf_ieee80211_fc_more_data;
3771static int hf_ieee80211_fc_protected;
3772static int hf_ieee80211_fc_order;
3773
3774/* S1G Flags */
3775static int hf_ieee80211_fc_s1g_next_tbtt_present;
3776static int hf_ieee80211_fc_s1g_compressed_ssid_present;
3777static int hf_ieee80211_fc_s1g_ano_present;
3778static int hf_ieee80211_fc_s1g_bss_bw;
3779static int hf_ieee80211_fc_s1g_security;
3780static int hf_ieee80211_fc_s1g_ap_pm;
3781
3782/* S1G PV0 fields */
3783static int hf_ieee80211_fc_s1g_bw_indication;
3784static int hf_ieee80211_fc_s1g_dynamic_indication;
3785
3786/* PV1 fields */
3787static int hf_ieee80211_fc_pv1_proto_version;
3788static int hf_ieee80211_fc_pv1_type;
3789static int hf_ieee80211_fc_pv1_ptid;
3790static int hf_ieee80211_fc_pv1_mgmt_subtype;
3791static int hf_ieee80211_fc_pv1_cntl_subtype;
3792static int hf_ieee80211_fc_pv1_unk_field;
3793static int hf_ieee80211_fc_pv1_bw_indication;
3794static int hf_ieee80211_fc_pv1_dynamic_indication;
3795static int hf_ieee80211_fc_pv1_cntl_power_mgmt;
3796static int hf_ieee80211_fc_pv1_cntl_more_data;
3797static int hf_ieee80211_fc_pv1_cntl_flow_control;
3798static int hf_ieee80211_fc_pv1_cntl_next_twt_info;
3799static int hf_ieee80211_fc_pv1_mgmt_pr_next_tbt;
3800static int hf_ieee80211_fc_pv1_mgmt_pr_full_ssid;
3801static int hf_ieee80211_fc_pv1_mgmt_pr_ano;
3802static int hf_ieee80211_fc_pv1_mgmt_pr_bss_bw;
3803static int hf_ieee80211_fc_pv1_mgmt_pr_security;
3804static int hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc;
3805static int hf_ieee80211_fc_pv1_mgmt_pr_slot_assign;
3806static int hf_ieee80211_fc_pv1_mgmt_pr_more_frag;
3807static int hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt;
3808static int hf_ieee80211_fc_pv1_mgmt_pr_grp_indic;
3809static int hf_ieee80211_fc_pv1_mgmt_pr_protected;
3810static int hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc;
3811static int hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm;
3812static int hf_ieee80211_fc_pv1_mgmt_pr_ack_policy;
3813static int hf_ieee80211_fc_pv1_from_ds;
3814static int hf_ieee80211_fc_pv1_more_fragments;
3815static int hf_ieee80211_fc_pv1_power_mgmt;
3816static int hf_ieee80211_fc_pv1_more_data;
3817static int hf_ieee80211_fc_pv1_protected_frame;
3818static int hf_ieee80211_fc_pv1_end_service_per;
3819static int hf_ieee80211_fc_pv1_relayed_frame;
3820static int hf_ieee80211_fc_pv1_ack_policy;
3821static int hf_ieee80211_pv1_sid;
3822static int hf_ieee80211_pv1_sid_association_id;
3823static int hf_ieee80211_pv1_sid_a3_present;
3824static int hf_ieee80211_pv1_sid_a4_present;
3825static int hf_ieee80211_pv1_sid_a_msdu;
3826
3827static int hf_ieee80211_pv1_cnt_stack_tetra_timest;
3828static int hf_ieee80211_pv1_cnt_bat_beacon_seq;
3829static int hf_ieee80211_pv1_cnt_bat_penta_timest;
3830static int hf_ieee80211_pv1_cnt_bat_next_twt_info;
3831static int hf_ieee80211_pv1_cnt_bat_stating_seq_cntl;
3832static int hf_ieee80211_pv1_cnt_bat_bitmap;
3833
3834static int hf_ieee80211_pv1_mgmt_reserved;
3835static int hf_ieee80211_pv1_cntl_reserved;
3836
3837typedef struct retransmit_key {
3838 uint8_t bssid[6];
3839 uint8_t src[6];
3840 uint16_t seq_control;
3841 unsigned fnum;
3842} retransmit_key;
3843
3844static GHashTable *fc_analyse_retransmit_table;
3845static GHashTable *fc_first_frame_table;
3846
3847static int hf_ieee80211_fc_analysis_retransmission;
3848static int hf_ieee80211_fc_analysis_retransmission_frame;
3849
3850/* ************************************************************************* */
3851/* Header values for Duration/ID field */
3852/* ************************************************************************* */
3853static int hf_ieee80211_did_duration;
3854static int hf_ieee80211_assoc_id;
3855
3856/* ************************************************************************* */
3857/* Header values for different address-fields (all 4 of them) */
3858/* ************************************************************************* */
3859static int hf_ieee80211_addr_da; /* Destination address subfield */
3860static int hf_ieee80211_addr_da_resolved; /* Dst addr subfield resolved*/
3861static int hf_ieee80211_addr_da_oui; /* Destination address subfield */
3862static int hf_ieee80211_addr_da_oui_resolved; /* Dst addr subfield resolved*/
3863static int hf_ieee80211_addr_da_ig; /* Destination address IG bit */
3864static int hf_ieee80211_addr_da_lg; /* Destination address LG bit */
3865
3866static int hf_ieee80211_addr_sa; /* Source address subfield */
3867static int hf_ieee80211_addr_sa_resolved; /* Src addr subfield resolved*/
3868static int hf_ieee80211_addr_sa_oui; /* Source address subfield */
3869static int hf_ieee80211_addr_sa_oui_resolved; /* Src addr subfield resolved*/
3870static int hf_ieee80211_addr_sa_ig; /* Source address IG bit */
3871static int hf_ieee80211_addr_sa_lg; /* Source address LG bit */
3872
3873static int hf_ieee80211_addr_ra; /* Receiver address subfield */
3874static int hf_ieee80211_addr_ra_resolved; /* Rcv addr subfield resolved*/
3875static int hf_ieee80211_addr_ra_oui; /* Receiver address subfield */
3876static int hf_ieee80211_addr_ra_oui_resolved; /* Rcv addr subfield resolved*/
3877static int hf_ieee80211_addr_ra_ig; /* Receiver address IG bit */
3878static int hf_ieee80211_addr_ra_lg; /* Receiver address LG bit */
3879
3880static int hf_ieee80211_addr_ta; /* Transmitter address subfield */
3881static int hf_ieee80211_addr_ta_resolved; /* Txm addr subfield resolved*/
3882static int hf_ieee80211_addr_ta_oui; /* Transmitter address subfield */
3883static int hf_ieee80211_addr_ta_oui_resolved; /* Txm addr subfield resolved*/
3884static int hf_ieee80211_addr_ta_ig; /* Transmitter address IG bit */
3885static int hf_ieee80211_addr_ta_lg; /* Transmitter address LG bit */
3886
3887static int hf_ieee80211_addr_bssid; /* address is bssid */
3888static int hf_ieee80211_addr_bssid_resolved; /* bssid resolved*/
3889static int hf_ieee80211_addr_bssid_oui; /* address is bssid */
3890static int hf_ieee80211_addr_bssid_oui_resolved; /* bssid resolved*/
3891static int hf_ieee80211_addr_bssid_ig; /* bssid address IG bit */
3892static int hf_ieee80211_addr_bssid_lg; /* bssid address LG bit */
3893
3894static int hf_ieee80211_addr_staa; /* address is station address */
3895static int hf_ieee80211_addr_staa_resolved; /* station address resolved*/
3896static int hf_ieee80211_addr_staa_oui; /* address is station address */
3897static int hf_ieee80211_addr_staa_oui_resolved; /* station address resolved*/
3898static int hf_ieee80211_addr_staa_ig; /* station address IG bit */
3899static int hf_ieee80211_addr_staa_lg; /* station address LG bit */
3900
3901static int hf_ieee80211_addr; /* Source or destination address subfield */
3902static int hf_ieee80211_addr_resolved;/*Src/dst address subfield resolved*/
3903static int hf_ieee80211_addr_oui; /* Source or destination address subfield */
3904static int hf_ieee80211_addr_oui_resolved;/*Src/dst address subfield resolved*/
3905static int hf_ieee80211_addr_ig; /* Src/dst address IG bit */
3906static int hf_ieee80211_addr_lg; /* Src/dst address LG bit */
3907
3908static int hf_ieee80211_mgt;
3909
3910/* ************************************************************************* */
3911/* Header values for QoS control field */
3912/* ************************************************************************* */
3913static int hf_ieee80211_qos;
3914static int hf_ieee80211_qos_tid;
3915static int hf_ieee80211_qos_priority;
3916static int hf_ieee80211_qos_ack_policy;
3917static int hf_ieee80211_qos_amsdu_present;
3918static int hf_ieee80211_qos_eosp;
3919static int hf_ieee80211_qos_bit4;
3920static int hf_ieee80211_qos_txop_limit;
3921static int hf_ieee80211_qos_ps_buf_state;
3922static int hf_ieee80211_qos_buf_state_indicated;
3923static int hf_ieee80211_qos_highest_pri_buf_ac;
3924static int hf_ieee80211_qos_qap_buf_load;
3925static int hf_ieee80211_qos_txop_dur_req;
3926static int hf_ieee80211_qos_queue_size;
3927static int hf_ieee80211_qos_mesh_ctl_present;
3928static int hf_ieee80211_qos_mesh_ps_rsvd;
3929static int hf_ieee80211_qos_mesh_ps_unicast;
3930static int hf_ieee80211_qos_mesh_ps_multicast;
3931static int hf_ieee80211_qos_mesh_rspi;
3932
3933/* ************************************************************************* */
3934/* Header values for HT control field (+HTC) and HE control */
3935/* ************************************************************************* */
3936/* 802.11-2012 and 802.11ac-2013 8.2.4.6 */
3937static int hf_ieee80211_htc;
3938static int hf_ieee80211_htc_vht;
3939static int hf_ieee80211_htc_he;
3940static int hf_ieee80211_htc_he_ctrl_id;
3941static int hf_ieee80211_he_a_control_padding;
3942static int hf_ieee80211_he_a_control_ones;
3943static int hf_ieee80211_he_trs_he_tb_ppdu_len;
3944static int hf_ieee80211_he_trs_ru_allocation;
3945static int hf_ieee80211_he_dl_tx_power;
3946static int hf_ieee80211_he_ul_target_rssi;
3947static int hf_ieee80211_he_ul_mcs;
3948static int hf_ieee80211_he_ul_reserved;
3949static int hf_ieee80211_he_om_rx_nss;
3950static int hf_ieee80211_he_om_channel_width;
3951static int hf_ieee80211_he_om_ul_mu_disable;
3952static int hf_ieee80211_he_om_tx_nsts;
3953static int hf_ieee80211_he_om_er_su_disable;
3954static int hf_ieee80211_he_om_dl_mu_mimo_resound;
3955static int hf_ieee80211_he_om_ul_mu_data_disable;
3956static int hf_ieee80211_he_hla_unsolicited_mfb;
3957static int hf_ieee80211_he_hla_mrq;
3958static int hf_ieee80211_he_hla_nss;
3959static int hf_ieee80211_he_hla_he_mcs;
3960static int hf_ieee80211_he_hla_dcm;
3961static int hf_ieee80211_he_hla_ru;
3962static int hf_ieee80211_he_hla_bw;
3963static int hf_ieee80211_he_hla_msi_ppdu_type;
3964static int hf_ieee80211_he_hla_tx_bf;
3965static int hf_ieee80211_he_hla_reserved;
3966static int hf_ieee80211_he_bsr_aci_bitmap;
3967static int hf_ieee80211_he_bsr_delta_tid;
3968static int hf_ieee80211_he_bsr_aci_high;
3969static int hf_ieee80211_he_bsr_scaling_factor;
3970static int hf_ieee80211_he_bsr_queue_size_high;
3971static int hf_ieee80211_he_bsr_queue_size_all;
3972static int hf_ieee80211_he_uph_ul_power_headroom;
3973static int hf_ieee80211_he_uph_ul_min_transmit_power_flag;
3974static int hf_ieee80211_he_uph_reserved;
3975static int hf_ieee80211_he_cci_ac_constraint;
3976static int hf_ieee80211_he_cci_rdg_more_ppdu;
3977static int hf_ieee80211_he_cci_sr_ppdu_indic;
3978static int hf_ieee80211_he_cci_reserved;
3979static int hf_ieee80211_he_eht_om_rx_nss_ext;
3980static int hf_ieee80211_he_eht_om_chan_w_ext;
3981static int hf_ieee80211_he_eht_om_tx_nsts_ext;
3982static int hf_ieee80211_he_eht_om_reserved;
3983static int hf_ieee80211_he_srs_ppdu_resp_dur;
3984static int hf_ieee80211_he_srs_reserved;
3985static int hf_ieee80211_he_aar_assisted_ap_bitmap;
3986static int hf_ieee80211_he_aar_reserved;
3987static int hf_ieee80211_he_btc_avail_chan;
3988static int hf_ieee80211_he_btc_reserved;
3989static int hf_ieee80211_he_trigger_common_info;
3990static int hf_ieee80211_he_trigger_type;
3991static int hf_ieee80211_he_trigger_ul_length;
3992static int hf_ieee80211_he_trigger_more_tf;
3993static int hf_ieee80211_he_trigger_cs_required;
3994static int hf_ieee80211_he_trigger_ul_bw;
3995static int hf_ieee80211_he_trigger_gi_and_ltf_type;
3996static int hf_ieee80211_he_trigger_mu_mimo_ltf_mode;
3997static int hf_ieee80211_he_trigger_num_he_ltf_syms_etc;
3998static int hf_ieee80211_he_trigger_ul_stbc;
3999static int hf_ieee80211_he_trigger_ldpc_extra_sym_seg;
4000static int hf_ieee80211_he_trigger_ap_tx_power;
4001static int hf_ieee80211_he_trigger_pre_fec_padding_factor;
4002static int hf_ieee80211_he_trigger_pe_disambiguity;
4003static int hf_ieee80211_he_trigger_ul_spatial_reuse;
4004static int hf_ieee80211_he_trigger_doppler;
4005static int hf_ieee80211_he_trigger_ul_he_sig_a_reserved;
4006static int hf_ieee80211_he_trigger_reserved;
4007static int hf_ieee80211_he_trigger_user_info;
4008static int hf_ieee80211_he_trigger_user_info_padding_start;
4009static int hf_ieee80211_he_trigger_padding;
4010static int hf_ieee80211_he_trigger_bar_ctrl;
4011static int hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy;
4012static int hf_ieee80211_he_trigger_bar_ctrl_ba_type;
4013static int hf_ieee80211_he_trigger_bar_ctrl_reserved;
4014static int hf_ieee80211_he_trigger_bar_ctrl_tid_info;
4015static int hf_ieee80211_he_trigger_bar_info;
4016static int hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl;
4017static int hf_ieee80211_he_trigger_mpdu_mu_spacing;
4018static int hf_ieee80211_he_trigger_tid_aggregation_limit;
4019static int hf_ieee80211_he_trigger_dependent_reserved1;
4020static int hf_ieee80211_he_trigger_preferred_ac;
4021static int hf_ieee80211_he_trigger_starting_aid;
4022static int hf_ieee80211_he_trigger_dependent_reserved2;
4023static int hf_ieee80211_he_trigger_feedback_type;
4024static int hf_ieee80211_he_trigger_dependent_reserved3;
4025static int hf_ieee80211_he_trigger_nfrp_target_rssi;
4026static int hf_ieee80211_he_trigger_multiplexing_flag;
4027static int hf_ieee80211_he_trigger_dep_nfrp_user_info;
4028static int hf_ieee80211_he_trigger_feedback_seg_retrans_bm;
4029static int hf_ieee80211_he_trigger_aid12;
4030static int hf_ieee80211_he_trigger_ru_allocation;
4031static int hf_ieee80211_he_trigger_ru_allocation_region;
4032static int hf_ieee80211_he_trigger_ru_starting_spatial_stream;
4033static int hf_ieee80211_he_trigger_ru_number_spatial_streams;
4034static int hf_ieee80211_he_trigger_ru_number_ra_ru;
4035static int hf_ieee80211_he_trigger_ru_no_more_ra_ru;
4036static int hf_ieee80211_he_trigger_ul_fec_coding_type;
4037static int hf_ieee80211_he_trigger_ul_mcs;
4038static int hf_ieee80211_he_trigger_ul_dcm;
4039static int hf_ieee80211_he_trigger_ul_target_rssi;
4040static int hf_ieee80211_he_trigger_user_reserved;
4041static int hf_ieee80211_he_trigger_dep_basic_user_info;
4042static int hf_ieee80211_he_trigger_ranging_common_info_1;
4043static int hf_ieee80211_he_trigger_ranging_common_info_2;
4044static int hf_ieee80211_eht_trigger_common_info;
4045static int hf_ieee80211_eht_trigger_type;
4046static int hf_ieee80211_eht_trigger_ul_length;
4047static int hf_ieee80211_eht_trigger_more_tf;
4048static int hf_ieee80211_eht_trigger_cs_required;
4049static int hf_ieee80211_eht_trigger_ul_bw;
4050static int hf_ieee80211_eht_trigger_gi_and_eht_ltf_type;
4051static int hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc;
4052static int hf_ieee80211_eht_trigger_reserved2;
4053static int hf_ieee80211_eht_trigger_ldpc_extra_sym_seg;
4054static int hf_ieee80211_eht_trigger_ap_tx_power;
4055static int hf_ieee80211_eht_trigger_pre_fec_padding_factor;
4056static int hf_ieee80211_eht_trigger_pe_disambiguity;
4057static int hf_ieee80211_eht_trigger_ul_spatial_reuse;
4058static int hf_ieee80211_eht_trigger_reserved3;
4059static int hf_ieee80211_eht_trigger_he_eht_p160;
4060static int hf_ieee80211_eht_trigger_special_user_info_flag;
4061static int hf_ieee80211_eht_trigger_eht_reserved;
4062static int hf_ieee80211_eht_trigger_reserved4;
4063static int hf_ieee80211_eht_trigger_reserved;
4064static int hf_ieee80211_eht_trigger_aid12;
4065static int hf_ieee80211_eht_trigger_special_user_info;
4066static int hf_ieee80211_eht_trigger_phy_version_identifier;
4067static int hf_ieee80211_eht_trigger_ul_bw_extenstion;
4068static int hf_ieee80211_eht_trigger_eht_spatial_reuse_1;
4069static int hf_ieee80211_eht_trigger_eht_spatial_reuse_2;
4070static int hf_ieee80211_eht_trigger_disregard_u_sig_1;
4071static int hf_ieee80211_eht_trigger_validate_u_sig_2;
4072static int hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb;
4073static int hf_ieee80211_eht_trigger_disregard_u_sig_2_msb;
4074static int hf_ieee80211_eht_trigger_special_reserved;
4075static int hf_ieee80211_eht_trigger_user_info;
4076static int hf_ieee80211_eht_trigger_ru_allocation_region;
4077static int hf_ieee80211_eht_trigger_ru_allocation;
4078static int hf_ieee80211_eht_trigger_ul_fec_coding_type;
4079static int hf_ieee80211_eht_trigger_ul_eht_mcs;
4080static int hf_ieee80211_eht_trigger_ru_starting_spatial_stream;
4081static int hf_ieee80211_eht_trigger_ru_number_spatial_streams;
4082static int hf_ieee80211_eht_trigger_ul_target_recv_power;
4083static int hf_ieee80211_eht_trigger_ps160;
4084static int hf_ieee80211_eht_trigger_user_info_reserved;
4085static int hf_ieee80211_uhr_trigger_common_info;
4086static int hf_ieee80211_uhr_trigger_type;
4087static int hf_ieee80211_uhr_trigger_ul_length;
4088static int hf_ieee80211_uhr_trigger_more_tf;
4089static int hf_ieee80211_uhr_trigger_cs_required;
4090static int hf_ieee80211_uhr_trigger_ul_bw;
4091static int hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type;
4092static int hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc;
4093static int hf_ieee80211_uhr_trigger_reserved2;
4094static int hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg;
4095static int hf_ieee80211_uhr_trigger_ap_tx_power;
4096static int hf_ieee80211_uhr_trigger_pre_fec_padding_factor;
4097static int hf_ieee80211_uhr_trigger_pe_disambiguity;
4098static int hf_ieee80211_uhr_trigger_ul_spatial_reuse;
4099static int hf_ieee80211_uhr_trigger_reserved3;
4100static int hf_ieee80211_uhr_trigger_he_uhr_p160;
4101static int hf_ieee80211_uhr_trigger_special_user_info_flag;
4102static int hf_ieee80211_uhr_trigger_dru_rru;
4103static int hf_ieee80211_uhr_trigger_ifcs;
4104static int hf_ieee80211_uhr_trigger_uhr_reserved;
4105static int hf_ieee80211_uhr_trigger_reserved4;
4106static int hf_ieee80211_uhr_trigger_reserved;
4107static int hf_ieee80211_uhr_trigger_user_info;
4108static int hf_ieee80211_uhr_trigger_aid12;
4109static int hf_ieee80211_uhr_trigger_ru_allocation_region;
4110static int hf_ieee80211_uhr_trigger_ru_allocation;
4111static int hf_ieee80211_uhr_trigger_ul_fec_coding_type;
4112static int hf_ieee80211_uhr_trigger_ul_uhr_mcs;
4113static int hf_ieee80211_uhr_trigger_2xldpc;
4114static int hf_ieee80211_uhr_trigger_ru_starting_spatial_stream;
4115static int hf_ieee80211_uhr_trigger_ru_number_spatial_streams;
4116static int hf_ieee80211_uhr_trigger_dru_distribution_bw;
4117static int hf_ieee80211_uhr_trigger_dru_reserved;
4118static int hf_ieee80211_uhr_trigger_ul_target_recv_power;
4119static int hf_ieee80211_uhr_trigger_ps160;
4120
4121
4122static int hf_ieee80211_ranging_trigger_subtype1;
4123static int hf_ieee80211_ranging_trigger_reserved1;
4124static int hf_ieee80211_ranging_trigger_token;
4125static int hf_ieee80211_ranging_trigger_subtype2;
4126static int hf_ieee80211_ranging_trigger_reserved2;
4127static int hf_ieee80211_ranging_trigger_sounding_dialog_token;
4128static int hf_ieee80211_he_trigger_ranging_trigger_poll_rpt;
4129static int hf_ieee80211_ranging_pol_rpt_aid12_rsid12;
4130static int hf_ieee80211_ranging_pol_rpt_ru_alloc_region;
4131static int hf_ieee80211_ranging_pol_rpt_ru_alloc;
4132static int hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type;
4133static int hf_ieee80211_ranging_pol_rpt_ulmcs;
4134static int hf_ieee80211_ranging_pol_rpt_uldcm;
4135static int hf_ieee80211_ranging_pol_rpt_starting_spatial_stream;
4136static int hf_ieee80211_ranging_pol_rpt_number_spatial_streams;
4137static int hf_ieee80211_ranging_pol_rpt_ul_target_rssi;
4138static int hf_ieee80211_ranging_pol_rpt_reserved;
4139static int hf_ieee80211_he_trigger_ranging_trigger_sounding;
4140static int hf_ieee80211_ranging_sounding_aid12_rsid12;
4141static int hf_ieee80211_ranging_sounding_reserved1;
4142static int hf_ieee80211_ranging_sounding_i2r_rep;
4143static int hf_ieee80211_ranging_sounding_reserved2;
4144static int hf_ieee80211_ranging_sounding_starting_spatial_stream;
4145static int hf_ieee80211_ranging_sounding_number_spatial_streams;
4146static int hf_ieee80211_ranging_sounding_ul_target_rssi;
4147static int hf_ieee80211_ranging_sounding_reserved3;
4148static int hf_ieee80211_he_trigger_ranging_trigger_sec_sound;
4149static int hf_ieee80211_ranging_sec_sound_aid12_rsid12;
4150static int hf_ieee80211_ranging_sec_sound_reserved1;
4151static int hf_ieee80211_ranging_sec_sound_i2r_rep;
4152static int hf_ieee80211_ranging_sec_sound_reserved2;
4153static int hf_ieee80211_ranging_sec_sound_starting_spatial_stream;
4154static int hf_ieee80211_ranging_sec_sound_number_spatial_streams;
4155static int hf_ieee80211_ranging_sec_sound_ul_target_rssi;
4156static int hf_ieee80211_ranging_sec_sound_reserved3;
4157static int hf_ieee80211_he_trigger_ranging_user_info_sac;
4158static int hf_ieee80211_he_ndp_annc_sta;
4159static int hf_ieee80211_he_ndp_annc_aid11;
4160static int hf_ieee80211_he_ndp_annc_ru_start;
4161static int hf_ieee80211_he_ndp_annc_ru_end;
4162static int hf_ieee80211_he_ndp_annc_feedback_type_and_ng;
4163static int hf_ieee80211_he_ndp_annc_disambiguation;
4164static int hf_ieee80211_he_ndp_annc_codebook_size;
4165static int hf_ieee80211_he_ndp_annc_nc;
4166static int hf_ieee80211_he_ndp_annc_disallowed_bitmap;
4167static int hf_ieee80211_he_ndp_annc_reserved1;
4168static int hf_ieee80211_he_ndp_annc_reserved2;
4169static int hf_ieee80211_he_qtp_control;
4170static int hf_ieee80211_he_qtp_setup_quiet_period_duration;
4171static int hf_ieee80211_he_qtp_setup_srv_specific_identif;
4172static int hf_ieee80211_he_qtp_request_dialog_token;
4173static int hf_ieee80211_he_qtp_request_quiet_period_offset;
4174static int hf_ieee80211_he_qtp_request_quiet_period_duration;
4175static int hf_ieee80211_he_qtp_request_quiet_period_interval;
4176static int hf_ieee80211_he_qtp_request_repetition_count;
4177static int hf_ieee80211_he_qtp_request_srv_specific_identif;
4178static int hf_ieee80211_he_qtp_response_dialog_token;
4179static int hf_ieee80211_he_qtp_response_status_code;
4180static int hf_ieee80211_he_qtp_response_quiet_period_offset;
4181static int hf_ieee80211_he_qtp_response_quiet_period_duration;
4182static int hf_ieee80211_he_qtp_response_quiet_period_interval;
4183static int hf_ieee80211_he_qtp_response_repetition_count;
4184static int hf_ieee80211_he_qtp_response_srv_specific_identif;
4185static int hf_ieee80211_htc_ht_lac;
4186static int hf_ieee80211_htc_lac_trq;
4187static int hf_ieee80211_htc_lac_mai_aseli;
4188static int hf_ieee80211_htc_lac_mai_mrq;
4189static int hf_ieee80211_htc_lac_mai_msi;
4190static int hf_ieee80211_htc_lac_mai_reserved;
4191static int hf_ieee80211_htc_lac_mfsi;
4192static int hf_ieee80211_htc_lac_mfb;
4193static int hf_ieee80211_htc_lac_asel_command;
4194static int hf_ieee80211_htc_lac_asel_data;
4195static int hf_ieee80211_htc_cal_pos;
4196static int hf_ieee80211_htc_cal_seq;
4197static int hf_ieee80211_htc_reserved1;
4198static int hf_ieee80211_htc_csi_steering;
4199static int hf_ieee80211_htc_ndp_announcement;
4200static int hf_ieee80211_htc_reserved2;
4201static int hf_ieee80211_htc_mrq;
4202static int hf_ieee80211_htc_msi;
4203static int hf_ieee80211_htc_msi_stbc_reserved;
4204static int hf_ieee80211_htc_compressed_msi;
4205static int hf_ieee80211_htc_ppdu_stbc_encoded;
4206static int hf_ieee80211_htc_mfsi;
4207static int hf_ieee80211_htc_gid_l;
4208static int hf_ieee80211_htc_mfb;
4209static int hf_ieee80211_htc_num_sts;
4210static int hf_ieee80211_htc_vht_mcs;
4211static int hf_ieee80211_htc_bw;
4212static int hf_ieee80211_htc_s1g_num_sts;
4213static int hf_ieee80211_htc_s1g_vht_mcs;
4214static int hf_ieee80211_htc_s1g_bw;
4215static int hf_ieee80211_htc_snr;
4216static int hf_ieee80211_htc_reserved3;
4217static int hf_ieee80211_htc_gid_h;
4218static int hf_ieee80211_htc_coding_type;
4219static int hf_ieee80211_htc_fb_tx_type;
4220static int hf_ieee80211_htc_unsolicited_mfb;
4221static int hf_ieee80211_htc_ac_constraint;
4222static int hf_ieee80211_htc_rdg_more_ppdu;
4223
4224/* ************************************************************************* */
4225/* Header values for sequence number field */
4226/* ************************************************************************* */
4227static int hf_ieee80211_frag_number;
4228static int hf_ieee80211_seq_number;
4229
4230/* ************************************************************************* */
4231/* Header values for Frame Check field */
4232/* ************************************************************************* */
4233static int hf_ieee80211_fcs;
4234static int hf_ieee80211_fcs_status;
4235
4236/* ************************************************************************* */
4237/* Header values for reassembly */
4238/* ************************************************************************* */
4239static int hf_ieee80211_fragments;
4240static int hf_ieee80211_fragment;
4241static int hf_ieee80211_fragment_overlap;
4242static int hf_ieee80211_fragment_overlap_conflict;
4243static int hf_ieee80211_fragment_multiple_tails;
4244static int hf_ieee80211_fragment_too_long_fragment;
4245static int hf_ieee80211_fragment_error;
4246static int hf_ieee80211_fragment_count;
4247static int hf_ieee80211_reassembled_in;
4248static int hf_ieee80211_reassembled_length;
4249
4250static int proto_wlan_ext;
4251
4252/* ************************************************************************* */
4253/* Fixed fields found in mgt frames */
4254/* ************************************************************************* */
4255static int hf_ieee80211_fixed_parameters; /* Protocol payload for management frames */
4256
4257static int hf_ieee80211_ff_auth_alg; /* Authentication algorithm field */
4258static int hf_ieee80211_ff_auth_seq; /* Authentication transaction sequence */
4259static int hf_ieee80211_ff_current_ap; /* Current AP MAC address */
4260static int hf_ieee80211_ff_listen_ival; /* Listen interval fixed field */
4261static int hf_ieee80211_ff_timestamp; /* 64 bit timestamp */
4262static int hf_ieee80211_ff_beacon_interval; /* 16 bit Beacon interval */
4263static int hf_ieee80211_ff_assoc_id; /* 16 bit AID field */
4264static int hf_ieee80211_ff_reason; /* 16 bit reason code */
4265static int hf_ieee80211_ff_status_code; /* Status code */
4266static int hf_ieee80211_ff_category_code; /* 8 bit Category code */
4267static int hf_ieee80211_ff_action_code; /* 8 bit Action code */
4268static int hf_ieee80211_ff_dialog_token; /* 8 bit Dialog token */
4269static int hf_ieee80211_ff_trigger;
4270static int hf_ieee80211_ff_ftm_tod;
4271static int hf_ieee80211_ff_ftm_toa;
4272static int hf_ieee80211_ff_ftm_tod_err;
4273static int hf_ieee80211_ff_ftm_toa_err;
4274static int hf_ieee80211_ff_followup_dialog_token;
4275static int hf_ieee80211_ff_wme_action_code; /* Management notification action code */
4276static int hf_ieee80211_ff_wme_status_code; /* Management notification setup response status code */
4277static int hf_ieee80211_ff_qos_action_code;
4278static int hf_ieee80211_ff_dls_action_code;
4279static int hf_ieee80211_ff_dst_mac_addr; /* DLS destination MAC address */
4280static int hf_ieee80211_ff_src_mac_addr; /* DLS source MAC address */
4281static int hf_ieee80211_ff_req_ap_addr;
4282static int hf_ieee80211_ff_res_ap_addr;
4283static int hf_ieee80211_ff_check_beacon;
4284static int hf_ieee80211_ff_dls_timeout; /* DLS timeout value */
4285static int hf_ieee80211_ff_ft_action_code; /* 8 bit FT Action code */
4286static int hf_ieee80211_ff_sta_address;
4287static int hf_ieee80211_ff_target_ap_address;
4288static int hf_ieee80211_ff_gas_comeback_delay;
4289static int hf_ieee80211_ff_gas_fragment_id;
4290static int hf_ieee80211_ff_more_gas_fragments;
4291static int hf_ieee80211_ff_query_request_length;
4292static int hf_ieee80211_ff_query_request;
4293static int hf_ieee80211_ff_query_response_length;
4294static int hf_ieee80211_ff_query_response;
4295static int hf_ieee80211_ff_anqp_info_id;
4296static int hf_ieee80211_ff_anqp_info_length;
4297static int hf_ieee80211_ff_anqp_info;
4298static int hf_ieee80211_ff_anqp_query_id;
4299static int hf_ieee80211_ff_anqp_capability;
4300static int hf_ieee80211_ff_anqp_capability_vlen;
4301static int hf_ieee80211_ff_anqp_capability_vendor;
4302static int hf_ieee80211_ff_venue_info_group;
4303static int hf_ieee80211_ff_venue_info_type;
4304static int hf_ieee80211_ff_anqp_venue_length;
4305static int hf_ieee80211_ff_anqp_venue_language;
4306static int hf_ieee80211_ff_anqp_venue_name;
4307static int hf_ieee80211_ff_anqp_nw_auth_type_indicator;
4308static int hf_ieee80211_ff_anqp_nw_auth_type_url_len;
4309static int hf_ieee80211_ff_anqp_nw_auth_type_url;
4310static int hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator;
4311static int hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len;
4312static int hf_ieee80211_ff_anqp_nw_auth_type_ts_url;
4313static int hf_ieee80211_ff_anqp_nw_auth_type_ts_year;
4314static int hf_ieee80211_ff_anqp_nw_auth_type_ts_mon;
4315static int hf_ieee80211_ff_anqp_nw_auth_type_ts_day;
4316static int hf_ieee80211_ff_anqp_nw_auth_type_ts_hr;
4317static int hf_ieee80211_ff_anqp_nw_auth_type_ts_min;
4318static int hf_ieee80211_ff_anqp_nw_auth_type_ts_sec;
4319static int hf_ieee80211_ff_anqp_nw_auth_type_ts_msec;
4320static int hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd;
4321static int hf_ieee80211_ff_anqp_roaming_consortium_oi_len;
4322static int hf_ieee80211_ff_anqp_roaming_consortium_oi;
4323static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv6;
4324static int hf_ieee80211_ff_anqp_ip_addr_avail_ipv4;
4325static int hf_ieee80211_ff_anqp_nai_realm_count;
4326static int hf_ieee80211_ff_anqp_nai_field_len;
4327static int hf_ieee80211_ff_anqp_nai_realm_encoding;
4328static int hf_ieee80211_ff_anqp_nai_realm_length;
4329static int hf_ieee80211_ff_anqp_nai_realm;
4330static int hf_ieee80211_ff_anqp_nai_realm_eap_count;
4331static int hf_ieee80211_ff_anqp_nai_realm_eap_len;
4332static int hf_ieee80211_ff_anqp_nai_realm_eap_method;
4333static int hf_ieee80211_ff_anqp_nai_realm_auth_param_count;
4334static int hf_ieee80211_ff_anqp_nai_realm_auth_param_id;
4335static int hf_ieee80211_ff_anqp_nai_realm_auth_param_len;
4336static int hf_ieee80211_ff_anqp_nai_realm_auth_param_value;
4337static int hf_ieee80211_3gpp_gc_gud;
4338static int hf_ieee80211_3gpp_gc_udhl;
4339static int hf_ieee80211_3gpp_gc_iei;
4340static int hf_ieee80211_3gpp_gc_num_plmns;
4341static int hf_ieee80211_3gpp_gc_plmn;
4342static int hf_ieee80211_3gpp_gc_plmn_len;
4343static int hf_ieee80211_ff_anqp_domain_name_len;
4344static int hf_ieee80211_ff_anqp_domain_name;
4345static int hf_ieee80211_ff_tdls_action_code;
4346static int hf_ieee80211_ff_target_channel;
4347static int hf_ieee80211_ff_operating_class;
4348static int hf_ieee80211_ff_channel;
4349static int hf_ieee80211_ff_wnm_action_code;
4350static int hf_ieee80211_ff_unprotected_wnm_action_code;
4351static int hf_ieee80211_ff_key_data_length;
4352static int hf_ieee80211_ff_key_data;
4353static int hf_ieee80211_ff_wnm_notification_type;
4354static int hf_ieee80211_ff_wnm_notification_response_status;
4355static int hf_ieee80211_ff_rm_action_code;
4356static int hf_ieee80211_ff_rm_dialog_token;
4357static int hf_ieee80211_ff_rm_repetitions;
4358static int hf_ieee80211_ff_rm_tx_power;
4359static int hf_ieee80211_ff_rm_max_tx_power;
4360static int hf_ieee80211_ff_tpc;
4361static int hf_ieee80211_ff_tpc_element_id;
4362static int hf_ieee80211_ff_tpc_length;
4363static int hf_ieee80211_ff_tpc_tx_power;
4364static int hf_ieee80211_ff_tpc_link_margin;
4365static int hf_ieee80211_ff_rm_rx_antenna_id;
4366static int hf_ieee80211_ff_rm_tx_antenna_id;
4367static int hf_ieee80211_ff_rm_rcpi;
4368static int hf_ieee80211_ff_rm_rsni;
4369static int hf_ieee80211_ff_request_mode_pref_cand;
4370static int hf_ieee80211_ff_request_mode_abridged;
4371static int hf_ieee80211_ff_request_mode_disassoc_imminent;
4372static int hf_ieee80211_ff_request_mode_bss_term_included;
4373static int hf_ieee80211_ff_request_mode_ess_disassoc_imminent;
4374static int hf_ieee80211_ff_request_mode_link_removal_imminent;
4375static int hf_ieee80211_ff_request_mode_reserved;
4376static int hf_ieee80211_ff_disassoc_timer;
4377static int hf_ieee80211_ff_validity_interval;
4378static int hf_ieee80211_ff_url_len;
4379static int hf_ieee80211_ff_url;
4380static int hf_ieee80211_ff_target_bss;
4381static int hf_ieee80211_ff_bss_transition_query_reason;
4382static int hf_ieee80211_ff_bss_transition_status_code;
4383static int hf_ieee80211_ff_bss_termination_delay;
4384static int hf_ieee80211_ff_bss_transition_candidate_list_entries;
4385
4386static int hf_ieee80211_ff_sa_query_action_code;
4387static int hf_ieee80211_ff_transaction_id;
4388
4389static int hf_ieee80211_ff_send_confirm;
4390static int hf_ieee80211_ff_scalar;
4391static int hf_ieee80211_ff_finite_field_element;
4392static int hf_ieee80211_ff_confirm;
4393static int hf_ieee80211_ff_finite_cyclic_group;
4394static int hf_ieee80211_ff_sae_message_type;
4395static int hf_ieee80211_ff_sae_anti_clogging_token;
4396
4397
4398/* Vendor specific */
4399static int hf_ieee80211_ff_marvell_action_type;
4400static int hf_ieee80211_ff_marvell_mesh_mgt_action_code;
4401static int hf_ieee80211_ff_marvell_mesh_mgt_length; /* Mesh Management length */
4402static int hf_ieee80211_ff_marvell_mesh_mgt_mode; /* Mesh Management mode */
4403static int hf_ieee80211_ff_marvell_mesh_mgt_ttl; /* Mesh Management TTL */
4404static int hf_ieee80211_ff_marvell_mesh_mgt_dstcount; /* Mesh Management dst count */
4405static int hf_ieee80211_ff_marvell_mesh_mgt_hopcount; /* Mesh Management hop count */
4406static int hf_ieee80211_ff_marvell_mesh_mgt_rreqid; /* Mesh Management RREQ ID */
4407static int hf_ieee80211_ff_marvell_mesh_mgt_sa; /* Mesh Management src addr */
4408static int hf_ieee80211_ff_marvell_mesh_mgt_ssn; /* Mesh Management src sequence number */
4409static int hf_ieee80211_ff_marvell_mesh_mgt_metric; /* Mesh Management metric */
4410static int hf_ieee80211_ff_marvell_mesh_mgt_flags; /* Mesh Management RREQ flags */
4411static int hf_ieee80211_ff_marvell_mesh_mgt_da; /* Mesh Management dst addr */
4412static int hf_ieee80211_ff_marvell_mesh_mgt_dsn; /* Mesh Management dst sequence number */
4413static int hf_ieee80211_ff_marvell_mesh_mgt_lifetime; /* Mesh Management lifetime */
4414
4415
4416static int hf_ieee80211_ff_ba_action;
4417
4418static int hf_ieee80211_ff_block_ack_params;
4419static int hf_ieee80211_ff_block_ack_params_amsdu_permitted;
4420static int hf_ieee80211_ff_block_ack_params_policy;
4421static int hf_ieee80211_ff_block_ack_params_tid;
4422static int hf_ieee80211_ff_block_ack_params_buffer_size;
4423
4424static int * const ieee80211_ff_block_ack_params_fields[] = {
4425 &hf_ieee80211_ff_block_ack_params_amsdu_permitted,
4426 &hf_ieee80211_ff_block_ack_params_policy,
4427 &hf_ieee80211_ff_block_ack_params_tid,
4428 &hf_ieee80211_ff_block_ack_params_buffer_size,
4429 NULL((void*)0)
4430};
4431
4432static int hf_ieee80211_ff_block_ack_timeout;
4433
4434static int hf_ieee80211_ff_block_ack_ssc;
4435static int hf_ieee80211_ff_block_ack_ssc_fragment;
4436static int hf_ieee80211_ff_block_ack_ssc_sequence;
4437
4438static int * const ieee80211_ff_block_ack_ssc_fields[] = {
4439 &hf_ieee80211_ff_block_ack_ssc_fragment,
4440 &hf_ieee80211_ff_block_ack_ssc_sequence,
4441 NULL((void*)0)
4442};
4443
4444static int hf_ieee80211_ff_delba_param;
4445static int hf_ieee80211_ff_delba_param_reserved;
4446static int hf_ieee80211_ff_delba_param_init;
4447static int hf_ieee80211_ff_delba_param_tid;
4448
4449static int * const ieee80211_ff_delba_param_fields[] = {
4450 &hf_ieee80211_ff_delba_param_reserved,
4451 &hf_ieee80211_ff_delba_param_init,
4452 &hf_ieee80211_ff_delba_param_tid,
4453 NULL((void*)0)
4454};
4455
4456static int hf_ieee80211_ff_max_reg_pwr;
4457static int hf_ieee80211_ff_measurement_pilot_int;
4458static int hf_ieee80211_ff_country_str;
4459static int hf_ieee80211_ff_max_tx_pwr;
4460static int hf_ieee80211_ff_tx_pwr_used;
4461static int hf_ieee80211_ff_transceiver_noise_floor;
4462static int hf_ieee80211_ff_channel_width;
4463
4464static int hf_ieee80211_ff_qos_info_ap;
4465static int hf_ieee80211_ff_qos_info_ap_edca_param_set_counter;
4466static int hf_ieee80211_ff_qos_info_ap_q_ack;
4467static int hf_ieee80211_ff_qos_info_ap_queue_req;
4468static int hf_ieee80211_ff_qos_info_ap_txop_request;
4469static int hf_ieee80211_ff_qos_info_ap_more_data_ack;
4470
4471static int * const ieee80211_ff_qos_info_ap_fields[] = {
4472 &hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
4473 &hf_ieee80211_ff_qos_info_ap_q_ack,
4474 &hf_ieee80211_ff_qos_info_ap_queue_req,
4475 &hf_ieee80211_ff_qos_info_ap_txop_request,
4476 &hf_ieee80211_ff_qos_info_ap_more_data_ack,
4477 NULL((void*)0)
4478};
4479
4480static int hf_ieee80211_ff_qos_info_sta;
4481static int hf_ieee80211_ff_qos_info_sta_ac_vo;
4482static int hf_ieee80211_ff_qos_info_sta_ac_vi;
4483static int hf_ieee80211_ff_qos_info_sta_ac_bk;
4484static int hf_ieee80211_ff_qos_info_sta_ac_be;
4485static int hf_ieee80211_ff_qos_info_sta_q_ack;
4486static int hf_ieee80211_ff_qos_info_sta_max_sp_length;
4487static int hf_ieee80211_ff_qos_info_sta_more_data_ack;
4488
4489static int * const ieee80211_ff_qos_info_sta_fields[] = {
4490 &hf_ieee80211_ff_qos_info_sta_ac_vo,
4491 &hf_ieee80211_ff_qos_info_sta_ac_vi,
4492 &hf_ieee80211_ff_qos_info_sta_ac_bk,
4493 &hf_ieee80211_ff_qos_info_sta_ac_be,
4494 &hf_ieee80211_ff_qos_info_sta_q_ack,
4495 &hf_ieee80211_ff_qos_info_sta_max_sp_length,
4496 &hf_ieee80211_ff_qos_info_sta_more_data_ack,
4497 NULL((void*)0)
4498};
4499
4500static int hf_ieee80211_ff_sm_pwr_save;
4501static int hf_ieee80211_ff_sm_pwr_save_enabled;
4502static int hf_ieee80211_ff_sm_pwr_save_sm_mode;
4503static int hf_ieee80211_ff_sm_pwr_save_reserved;
4504
4505static int * const ieee80211_ff_sw_pwr_save_fields[] = {
4506 &hf_ieee80211_ff_sm_pwr_save_enabled,
4507 &hf_ieee80211_ff_sm_pwr_save_sm_mode,
4508 &hf_ieee80211_ff_sm_pwr_save_reserved,
4509 NULL((void*)0)
4510};
4511
4512static int hf_ieee80211_ff_pco_phase_cntrl;
4513
4514static int hf_ieee80211_ff_psmp_param_set;
4515static int hf_ieee80211_ff_psmp_param_set_n_sta;
4516static int hf_ieee80211_ff_psmp_param_set_more_psmp;
4517static int hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration;
4518
4519static int * const ieee80211_ff_psmp_param_set_fields[] = {
4520 &hf_ieee80211_ff_psmp_param_set_n_sta,
4521 &hf_ieee80211_ff_psmp_param_set_more_psmp,
4522 &hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
4523 NULL((void*)0)
4524};
4525
4526static int hf_ieee80211_ff_mimo_cntrl;
4527static int hf_ieee80211_ff_mimo_cntrl_nc_index;
4528static int hf_ieee80211_ff_mimo_cntrl_nr_index;
4529static int hf_ieee80211_ff_mimo_cntrl_channel_width;
4530static int hf_ieee80211_ff_mimo_cntrl_grouping;
4531static int hf_ieee80211_ff_mimo_cntrl_coefficient_size;
4532static int hf_ieee80211_ff_mimo_cntrl_codebook_info;
4533static int hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment;
4534static int hf_ieee80211_ff_mimo_cntrl_reserved;
4535static int hf_ieee80211_ff_mimo_cntrl_sounding_timestamp;
4536
4537static int hf_ieee80211_ff_ftm_param_delim1;
4538static int hf_ieee80211_ff_ftm_param_status_indication;
4539static int hf_ieee80211_ff_ftm_param_value;
4540static int hf_ieee80211_ff_ftm_param_reserved1;
4541static int hf_ieee80211_ff_ftm_param_burst_exponent;
4542static int hf_ieee80211_ff_ftm_param_burst_duration;
4543
4544static int hf_ieee80211_ff_ftm_param_delim2;
4545static int hf_ieee80211_ff_ftm_param_min_delta_ftm;
4546static int hf_ieee80211_ff_ftm_param_partial_tsf_timer;
4547static int hf_ieee80211_ff_ftm_param_partial_tsf_no_pref;
4548static int hf_ieee80211_ff_ftm_param_asap_capable;
4549static int hf_ieee80211_ff_ftm_param_asap;
4550static int hf_ieee80211_ff_ftm_param_ftm_per_burst;
4551
4552static int hf_ieee80211_ff_ftm_param_delim3;
4553static int hf_ieee80211_ff_ftm_param_reserved2;
4554static int hf_ieee80211_ff_ftm_param_format_and_bw;
4555static int hf_ieee80211_ff_ftm_param_burst_period;
4556
4557/* az D3.0 introduces a 1-octet TOD Error field; use a different name to avoid
4558 * conflicting with the existing hf_ieee80211_ff_ftm_tod_err (which is 2
4559 * octets).
4560 */
4561static int hf_ieee80211_ff_ftm_tod_err1;
4562static int hf_ieee80211_ff_ftm_max_tod_error_exponent;
4563static int hf_ieee80211_ff_ftm_tod_err_reserved;
4564static int hf_ieee80211_ff_ftm_tod_not_continuous;
4565
4566/* Same situation with ...toa_err1 as ...tod_err1 */
4567static int hf_ieee80211_ff_ftm_toa_err1;
4568static int hf_ieee80211_ff_ftm_max_toa_error_exponent;
4569static int hf_ieee80211_ff_ftm_toa_err_reserved;
4570static int hf_ieee80211_ff_ftm_invalid_measurement;
4571static int hf_ieee80211_ff_ftm_toa_type;
4572
4573static int hf_ieee80211_ff_ftm_cfo;
4574static int hf_ieee80211_ff_ftm_r2i_ndp_tx_power;
4575static int hf_ieee80211_ff_ftm_i2r_ndp_target_rssi;
4576
4577/* az: FTM Ranging Parameters Element */
4578static int hf_ieee80211_tag_ranging_parameters;
4579static int hf_ieee80211_tag_ranging_subelt_tag;
4580static int hf_ieee80211_tag_ranging_subelt_len;
4581static int hf_ieee80211_tag_ranging_status_indication;
4582static int hf_ieee80211_tag_ranging_value;
4583static int hf_ieee80211_tag_ranging_i2r_lmr_feedback;
4584static int hf_ieee80211_tag_ranging_secure_ltf_required;
4585static int hf_ieee80211_tag_ranging_secure_ltf_support;
4586static int hf_ieee80211_tag_ranging_ranging_priority;
4587static int hf_ieee80211_tag_ranging_r2i_toa_type;
4588static int hf_ieee80211_tag_ranging_i2r_toa_type;
4589static int hf_ieee80211_tag_ranging_r2i_aoa_requested;
4590static int hf_ieee80211_tag_ranging_i2r_aoa_requested;
4591static int hf_ieee80211_tag_ranging_format_and_bandwidth;
4592static int hf_ieee80211_tag_ranging_immediate_r2i_feedback;
4593static int hf_ieee80211_tag_ranging_immediate_i2r_feedback;
4594static int hf_ieee80211_tag_ranging_max_i2r_repetition;
4595static int hf_ieee80211_tag_ranging_max_r2i_repetition;
4596static int hf_ieee80211_tag_ranging_reserved1;
4597static int hf_ieee80211_tag_ranging_reserved2;
4598static int hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz;
4599static int hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz;
4600static int hf_ieee80211_tag_ranging_max_r2i_ltf_total;
4601static int hf_ieee80211_tag_ranging_max_i2r_ltf_total;
4602static int hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz;
4603static int hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz;
4604static int hf_ieee80211_tag_ranging_bss_color_info;
4605
4606/* az: FTM Ranging Parameters NTB-specific subelement */
4607static int hf_ieee80211_tag_ranging_ntb;
4608static int hf_ieee80211_tag_ranging_ntb_reserved1;
4609static int hf_ieee80211_tag_ranging_ntb_min_time_msmts;
4610static int hf_ieee80211_tag_ranging_ntb_max_time_msmts;
4611static int hf_ieee80211_tag_ranging_ntb_r2i_tx_power;
4612static int hf_ieee80211_tag_ranging_ntb_i2r_tx_power;
4613static int hf_ieee80211_tag_ranging_ntb_reserved2;
4614
4615/* az: FTM Ranging Specific TB subelement */
4616static int hf_ieee80211_tag_ranging_aid_rsid;
4617static int hf_ieee80211_tag_ranging_device_class;
4618static int hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo;
4619static int hf_ieee80211_tag_ranging_trigger_frame_paddur;
4620static int hf_ieee80211_tag_ranging_max_sess_exp;
4621static int hf_ieee80211_tag_ranging_passive_tb_ranging;
4622static int hf_ieee80211_tag_ranging_tb_specific_reserved;
4623
4624/* az: FTM Ranging Secure HE-LTF subelement */
4625static int hf_ieee80211_tag_ranging_secure_he_ltf;
4626static int hf_ieee80211_tag_ranging_secure_he_ltf_version;
4627static int hf_ieee80211_tag_ranging_secure_he_ltf_req;
4628static int hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window;
4629static int hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window;
4630static int hf_ieee80211_tag_ranging_secure_he_ltf_reserved;
4631
4632/* az: PASN subelements etc. */
4633static int hf_ieee80211_tag_pasn_parameters_control;
4634static int hf_ieee80211_tag_pasn_params_comeback_info_present;
4635static int hf_ieee80211_tag_pasn_params_group_and_key_present;
4636static int hf_ieee80211_tag_pasn_parameters_reserved;
4637static int hf_ieee80211_tag_pasn_parameters_wrapped_fmt;
4638static int hf_ieee80211_tag_pasn_comeback_after;
4639static int hf_ieee80211_tag_pasn_cookie_length;
4640static int hf_ieee80211_tag_pasn_cookie;
4641static int hf_ieee80211_tag_pasn_finite_cyclic_group_id;
4642static int hf_ieee80211_tag_pasn_ephemeral_public_key_len;
4643static int hf_ieee80211_tag_pasn_ephemeral_public_key;
4644static int hf_ieee80211_pasn_auth1_frame_len;
4645static int hf_ieee80211_pasn_auth2_frame_len;
4646
4647/* az: Secure LTF Parameters */
4648static int hf_ieee80211_tag_secure_ltf_params_counter;
4649static int hf_ieee80211_tag_secure_ltf_generation_sac;
4650static int hf_ieee80211_tag_secure_ltf_management_sac;
4651static int hf_ieee80211_tag_secure_ltf_result_ltf_ofs;
4652
4653/* az: ista and rsta availability details */
4654static int hf_ieee80211_ftm_ista_availability_count;
4655static int hf_ieee80211_ftm_ista_availability_reserved;
4656static int hf_ieee80211_ftm_ista_avail_bits;
4657static int hf_ieee80211_ftm_ista_avail_pad;
4658
4659static int hf_ieee80211_ftm_rsta_header;
4660static int hf_ieee80211_ftm_rsta_count;
4661static int hf_ieee80211_ftm_rsta_avail_window_bcast_fmt;
4662static int hf_ieee80211_ftm_rsta_partial_tsf_timer1;
4663static int hf_ieee80211_ftm_rsta_duration1;
4664static int hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1;
4665static int hf_ieee80211_ftm_rsta_periodicity1;
4666static int hf_ieee80211_ftm_rsta_partial_tsf_timer;
4667static int hf_ieee80211_ftm_rsta_duration;
4668static int hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved;
4669static int hf_ieee80211_ftm_rsta_periodicity;
4670static int hf_ieee80211_ftm_rsta_format_and_bandwidth;
4671static int hf_ieee80211_ftm_rsta_reserved;
4672static int hf_ieee80211_ftm_rsta_avail_subfield_short;
4673static int hf_ieee80211_ftm_rsta_avail_subfield_long;
4674
4675/* be: Multi-link elements and other fields */
4676static int hf_ieee80211_eht_multi_link_control;
4677static int hf_ieee80211_eht_multi_link_control_type;
4678static int hf_ieee80211_eht_multi_link_control_reserved;
4679static int hf_ieee80211_eht_multi_link_control_link_id_present;
4680static int hf_ieee80211_eht_multi_link_control_bss_parms_ch_count;
4681static int hf_ieee80211_eht_multi_link_control_medium_sync_delay;
4682static int hf_ieee80211_eht_multi_link_control_eml_capa;
4683static int hf_ieee80211_eht_multi_link_control_mld_capa;
4684static int hf_ieee80211_eht_multi_link_control_basic_mld_id_present;
4685static int hf_ieee80211_eht_multi_link_control_ext_mld_capa;
4686static int hf_ieee80211_eht_multi_link_control_bitmap_reserved;
4687static int hf_ieee80211_eht_multi_link_control_probe_mld_id_present;
4688static int hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present;
4689static int hf_ieee80211_eht_multi_link_control_probe_reserved;
4690static int hf_ieee80211_eht_multi_link_control_reconfig_mld_mac;
4691static int hf_ieee80211_eht_multi_link_control_reconfig_eml_capa;
4692static int hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper;
4693static int hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper;
4694static int hf_ieee80211_eht_multi_link_control_reconfig_reserved;
4695static int hf_ieee80211_eht_multi_link_control_tdls_reserved;
4696static int hf_ieee80211_eht_multi_link_control_prio_access_reserved;
4697static int hf_ieee80211_eht_common_field_length;
4698static int hf_ieee80211_eht_common_field_mld_mac;
4699static int hf_ieee80211_eht_common_field_link_id_field;
4700static int hf_ieee80211_eht_common_info_link_id;
4701static int hf_ieee80211_eht_common_info_link_id_reserved;
4702static int hf_ieee80211_eht_common_field_bss_param_change_count;
4703static int hf_ieee80211_eht_common_field_medium_sync_field;
4704static int hf_ieee80211_eht_common_info_medium_sync_duration;
4705static int hf_ieee80211_eht_common_info_medium_sync_threshold;
4706static int hf_ieee80211_eht_common_info_medium_sync_max_txops;
4707static int hf_ieee80211_eht_common_field_eml_capabilities;
4708static int hf_ieee80211_eht_common_info_eml_capa_emlsr_support;
4709static int hf_ieee80211_eht_common_info_eml_capa_emlsr_emlmr_padding_delay;
4710static int hf_ieee80211_eht_common_info_eml_capa_emlsr_emlmr_transition_delay;
4711static int hf_ieee80211_eht_common_info_eml_capa_emlmr_support;
4712static int hf_ieee80211_eht_common_info_eml_capa_reserved1;
4713static int hf_ieee80211_eht_common_info_eml_capa_transition_timeout;
4714static int hf_ieee80211_eht_common_info_eml_capa_reserved2;
4715static int hf_ieee80211_eht_common_field_mld_capabilities;
4716static int hf_ieee80211_eht_common_info_mld_max_simul_links;
4717static int hf_ieee80211_eht_common_info_mld_srs_support;
4718static int hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg;
4719static int hf_ieee80211_eht_common_info_mld_freq_sep_for_str;
4720static int hf_ieee80211_eht_common_info_mld_aar_support;
4721static int hf_ieee80211_eht_common_info_mld_link_reconf_op_support;
4722static int hf_ieee80211_eht_common_info_mld_aligned_twt_support;
4723static int hf_ieee80211_eht_common_info_mld_reserved;
4724static int hf_ieee80211_eht_common_field_mld_id;
4725static int hf_ieee80211_eht_common_field_ap_mld_mac;
4726static int hf_ieee80211_eht_common_field_ext_mld_capabilities;
4727static int hf_ieee80211_eht_common_info_ext_mld_op_update_support;
4728static int hf_ieee80211_eht_common_info_ext_mld_max_simul_links;
4729static int hf_ieee80211_eht_common_info_ext_mld_nstr_status_support;
4730static int hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support;
4731static int hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support;
4732static int hf_ieee80211_eht_common_info_ext_mld_reserved;
4733static int hf_ieee80211_eht_multi_link_subelt_tag;
4734static int hf_ieee80211_eht_multi_link_subelt_len;
4735static int hf_ieee80211_eht_multi_link_type_0_link_count;
4736static int hf_ieee80211_eht_multi_link_type_1_link_count;
4737static int hf_ieee80211_eht_multi_link_type_2_link_count;
4738static int hf_ieee80211_eht_multi_link_type_3_link_count;
4739static int hf_ieee80211_eht_multi_link_type_4_link_count;
4740static int hf_ieee80211_eht_multi_link_link_id_list;
4741static int hf_ieee80211_eht_profile_sta_control;
4742static int hf_ieee80211_eht_profile_link_id;
4743static int hf_ieee80211_eht_profile_complete_profile;
4744static int hf_ieee80211_eht_profile_mac_address_present;
4745static int hf_ieee80211_eht_profile_beacon_interval_present;
4746static int hf_ieee80211_eht_profile_tsf_offset_present;
4747static int hf_ieee80211_eht_profile_dtim_info_present;
4748static int hf_ieee80211_eht_profile_nstr_link_pair_present;
4749static int hf_ieee80211_eht_profile_nstr_bitmap_size;
4750static int hf_ieee80211_eht_profile_bss_params_change_count_present;
4751static int hf_ieee80211_eht_profile_reserved;
4752static int hf_ieee80211_eht_profile_probe_reserved;
4753static int hf_ieee80211_eht_profile_removal_timer_present;
4754static int hf_ieee80211_eht_profile_reconfig_operation_type;
4755static int hf_ieee80211_eht_profile_operation_para_present;
4756static int hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size;
4757static int hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present;
4758static int hf_ieee80211_eht_profile_reconfig_reserved;
4759static int hf_ieee80211_eht_profile_prio_acc_reserved;
4760static int hf_ieee80211_eht_sta_profile_info_len;
4761static int hf_ieee80211_eht_sta_profile_info_mac;
4762static int hf_ieee80211_eht_sta_profile_info_beacon;
4763static int hf_ieee80211_eht_sta_profile_info_tsf_offset;
4764static int hf_ieee80211_eht_sta_profile_info_dtim_count;
4765static int hf_ieee80211_eht_sta_profile_info_dtim_period;
4766static int hf_ieee80211_eht_sta_profile_info_bitmap;
4767static int hf_ieee80211_eht_sta_profile_bss_params_change_count;
4768static int hf_ieee80211_eht_sta_profile_removal_timer;
4769static int hf_ieee80211_eht_sta_profile_presence_indi;
4770static int hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present;
4771static int hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present;
4772static int hf_ieee80211_eht_sta_profile_presence_indi_reserved;
4773static int hf_ieee80211_eht_sta_profile_operation_para_info;
4774static int hf_ieee80211_eht_sta_profile_operation_para_info_max_mpdu_length;
4775static int hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length;
4776static int hf_ieee80211_eht_sta_profile_operation_para_info_pad;
4777static int hf_ieee80211_eht_operation_parameters;
4778static int hf_ieee80211_eht_basic_eht_mcs_nss_set;
4779static int hf_ieee80211_eht_operation_control_chan_width;
4780static int hf_ieee80211_eht_operation_control_reserved;
4781static int hf_ieee80211_eht_operation_info_present;
4782static int hf_ieee80211_eht_operation_subchannel_bitmap_present;
4783static int hf_ieee80211_eht_operation_default_pe_duration;
4784static int hf_ieee80211_eht_operation_group_addressed_bu_indication_limit;
4785static int hf_ieee80211_eht_operation_group_addressed_bu_indication_exp;
4786static int hf_ieee80211_eht_operation_mcs15_disable;
4787static int hf_ieee80211_eht_operation_reserved;
4788static int hf_ieee80211_eht_operation_control;
4789static int hf_ieee80211_eht_operation_ccfs0;
4790static int hf_ieee80211_eht_operation_ccfs1;
4791static int hf_ieee80211_eht_operation_disabled_bitmap;
4792static int hf_ieee80211_eht_mac_capabilities;
4793static int hf_ieee80211_eht_mac_capa_epcs_prio_access_support;
4794static int hf_ieee80211_eht_mac_capa_eht_om_control_support;
4795static int hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support;
4796static int hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support;
4797static int hf_ieee80211_eht_mac_capa_restricted_twt_support;
4798static int hf_ieee80211_eht_mac_capa_scs_traffic_description_support;
4799static int hf_ieee80211_eht_mac_capa_maximum_mpdu_length;
4800static int hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext;
4801static int hf_ieee80211_eht_mac_capa_eht_trs_support;
4802static int hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode;
4803static int hf_ieee80211_eht_mac_capa_two_bqrs_support;
4804static int hf_ieee80211_eht_mac_capa_eht_link_adaptation_support;
4805static int hf_ieee80211_eht_mac_capa_unsolicited_epcs_update;
4806static int hf_ieee80211_eht_mac_capa_reserved;
4807static int hf_ieee80211_eht_phy_bits_0_15;
4808static int hf_ieee80211_eht_phy_bits_0_15_reserved;
4809static int hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz;
4810static int hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz;
4811static int hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi;
4812static int hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo;
4813static int hf_ieee80211_eht_phy_bits_0_15_su_beamformer;
4814static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee;
4815static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz;
4816static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz;
4817static int hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz;
4818static int hf_ieee80211_eht_phy_bits_16_31;
4819static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz;
4820static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz;
4821static int hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz;
4822static int hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback;
4823static int hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback;
4824static int hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck;
4825static int hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck;
4826static int hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck;
4827static int hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck;
4828static int hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback;
4829static int hf_ieee80211_eht_phy_bits_32_39;
4830static int hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo;
4831static int hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support;
4832static int hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support;
4833static int hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi;
4834static int hf_ieee80211_eht_phy_bits_32_39_max_nc;
4835static int hf_ieee80211_eht_phy_bits_40_63;
4836static int hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck;
4837static int hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support;
4838static int hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support;
4839static int hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present;
4840static int hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding;
4841static int hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs;
4842static int hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15;
4843static int hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz;
4844static int hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw;
4845static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz;
4846static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz;
4847static int hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz;
4848static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz;
4849static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz;
4850static int hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz;
4851static int hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit;
4852static int hf_ieee80211_eht_phy_bits_64_71;
4853static int hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup;
4854static int hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup;
4855static int hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support;
4856static int hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo;
4857static int hf_ieee80211_eht_phy_bits_64_71_20m_mru_support;
4858static int hf_ieee80211_eht_phy_bits_64_71_reserved;
4859static int hf_ieee80211_eht_supported_mcs_nss_bytes;
4860static int hf_ieee80211_eht_mcs_and_nss_non_ap;
4861static int hf_ieee80211_eht_rx_max_nss_20mhz_0_7;
4862static int hf_ieee80211_eht_tx_max_nss_20mhz_0_7;
4863static int hf_ieee80211_eht_rx_max_nss_20mhz_8_9;
4864static int hf_ieee80211_eht_tx_max_nss_20mhz_8_9;
4865static int hf_ieee80211_eht_rx_max_nss_20mhz_10_11;
4866static int hf_ieee80211_eht_tx_max_nss_20mhz_10_11;
4867static int hf_ieee80211_eht_rx_max_nss_20mhz_12_13;
4868static int hf_ieee80211_eht_tx_max_nss_20mhz_12_13;
4869static int hf_ieee80211_eht_le_80_rx_max_nss_0_9;
4870static int hf_ieee80211_eht_le_80_tx_max_nss_0_9;
4871static int hf_ieee80211_eht_le_80_rx_max_nss_10_11;
4872static int hf_ieee80211_eht_le_80_tx_max_nss_10_11;
4873static int hf_ieee80211_eht_le_80_rx_max_nss_12_13;
4874static int hf_ieee80211_eht_le_80_tx_max_nss_12_13;
4875static int hf_ieee80211_eht_160_rx_max_nss_0_9;
4876static int hf_ieee80211_eht_160_tx_max_nss_0_9;
4877static int hf_ieee80211_eht_160_rx_max_nss_10_11;
4878static int hf_ieee80211_eht_160_tx_max_nss_10_11;
4879static int hf_ieee80211_eht_160_rx_max_nss_12_13;
4880static int hf_ieee80211_eht_160_tx_max_nss_12_13;
4881static int hf_ieee80211_eht_320_rx_max_nss_0_9;
4882static int hf_ieee80211_eht_320_tx_max_nss_0_9;
4883static int hf_ieee80211_eht_320_rx_max_nss_10_11;
4884static int hf_ieee80211_eht_320_tx_max_nss_10_11;
4885static int hf_ieee80211_eht_320_rx_max_nss_12_13;
4886static int hf_ieee80211_eht_320_tx_max_nss_12_13;
4887static int hf_ieee80211_eht_mcs_and_nss_le_80mhz;
4888static int hf_ieee80211_eht_mcs_and_nss_eq_160mhz;
4889static int hf_ieee80211_eht_mcs_and_nss_eq_320mhz;
4890static int hf_ieee80211_eht_ppe_thresholds;
4891static int hf_ieee80211_eht_ttl_mapping_control;
4892static int hf_ieee80211_eht_ttl_mapping_direction;
4893static int hf_ieee80211_eht_ttl_default_link_mapping;
4894static int hf_ieee80211_eht_ttl_mapping_switch_time_pres;
4895static int hf_ieee80211_eht_ttl_expected_dura_pres;
4896static int hf_ieee80211_eht_ttl_link_mapping_size;
4897static int hf_ieee80211_eht_ttl_mapping_reserved;
4898static int hf_ieee80211_eht_ttl_mapping_presence;
4899static int hf_ieee80211_eht_ttl_mapping_switch_time;
4900static int hf_ieee80211_eht_ttl_mapping_expected_duration;
4901static int hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping;
4902static int hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping;
4903static int hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping;
4904static int hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping;
4905static int hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping;
4906static int hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping;
4907static int hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping;
4908static int hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping;
4909static int hf_ieee80211_eht_multi_link_traffic_control;
4910static int hf_ieee80211_eht_multi_link_tc_bitmap_size;
4911static int hf_ieee80211_eht_multi_link_tc_aid_offset;
4912static int hf_ieee80211_eht_multi_link_tc_reserved;
4913static int hf_ieee80211_eht_multi_link_traffic_indication;
4914static int hf_ieee80211_eht_qos_chars_dirn;
4915static int hf_ieee80211_eht_qos_chars_tid;
4916static int hf_ieee80211_eht_qos_chars_user_prio;
4917static int hf_ieee80211_eht_qos_chars_bitmap;
4918static int hf_ieee80211_eht_qos_chars_linkid;
4919static int hf_ieee80211_eht_qos_chars_resrvd;
4920static int hf_ieee80211_eht_qos_chars_min_svc_interval;
4921static int hf_ieee80211_eht_qos_chars_max_svc_interval;
4922static int hf_ieee80211_eht_qos_chars_min_data_rate;
4923static int hf_ieee80211_eht_qos_chars_delay_bound;
4924static int hf_ieee80211_eht_qos_chars_max_msdu_size;
4925static int hf_ieee80211_eht_qos_chars_service_start_time;
4926static int hf_ieee80211_eht_qos_chars_service_start_time_linkid;
4927static int hf_ieee80211_eht_qos_chars_mean_data_rate;
4928static int hf_ieee80211_eht_qos_chars_burst_size;
4929static int hf_ieee80211_eht_qos_chars_msdu_lifetime;
4930static int hf_ieee80211_eht_qos_chars_msdu_delivery_ratio;
4931static int hf_ieee80211_eht_qos_chars_msdu_count_exponent;
4932static int hf_ieee80211_eht_qos_chars_medium_time;
4933static int hf_ieee80211_eht_link_id_bitmap;
4934static int hf_ieee80211_eht_aid_bitmap_length;
4935static int hf_ieee80211_eht_aid_bitmap_control;
4936static int hf_ieee80211_eht_aid_bitmap_control_reserved;
4937static int hf_ieee80211_eht_aid_bitmap_control_offset;
4938static int hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap;
4939static int hf_ieee80211_eht_aid_bitmap_aid;
4940static int hf_ieee80211_eht_bw_indi_param;
4941static int hf_ieee80211_eht_bw_indi_param_reserved;
4942static int hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap;
4943static int hf_ieee80211_eht_bw_indi_param_reserved1;
4944static int hf_ieee80211_eht_bw_indi_diabled_bitmap;
4945static int hf_ieee80211_eht_mimo_ctrl_field;
4946static int hf_ieee80211_eht_mimo_ctrl_nc_index;
4947static int hf_ieee80211_eht_mimo_ctrl_nr_index;
4948static int hf_ieee80211_eht_mimo_ctrl_bw;
4949static int hf_ieee80211_eht_mimo_ctrl_grouping;
4950static int hf_ieee80211_eht_mimo_ctrl_feedback_type;
4951static int hf_ieee80211_eht_mimo_ctrl_reserved1;
4952static int hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments;
4953static int hf_ieee80211_eht_mimo_ctrl_first_feedback_segment;
4954static int hf_ieee80211_eht_mimo_ctrl_partial_bw_info;
4955static int hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number;
4956static int hf_ieee80211_eht_mimo_ctrl_codebook_info;
4957static int hf_ieee80211_eht_mimo_ctrl_reserved2;
4958
4959/* be: Compressed beamforming report etc */
4960static int hf_ieee80211_eht_compressed_beamforming_report_snr;
4961static int hf_ieee80211_eht_compressed_beamform_scidx;
4962
4963/* be: MU Exclusive beamforming report */
4964static int hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr;
4965
4966static int hf_ieee80211_eht_eml_control_field;
4967static int hf_ieee80211_eht_eml_control_emlsr_mode;
4968static int hf_ieee80211_eht_eml_control_emlmr_mode;
4969static int hf_ieee80211_eht_eml_control_emlsr_para_update_control;
4970static int hf_ieee80211_eht_eml_control_device_coexist_activities;
4971static int hf_ieee80211_eht_eml_control_reserved;
4972static int hf_ieee80211_eht_eml_control_link_bitmap;
4973static int hf_ieee80211_eht_eml_control_link_enable_id;
4974static int hf_ieee80211_eht_eml_control_mcs_map_count;
4975static int hf_ieee80211_eht_eml_control_mcs_map_count_bw;
4976static int hf_ieee80211_eht_eml_control_mcs_map_count_reserved;
4977static int hf_ieee80211_eht_emlsr_para_update;
4978static int hf_ieee80211_eht_emlsr_para_update_padding_delay;
4979static int hf_ieee80211_eht_emlsr_para_update_tran_delay;
4980static int hf_ieee80211_eht_emlsr_para_update_reserved;
4981
4982static int hf_ieee80211_eht_group_key_data_length;
4983static int hf_ieee80211_eht_reconfig_link_id_info;
4984static int hf_ieee80211_eht_reconfig_link_id;
4985static int hf_ieee80211_eht_reconfig_link_id_reserved;
4986static int hf_ieee80211_eht_reconfig_status_code;
4987
4988static int hf_ieee80211_ff_ant_selection;
4989static int hf_ieee80211_ff_ant_selection_0;
4990static int hf_ieee80211_ff_ant_selection_1;
4991static int hf_ieee80211_ff_ant_selection_2;
4992static int hf_ieee80211_ff_ant_selection_3;
4993static int hf_ieee80211_ff_ant_selection_4;
4994static int hf_ieee80211_ff_ant_selection_5;
4995static int hf_ieee80211_ff_ant_selection_6;
4996static int hf_ieee80211_ff_ant_selection_7;
4997
4998static int * const ieee80211_ff_ant_selection_fields[] = {
4999 &hf_ieee80211_ff_ant_selection_0,
5000 &hf_ieee80211_ff_ant_selection_1,
5001 &hf_ieee80211_ff_ant_selection_2,
5002 &hf_ieee80211_ff_ant_selection_3,
5003 &hf_ieee80211_ff_ant_selection_4,
5004 &hf_ieee80211_ff_ant_selection_5,
5005 &hf_ieee80211_ff_ant_selection_6,
5006 &hf_ieee80211_ff_ant_selection_7,
5007 NULL((void*)0)
5008};
5009
5010static int hf_ieee80211_ff_ext_channel_switch_announcement;
5011static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode;
5012static int hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class;
5013static int hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number;
5014static int hf_ieee80211_ff_ext_channel_switch_announcement_switch_count;
5015
5016static int * const ieee80211_ff_ext_channel_switch_announcement_fields[] = {
5017 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
5018 &hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
5019 &hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
5020 &hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
5021 NULL((void*)0)
5022};
5023
5024static int hf_ieee80211_ff_ht_info;
5025static int hf_ieee80211_ff_ht_info_information_request;
5026static int hf_ieee80211_ff_ht_info_40_mhz_intolerant;
5027static int hf_ieee80211_ff_ht_info_sta_chan_width;
5028static int hf_ieee80211_ff_ht_info_reserved;
5029
5030static int * const ieee80211_ff_ht_info_fields[] = {
5031 &hf_ieee80211_ff_ht_info_information_request,
5032 &hf_ieee80211_ff_ht_info_40_mhz_intolerant,
5033 &hf_ieee80211_ff_ht_info_sta_chan_width,
5034 &hf_ieee80211_ff_ht_info_reserved,
5035 NULL((void*)0)
5036};
5037
5038static int hf_ieee80211_ff_ht_action;
5039
5040static int hf_ieee80211_ff_psmp_sta_info;
5041static int hf_ieee80211_ff_psmp_sta_info_type;
5042static int hf_ieee80211_ff_psmp_sta_info_dtt_start_offset;
5043static int hf_ieee80211_ff_psmp_sta_info_dtt_duration;
5044static int hf_ieee80211_ff_psmp_sta_info_sta_id;
5045static int hf_ieee80211_ff_psmp_sta_info_utt_start_offset;
5046static int hf_ieee80211_ff_psmp_sta_info_utt_duration;
5047static int hf_ieee80211_ff_psmp_sta_info_reserved_small;
5048static int hf_ieee80211_ff_psmp_sta_info_reserved_large;
5049static int hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id;
5050
5051static int hf_ieee80211_ff_mimo_csi_snr;
5052static int hf_ieee80211_ff_mimo_csi_matrices;
5053static int hf_ieee80211_ff_mimo_csi_bf_matrices;
5054static int hf_ieee80211_ff_mimo_csi_cbf_matrices;
5055
5056/*** Begin: 802.11s additions ***/
5057static int hf_ieee80211_mesh_control_field;
5058
5059static int hf_ieee80211_ff_mesh_action;
5060static int hf_ieee80211_ff_multihop_action;
5061static int hf_ieee80211_ff_mesh_flags;
5062static int hf_ieee80211_ff_mesh_ttl;
5063static int hf_ieee80211_ff_mesh_sequence;
5064static int hf_ieee80211_ff_mesh_addr4;
5065static int hf_ieee80211_ff_mesh_addr5;
5066static int hf_ieee80211_ff_mesh_addr6;
5067static int hf_ieee80211_ff_selfprot_action;
5068
5069static int hf_ieee80211_mesh_peering_proto;
5070static int hf_ieee80211_mesh_peering_local_link_id;
5071static int hf_ieee80211_mesh_peering_peer_link_id;
5072
5073static int hf_ieee80211_ff_hwmp_flags;
5074static int hf_ieee80211_ff_hwmp_hopcount;
5075static int hf_ieee80211_ff_hwmp_ttl;
5076static int hf_ieee80211_ff_hwmp_pdid;
5077static int hf_ieee80211_ff_hwmp_orig_sta;
5078static int hf_ieee80211_ff_hwmp_orig_sn;
5079static int hf_ieee80211_ff_hwmp_orig_ext;
5080static int hf_ieee80211_ff_hwmp_lifetime;
5081static int hf_ieee80211_ff_hwmp_metric;
5082static int hf_ieee80211_ff_hwmp_targ_count;
5083static int hf_ieee80211_ff_hwmp_targ_flags;
5084static int hf_ieee80211_ff_hwmp_targ_to_flags;
5085static int hf_ieee80211_ff_hwmp_targ_usn_flags;
5086static int hf_ieee80211_ff_hwmp_targ_sta;
5087static int hf_ieee80211_ff_hwmp_targ_sn;
5088static int hf_ieee80211_ff_hwmp_targ_ext;
5089static int hf_ieee80211_rann_flags;
5090static int hf_ieee80211_rann_root_sta;
5091static int hf_ieee80211_rann_sn;
5092static int hf_ieee80211_rann_interval;
5093
5094static int hf_ieee80211_mesh_channel_switch_ttl;
5095static int hf_ieee80211_mesh_channel_switch_flag;
5096static int hf_ieee80211_mesh_channel_switch_reason_code;
5097static int hf_ieee80211_mesh_channel_switch_precedence_value;
5098static int hf_ieee80211_mesh_chswitch_flag_txrestrict;
5099static int hf_ieee80211_mesh_chswitch_flag_initiator;
5100
5101static int hf_ieee80211_mesh_config_path_sel_protocol;
5102static int hf_ieee80211_mesh_config_path_sel_metric;
5103static int hf_ieee80211_mesh_config_congestion_control;
5104static int hf_ieee80211_mesh_config_sync_method;
5105static int hf_ieee80211_mesh_config_auth_protocol;
5106static int hf_ieee80211_mesh_config_formation_info;
5107static int hf_ieee80211_mesh_config_capability;
5108static int hf_ieee80211_mesh_id;
5109static int hf_ieee80211_mesh_config_cap_accepting;
5110static int hf_ieee80211_mesh_config_cap_mcca_support;
5111static int hf_ieee80211_mesh_config_cap_mcca_enabled;
5112static int hf_ieee80211_mesh_config_cap_forwarding;
5113static int hf_ieee80211_mesh_config_cap_mbca_enabled;
5114static int hf_ieee80211_mesh_config_cap_tbtt_adjusting;
5115static int hf_ieee80211_mesh_config_cap_power_save_level;
5116static int hf_ieee80211_mesh_config_cap_reserved;
5117static int hf_ieee80211_mesh_form_info_conn_to_mesh_gate;
5118static int hf_ieee80211_mesh_form_info_num_of_peerings;
5119static int hf_ieee80211_mesh_form_info_conn_to_as;
5120static int hf_ieee80211_mesh_awake_window;
5121static int hf_ieee80211_mesh_mic;
5122static int hf_ieee80211_mesh_ampe_encrypted_data;
5123
5124static int hf_ieee80211_bcn_timing_rctrl;
5125static int hf_ieee80211_bcn_timing_rctrl_more;
5126static int hf_ieee80211_bcn_timing_rctrl_element_num;
5127static int hf_ieee80211_bcn_timing_rctrl_status_num;
5128static int hf_ieee80211_bcn_timing_info;
5129static int hf_ieee80211_bcn_timing_info_nsta_id;
5130static int hf_ieee80211_bcn_timing_info_nsta_tbtt;
5131static int hf_ieee80211_bcn_timing_info_nsta_bi;
5132
5133static int hf_ieee80211_gann_flags;
5134static int hf_ieee80211_gann_flags_reserved;
5135static int hf_ieee80211_gann_hop_count;
5136static int hf_ieee80211_gann_elem_ttl;
5137static int hf_ieee80211_gann_mesh_gate_addr;
5138static int hf_ieee80211_gann_seq_num;
5139static int hf_ieee80211_gann_interval;
5140
5141static int hf_ieee80211_pxu_pxu_id;
5142static int hf_ieee80211_pxu_pxu_origin_mac;
5143static int hf_ieee80211_pxu_no_proxy_info;
5144static int hf_ieee80211_pxu_proxy_info;
5145static int hf_ieee80211_pxu_proxy_info_flags;
5146static int hf_ieee80211_pxu_proxy_info_flags_delete;
5147static int hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy;
5148static int hf_ieee80211_pxu_proxy_info_flags_lifetime;
5149static int hf_ieee80211_pxu_proxy_info_flags_reserved;
5150static int hf_ieee80211_pxu_proxy_info_ext_mac;
5151static int hf_ieee80211_pxu_proxy_info_seq_num;
5152static int hf_ieee80211_pxu_proxy_info_proxy_mac;
5153static int hf_ieee80211_pxu_proxy_info_lifetime;
5154
5155static int hf_ieee80211_pxuc_pxu_id;
5156static int hf_ieee80211_pxuc_pxu_recip_mac;
5157
5158static int hf_ieee80211_ff_public_action;
5159static int hf_ieee80211_ff_protected_public_action;
5160static int hf_ieee80211_ff_tod;
5161static int hf_ieee80211_ff_toa;
5162static int hf_ieee80211_ff_max_tod_err;
5163static int hf_ieee80211_ff_max_toa_err;
5164
5165/* ************************************************************************* */
5166/* Flags found in the capability field (fixed field) */
5167/* ************************************************************************* */
5168static int hf_ieee80211_ff_capture;
5169static int hf_ieee80211_ff_cf_ess;
5170static int hf_ieee80211_ff_cf_ibss;
5171static int hf_ieee80211_ff_cf_reserved1;
5172static int hf_ieee80211_ff_cf_reserved2;
5173static int hf_ieee80211_ff_cf_privacy;
5174static int hf_ieee80211_ff_cf_preamble;
5175static int hf_ieee80211_ff_cf_critical_update_flag;
5176static int hf_ieee80211_ff_cf_nontran_bss_critical_update_flag;
5177static int hf_ieee80211_ff_cf_spec_man;
5178static int hf_ieee80211_ff_cf_qos;
5179static int hf_ieee80211_ff_cf_short_slot_time;
5180static int hf_ieee80211_ff_cf_apsd;
5181static int hf_ieee80211_ff_cf_radio_measurement;
5182static int hf_ieee80211_ff_cf_epd;
5183static int hf_ieee80211_ff_cf_reserved5;
5184static int hf_ieee80211_ff_cf_reserved6;
5185
5186/* ************************************************************************* */
5187/* A-MSDU fields */
5188/* ************************************************************************* */
5189static int hf_ieee80211_amsdu_subframe;
5190static int hf_ieee80211_amsdu_length;
5191static int hf_ieee80211_amsdu_padding;
5192
5193/* ************************************************************************* */
5194/* Tagged value format fields */
5195/* ************************************************************************* */
5196static int hf_ieee80211_tagged_parameters; /* Tagged payload item */
5197static int hf_ieee80211_tag;
5198static int hf_ieee80211_tag_number;
5199static int hf_ieee80211_tag_length;
5200static int hf_ieee80211_tag_data;
5201static int hf_ieee80211_tag_oui;
5202static int hf_ieee80211_tag_oui_wfa_subtype;
5203static int hf_ieee80211_tag_oui_wfa_action_type;
5204static int hf_ieee80211_tag_ssid;
5205static int hf_ieee80211_tag_supp_rates;
5206static int hf_ieee80211_tag_fh_dwell_time;
5207static int hf_ieee80211_tag_fh_hop_set;
5208static int hf_ieee80211_tag_fh_hop_pattern;
5209static int hf_ieee80211_tag_fh_hop_index;
5210static int hf_ieee80211_tag_ds_param_channel;
5211static int hf_ieee80211_tag_cfp_count;
5212static int hf_ieee80211_tag_cfp_period;
5213static int hf_ieee80211_tag_cfp_max_duration;
5214static int hf_ieee80211_tag_cfp_dur_remaining;
5215static int hf_ieee80211_tim_dtim_count;
5216static int hf_ieee80211_tim_dtim_period;
5217static int hf_ieee80211_tim_bmapctl;
5218static int hf_ieee80211_tim_bmapctl_mcast;
5219static int hf_ieee80211_tim_bmapctl_offset;
5220static int hf_ieee80211_tim_partial_virtual_bitmap;
5221static int hf_ieee80211_tim_aid;
5222static int hf_ieee80211_tag_ibss_atim_window;
5223static int hf_ieee80211_tag_country_info_code;
5224static int hf_ieee80211_tag_country_info_env;
5225static int hf_ieee80211_tag_country_info_pad;
5226static int hf_ieee80211_tag_country_info_fnm;
5227static int hf_ieee80211_tag_country_info_fnm_fcn;
5228static int hf_ieee80211_tag_country_info_fnm_nc;
5229static int hf_ieee80211_tag_country_info_fnm_mtpl;
5230static int hf_ieee80211_tag_country_info_rrc;
5231static int hf_ieee80211_tag_country_info_rrc_oei;
5232static int hf_ieee80211_tag_country_info_rrc_oc;
5233static int hf_ieee80211_tag_country_info_rrc_cc;
5234static int hf_ieee80211_tag_fh_hopping_parameter_prime_radix;
5235static int hf_ieee80211_tag_fh_hopping_parameter_nb_channels;
5236static int hf_ieee80211_tag_fh_hopping_table_flag;
5237static int hf_ieee80211_tag_fh_hopping_table_number_of_sets;
5238static int hf_ieee80211_tag_fh_hopping_table_modulus;
5239static int hf_ieee80211_tag_fh_hopping_table_offset;
5240static int hf_ieee80211_tag_fh_hopping_random_table;
5241static int hf_ieee80211_tag_request;
5242static int hf_ieee80211_tag_extended_request_id;
5243static int hf_ieee80211_tag_extended_request_extension;
5244static int hf_ieee80211_tag_challenge_text;
5245
5246static int hf_ieee80211_oui_qos_subtype;
5247static int hf_ieee80211_oui_qos_mgmt_dialog_token;
5248static int hf_ieee80211_oui_qos_mgmt_resp_control;
5249static int hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more;
5250static int hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset;
5251static int hf_ieee80211_oui_qos_mgmt_rsp_reserved;
5252static int hf_ieee80211_oui_qos_mgmt_rqst_control;
5253static int hf_ieee80211_oui_qos_mgmt_rq_ctrl_more;
5254static int hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset;
5255static int hf_ieee80211_oui_qos_mgmt_rq_reserved;
5256static int hf_ieee80211_oui_qos_mgmt_count;
5257static int hf_ieee80211_dscp_policy_id;
5258static int hf_ieee80211_dscp_policy_status;
5259static int hf_ieee80211_dscp_policy_scs_sts_list;
5260
5261static int hf_ieee80211_tag_he_6ghz_cap_inf;
5262static int hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2;
5263static int hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5;
5264static int hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7;
5265static int hf_ieee80211_tag_he_6ghz_cap_inf_b8;
5266static int hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10;
5267static int hf_ieee80211_tag_he_6ghz_cap_inf_b11;
5268static int hf_ieee80211_tag_he_6ghz_cap_inf_b12;
5269static int hf_ieee80211_tag_he_6ghz_cap_inf_b13;
5270static int hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15;
5271
5272static int hf_ieee80211_tag_ftm_tsf_sync_info;
5273
5274static int * const ieee80211_tag_he_6ghz_cap_inf[] = {
5275 &hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2,
5276 &hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5,
5277 &hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7,
5278 &hf_ieee80211_tag_he_6ghz_cap_inf_b8,
5279 &hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10,
5280 &hf_ieee80211_tag_he_6ghz_cap_inf_b11,
5281 &hf_ieee80211_tag_he_6ghz_cap_inf_b12,
5282 &hf_ieee80211_tag_he_6ghz_cap_inf_b13,
5283 &hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15,
5284 NULL((void*)0)
5285};
5286
5287
5288static int hf_ieee80211_wep_iv;
5289static int hf_ieee80211_wep_iv_weak;
5290static int hf_ieee80211_tkip_extiv;
5291static int hf_ieee80211_ccmp_extiv;
5292static int hf_ieee80211_wep_key;
5293static int hf_ieee80211_wep_icv;
5294static int hf_ieee80211_fc_analysis_pmk;
5295static int hf_ieee80211_fc_analysis_kck;
5296static int hf_ieee80211_fc_analysis_kek;
5297static int hf_ieee80211_fc_analysis_tk;
5298static int hf_ieee80211_fc_analysis_gtk;
5299
5300static int hf_ieee80211_block_ack_control;
5301static int hf_ieee80211_block_ack_control_ack_policy;
5302static int hf_ieee80211_block_ack_control_type;
5303static int hf_ieee80211_block_ack_control_reserved;
5304static int hf_ieee80211_block_ack_control_tid_info;
5305
5306static int hf_ieee80211_block_ack_multi_tid_reserved;
5307static int hf_ieee80211_block_ack_multi_tid_value;
5308static int hf_ieee80211_block_ack_bitmap;
5309static int hf_ieee80211_block_ack_bitmap_missing_frame;
5310static int hf_ieee80211_block_ack_bitmap_last_ack_frame;
5311static int hf_ieee80211_block_ack_gcr_addr;
5312
5313static int hf_ieee80211_block_ack_multi_sta_aid11;
5314static int hf_ieee80211_block_ack_multi_sta_ack_type;
5315static int hf_ieee80211_block_ack_multi_sta_tid;
5316static int hf_ieee80211_block_ack_multi_sta_aid_tid;
5317static int hf_ieee80211_block_ack_multi_sta_reserved;
5318static int hf_ieee80211_block_ack_multi_sta_ra;
5319
5320static int hf_ieee80211_tag_measure_request_measurement_mode;
5321static int hf_ieee80211_tag_measure_request_bssid;
5322
5323static int hf_ieee80211_tag_measure_request_subelement_length;
5324static int hf_ieee80211_tag_measure_request_beacon_sub_id;
5325static int hf_ieee80211_tag_measure_request_beacon_sub_ssid;
5326static int hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition;
5327static int hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset;
5328static int hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail;
5329static int hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request;
5330static int hf_ieee80211_tag_measure_request_beacon_unknown;
5331
5332static int hf_ieee80211_tag_measure_request_channel_load_sub_id;
5333static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition;
5334static int hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref;
5335
5336static int hf_ieee80211_tag_measure_request_noise_histogram_sub_id;
5337static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition;
5338static int hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref;
5339
5340static int hf_ieee80211_tag_measure_request_frame_request_type;
5341static int hf_ieee80211_tag_measure_request_mac_address;
5342static int hf_ieee80211_tag_measure_request_peer_mac_address;
5343static int hf_ieee80211_tag_measure_request_group_id;
5344
5345static int hf_ieee80211_tag_measure_request_location_subject;
5346static int hf_ieee80211_tag_measure_request_civic_location_type;
5347static int hf_ieee80211_tag_measure_request_location_service_interval_units;
5348static int hf_ieee80211_tag_measure_request_location_service_interval;
5349
5350static int hf_ieee80211_tag_measure_request_unknown;
5351
5352static int hf_ieee80211_ht_pren_type;
5353static int hf_ieee80211_ht_pren_unknown;
5354
5355static int hf_ieee80211_ht_cap;
5356static int hf_ieee80211_ht_vs_cap;
5357static int hf_ieee80211_ht_ldpc_coding;
5358static int hf_ieee80211_ht_chan_width;
5359static int hf_ieee80211_ht_sm_pwsave;
5360static int hf_ieee80211_ht_green;
5361static int hf_ieee80211_ht_short20;
5362static int hf_ieee80211_ht_short40;
5363static int hf_ieee80211_ht_tx_stbc;
5364static int hf_ieee80211_ht_rx_stbc;
5365static int hf_ieee80211_ht_reserved_b10;
5366static int hf_ieee80211_ht_max_amsdu;
5367static int hf_ieee80211_ht_dss_cck_40;
5368static int hf_ieee80211_ht_reserved_b13;
5369static int hf_ieee80211_ht_40_mhz_intolerant;
5370static int hf_ieee80211_ht_reserved_b15;
5371
5372static int hf_ieee80211_ext_bss_mu_mimo_capable_sta_count;
5373static int hf_ieee80211_ext_bss_ss_underutilization;
5374static int hf_ieee80211_ext_bss_observable_sec_20mhz_utilization;
5375static int hf_ieee80211_ext_bss_observable_sec_40mhz_utilization;
5376static int hf_ieee80211_ext_bss_observable_sec_80mhz_utilization;
5377static int hf_ieee80211_wide_bw_new_channel_width;
5378static int hf_ieee80211_wide_bw_new_channel_center_freq_segment0;
5379static int hf_ieee80211_wide_bw_new_channel_center_freq_segment1;
5380
5381static int hf_ieee80211_operat_notification_mode;
5382static int hf_ieee80211_operat_mode_field_channel_width;
5383static int hf_ieee80211_operat_mode_field_160_80plus80_bw;
5384static int hf_ieee80211_operat_mode_field_no_ldpc;
5385static int hf_ieee80211_operat_mode_field_rxnss;
5386static int hf_ieee80211_operat_mode_field_rxnsstype;
5387
5388static int hf_ieee80211_tbtt_info;
5389static int hf_ieee80211_tbtt_filtered_nap;
5390static int hf_ieee80211_tbtt_info_count;
5391static int hf_ieee80211_tbtt_info_length;
5392
5393static int hf_ieee80211_tbtt_operating_class;
5394static int hf_ieee80211_tbtt_channel_number;
5395
5396static int hf_ieee80211_tbtt_offset;
5397static int hf_ieee80211_tbtt_bssid;
5398static int hf_ieee80211_tbtt_short_ssid;
5399static int hf_ieee80211_rnr_bss_params;
5400static int hf_ieee80211_rnr_oct_recommended;
5401static int hf_ieee80211_rnr_same_ssid;
5402static int hf_ieee80211_rnr_multiple_bssid;
5403static int hf_ieee80211_rnr_transmitted_bssid;
5404static int hf_ieee80211_rnr_ess_with_colocated_ap;
5405static int hf_ieee80211_rnr_unsolicited_probe_responses;
5406static int hf_ieee80211_rnr_same_colocated_ap;
5407static int hf_ieee80211_rnr_same_reserved;
5408static int hf_ieee80211_rnr_20mhz_psd_subfield;
5409static int hf_ieee80211_rnr_reserved_data;
5410static int hf_ieee80211_rnr_mld_params;
5411static int hf_ieee80211_rnr_mld_id;
5412static int hf_ieee80211_rnr_mld_link_id;
5413static int hf_ieee80211_rnr_mld_bss_params_change_count;
5414static int hf_ieee80211_rnr_mld_all_updates_included;
5415static int hf_ieee80211_rnr_mld_disabled_link_indication;
5416static int hf_ieee80211_rnr_mld_reserved;
5417
5418static int hf_ieee80211_ampduparam;
5419static int hf_ieee80211_ampduparam_vs;
5420static int hf_ieee80211_ampduparam_mpdu;
5421static int hf_ieee80211_ampduparam_mpdu_start_spacing;
5422static int hf_ieee80211_ampduparam_reserved;
5423
5424static int hf_ieee80211_beacon_sequence;
5425static int hf_ieee80211_pentapartial_timestamp;
5426static int hf_ieee80211_tack_next_twt_info;
5427static int hf_ieee80211_tack_next_twt;
5428static int hf_ieee80211_tack_flow_identifier;
5429
5430static int hf_ieee80211_ff_s1g_action;
5431static int hf_ieee80211_ff_prot_s1g_action;
5432static int hf_ieee80211_ff_s1g_timestamp;
5433static int hf_ieee80211_ff_s1g_change_sequence;
5434static int hf_ieee80211_ff_s1g_next_tbtt;
5435static int hf_ieee80211_ff_s1g_compressed_ssid;
5436static int hf_ieee80211_ff_s1g_access_network_options;
5437
5438static int hf_ieee80211_s1g_sync_control;
5439static int hf_ieee80211_s1g_sync_control_uplink_sync_request;
5440static int hf_ieee80211_s1g_sync_control_time_slot_protection_request;
5441static int hf_ieee80211_s1g_sync_control_reserved;
5442
5443static int hf_ieee80211_s1g_sector_id_index;
5444static int hf_ieee80211_s1g_sector_id_preferred_sector_id;
5445static int hf_ieee80211_s1g_sector_id_snr;
5446static int hf_ieee80211_s1g_sector_id_receive_sector_bitmap;
5447
5448static int hf_ieee80211_s1g_twt_information_control;
5449static int hf_ieee80211_s1g_twt_flow_identifier;
5450static int hf_ieee80211_s1g_twt_response_required;
5451static int hf_ieee80211_s1g_twt_next_twt_request;
5452static int hf_ieee80211_s1g_twt_next_twt_subfield_size;
5453static int hf_ieee80211_s1g_twt_reserved;
5454static int hf_ieee80211_s1g_twt_next_twt_32;
5455static int hf_ieee80211_s1g_twt_next_twt_48;
5456static int hf_ieee80211_s1g_twt_next_twt_64;
5457
5458static int hf_ieee80211_s1g_update_edca_info;
5459static int hf_ieee80211_s1g_update_edca_override;
5460static int hf_ieee80211_s1g_update_edca_ps_poll_aci;
5461static int hf_ieee80211_s1g_update_edca_raw_aci;
5462static int hf_ieee80211_s1g_update_edca_sta_type;
5463static int hf_ieee80211_s1g_update_edca_reserved;
5464
5465static int hf_ieee80211_s1g_cap_byte1;
5466static int hf_ieee80211_s1g_cap_byte2;
5467static int hf_ieee80211_s1g_cap_byte3;
5468static int hf_ieee80211_s1g_cap_byte4;
5469static int hf_ieee80211_s1g_cap_byte5;
5470static int hf_ieee80211_s1g_cap_byte6;
5471static int hf_ieee80211_s1g_cap_byte7;
5472static int hf_ieee80211_s1g_cap_byte8;
5473static int hf_ieee80211_s1g_cap_byte9;
5474static int hf_ieee80211_s1g_cap_byte10;
5475static int hf_ieee80211_s1g_cap_s1g_long_support;
5476static int hf_ieee80211_s1g_cap_short_gi_for_1_mhz;
5477static int hf_ieee80211_s1g_cap_short_gi_for_2_mhz;
5478static int hf_ieee80211_s1g_cap_short_gi_for_4_mhz;
5479static int hf_ieee80211_s1g_cap_short_gi_for_8_mhz;
5480static int hf_ieee80211_s1g_cap_short_gi_for_16_mhz;
5481static int hf_ieee80211_s1g_cap_supported_channel_width;
5482static int hf_ieee80211_s1g_cap_rx_ldpc;
5483static int hf_ieee80211_s1g_cap_tx_stbc;
5484static int hf_ieee80211_s1g_cap_rx_stbc;
5485static int hf_ieee80211_s1g_cap_su_beamformer_capable;
5486static int hf_ieee80211_s1g_cap_su_beamformee_capable;
5487static int hf_ieee80211_s1g_cap_beamformee_sts_capability;
5488static int hf_ieee80211_s1g_cap_number_sounding_dimensions;
5489static int hf_ieee80211_s1g_cap_mu_beamformer_capable;
5490static int hf_ieee80211_s1g_cap_mu_beamformee_capable;
5491static int hf_ieee80211_s1g_cap_htc_vht_capable;
5492static int hf_ieee80211_s1g_cap_travelling_pilot_support;
5493static int hf_ieee80211_s1g_cap_rd_responder;
5494static int hf_ieee80211_s1g_cap_ht_delayed_block_ack;
5495static int hf_ieee80211_s1g_cap_maximum_mpdu_length;
5496static int hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp;
5497static int hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing;
5498static int hf_ieee80211_s1g_cap_uplink_sync_capable;
5499static int hf_ieee80211_s1g_cap_dynamic_aid;
5500static int hf_ieee80211_s1g_cap_bat_support;
5501static int hf_ieee80211_s1g_cap_tim_ade_support;
5502static int hf_ieee80211_s1g_cap_non_tim_support;
5503static int hf_ieee80211_s1g_cap_group_aid_support;
5504static int hf_ieee80211_s1g_cap_sta_type_support;
5505static int hf_ieee80211_s1g_cap_centralized_authentication_control;
5506static int hf_ieee80211_s1g_cap_distributed_authentication_control;
5507static int hf_ieee80211_s1g_cap_a_msdu_support;
5508static int hf_ieee80211_s1g_cap_a_mpdu_support;
5509static int hf_ieee80211_s1g_cap_asymmetic_block_ack_support;
5510static int hf_ieee80211_s1g_cap_flow_control_support;
5511static int hf_ieee80211_s1g_cap_sectorized_beam_capable;
5512static int hf_ieee80211_s1g_cap_obss_mitigation_support;
5513static int hf_ieee80211_s1g_cap_fragment_ba_support;
5514static int hf_ieee80211_s1g_cap_ndp_ps_poll_supported;
5515static int hf_ieee80211_s1g_cap_raw_operation_support;
5516static int hf_ieee80211_s1g_cap_page_slicing_support;
5517static int hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support;
5518static int hf_ieee80211_s1g_cap_vht_link_adaptation_capable;
5519static int hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response;
5520static int hf_ieee80211_s1g_cap_duplicate_1_mhz_support;
5521static int hf_ieee80211_s1g_cap_mcs_negotiation_support;
5522static int hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support;
5523static int hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support;
5524static int hf_ieee80211_s1g_cap_unsolicited_dynamic_aid;
5525static int hf_ieee80211_s1g_cap_sector_training_operation_supported;
5526static int hf_ieee80211_s1g_cap_temporary_ps_mode_switch;
5527static int hf_ieee80211_s1g_cap_twt_grouping_support;
5528static int hf_ieee80211_s1g_cap_bdt_capable;
5529static int hf_ieee80211_s1g_cap_color;
5530static int hf_ieee80211_s1g_cap_twt_requester_support;
5531static int hf_ieee80211_s1g_cap_twt_responder_support;
5532static int hf_ieee80211_s1g_cap_pv1_frame_support;
5533static int hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable;
5534static int hf_ieee80211_s1g_cap_reserved;
5535static int hf_ieee80211_s1g_mcs_and_nss_set;
5536static int hf_ieee80211_s1g_rx_s1g_mcs_map;
5537static int hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate;
5538static int hf_ieee80211_s1g_tx_s1g_mcs_map;
5539static int hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate;
5540static int hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz;
5541static int hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz;
5542static int hf_ieee80211_s1g_mcs_and_nss_reserved;
5543static int hf_ieee80211_s1g_subchannel_selective_transmission;
5544static int hf_ieee80211_s1g_sst_sounding_option;
5545static int hf_ieee80211_s1g_channel_activity_bitmap;
5546static int hf_ieee80211_s1g_ul_activity;
5547static int hf_ieee80211_s1g_dl_activity;
5548static int hf_ieee80211_s1g_max_trans_width;
5549static int hf_ieee80211_s1g_activity_start_time;
5550static int hf_ieee80211_s1g_sst_sounding_option1;
5551static int hf_ieee80211_s1g_channel_activity_bitmap1;
5552static int hf_ieee80211_s1g_sounding_start_time_present;
5553static int hf_ieee80211_s1g_channel_activity_reserved;
5554static int hf_ieee80211_s1g_max_trans_width1;
5555static int hf_ieee80211_s1g_sounding_start_time;
5556static int hf_ieee80211_s1g_open_loop_link_margin;
5557static int hf_ieee80211_s1g_raw_control;
5558static int hf_ieee80211_s1g_raw_type;
5559static int hf_ieee80211_s1g_raw_type_options;
5560static int hf_ieee80211_s1g_raw_start_time_indication;
5561static int hf_ieee80211_s1g_raw_raw_group_indication;
5562static int hf_ieee80211_s1g_raw_channel_indication_preference;
5563static int hf_ieee80211_s1g_raw_periodic_raw_indication;
5564static int hf_ieee80211_s1g_raw_slot_def;
5565static int hf_ieee80211_s1g_slot_def_format_indication;
5566static int hf_ieee80211_s1g_slot_def_cross_slot_boundary;
5567static int hf_ieee80211_s1g_slot_def_slot_duration_count8;
5568static int hf_ieee80211_s1g_slot_def_num_slots6;
5569static int hf_ieee80211_s1g_slot_def_slot_duration_count11;
5570static int hf_ieee80211_s1g_slot_def_num_slots3;
5571static int hf_ieee80211_s1g_raw_start_time;
5572static int hf_ieee80211_s1g_raw_group_subfield;
5573static int hf_ieee80211_s1g_raw_group_page_index;
5574static int hf_ieee80211_s1g_raw_group_start_aid;
5575static int hf_ieee80211_s1g_raw_group_end_aid;
5576static int hf_ieee80211_s1g_raw_channel_indication;
5577static int hf_ieee80211_s1g_raw_ci_channel_activity_bitmap;
5578static int hf_ieee80211_s1g_raw_ci_max_trans_width;
5579static int hf_ieee80211_s1g_raw_ci_ul_activity;
5580static int hf_ieee80211_s1g_raw_ci_dl_activity;
5581static int hf_ieee80211_s1g_raw_ci_reserved;
5582static int hf_ieee80211_s1g_raw_praw_periodicity;
5583static int hf_ieee80211_s1g_raw_praw_validity;
5584static int hf_ieee80211_s1g_raw_praw_start_offset;
5585static int hf_ieee80211_s1g_page_slice_page_period;
5586static int hf_ieee80211_s1g_page_slice_control;
5587static int hf_ieee80211_s1g_page_slice_page_index;
5588static int hf_ieee80211_s1g_page_slice_page_slice_length;
5589static int hf_ieee80211_s1g_page_slice_page_slice_count;
5590static int hf_ieee80211_s1g_page_slice_block_offset;
5591static int hf_ieee80211_s1g_page_slice_tim_offset;
5592static int hf_ieee80211_s1g_page_slice_reserved;
5593static int hf_ieee80211_s1g_page_slice_page_bitmap;
5594static int hf_ieee80211_s1g_aid_request_mode;
5595static int hf_ieee80211_s1g_aid_request_interval_present;
5596static int hf_ieee80211_s1g_aid_request_per_sta_address_present;
5597static int hf_ieee80211_s1g_aid_request_service_characteristic_present;
5598static int hf_ieee80211_s1g_aid_request_non_tim_mode_switch;
5599static int hf_ieee80211_s1g_aid_request_tim_mode_switch;
5600static int hf_ieee80211_s1g_aid_request_group_address_present;
5601static int hf_ieee80211_s1g_aid_request_reserved;
5602static int hf_ieee80211_s1g_aid_request_interval;
5603static int hf_ieee80211_s1g_aid_request_characteristic_sensor;
5604static int hf_ieee80211_s1g_aid_request_characteristic_offload;
5605static int hf_ieee80211_s1g_aid_request_characteristic_official_service;
5606static int hf_ieee80211_s1g_aid_request_characteristic_reserved;
5607static int hf_ieee80211_s1g_aid_req_peer_sta_addr;
5608static int hf_ieee80211_s1g_aid_request_characteristic;
5609static int hf_ieee80211_s1g_aid_req_group_addr;
5610static int hf_ieee80211_s1g_aid_rsp_aid_group_aid;
5611static int hf_ieee80211_s1g_aid_rsp_aid_switch_count;
5612static int hf_ieee80211_s1g_aid_rsp_aid_response_interval;
5613static int hf_ieee80211_s1g_sector_op_control_16b;
5614static int hf_ieee80211_s1g_sector_op_sectorization_type_b16;
5615static int hf_ieee80211_s1g_sector_op_periodic_training_indicator;
5616static int hf_ieee80211_s1g_sector_op_training_period;
5617static int hf_ieee80211_s1g_sector_op_remaining_beacon_interval;
5618static int hf_ieee80211_s1g_sector_op_reserved_b16;
5619static int hf_ieee80211_s1g_sector_op_control;
5620static int hf_ieee80211_s1g_sector_op_sectorization_type;
5621static int hf_ieee80211_s1g_sector_op_period;
5622static int hf_ieee80211_s1g_sector_op_omni;
5623static int hf_ieee80211_s1g_sector_op_group_info;
5624static int hf_ieee80211_s1g_short_beacon_interval;
5625static int hf_ieee80211_s1g_change_sequence;
5626static int hf_ieee80211_s1g_auth_control_control;
5627static int hf_ieee80211_s1g_auth_control_deferral;
5628static int hf_ieee80211_s1g_auth_control_reserved;
5629static int hf_ieee80211_s1g_auth_control_thresh;
5630static int hf_ieee80211_s1g_auth_control_thresh_tus;
5631static int hf_ieee80211_s1g_auth_slot_duration;
5632static int hf_ieee80211_s1g_auth_max_trans_int;
5633static int hf_ieee80211_s1g_auth_min_trans_int;
5634static int hf_ieee80211_s1g_tsf_timer_accuracy;
5635static int hf_ieee80211_s1g_relay_control;
5636static int hf_ieee80211_s1g_relay_control_rootap_bssid;
5637static int hf_ieee80211_s1g_relay_function_activation_mode;
5638static int hf_ieee80211_s1g_relay_function_direction;
5639static int hf_ieee80211_s1g_relay_function_enable_relay_function;
5640static int hf_ieee80211_s1g_relay_function_stas_present_indic;
5641static int hf_ieee80211_s1g_relay_function_reserved;
5642static int hf_ieee80211_s1g_number_of_stas;
5643static int hf_ieee80211_s1g_initiator_mac_address;
5644static int hf_ieee80211_s1g_address_count;
5645static int hf_ieee80211_s1g_reachable_add_remove;
5646static int hf_ieee80211_s1g_reachable_relay_capable;
5647static int hf_ieee80211_s1g_reachable_reserved;
5648static int hf_ieee80211_s1g_reachable_mac_address;
5649static int hf_ieee80211_s1g_relay_discovery_control;
5650static int hf_ieee80211_s1g_min_data_rate_included;
5651static int hf_ieee80211_s1g_mean_data_rate_included;
5652static int hf_ieee80211_s1g_max_data_rate_included;
5653static int hf_ieee80211_s1g_delay_and_min_phy_rate;
5654static int hf_ieee80211_s1g_information_not_available;
5655static int hf_ieee80211_s1g_relay_discovery_reserved;
5656static int hf_ieee80211_s1g_relay_control_ul_min;
5657static int hf_ieee80211_s1g_relay_control_ul_mean;
5658static int hf_ieee80211_s1g_relay_control_ul_max;
5659static int hf_ieee80211_s1g_relay_control_dl_min;
5660static int hf_ieee80211_s1g_relay_control_dl_mean;
5661static int hf_ieee80211_s1g_relay_control_dl_max;
5662static int hf_ieee80211_s1g_relay_hierarchy_identifier;
5663static int hf_ieee80211_s1g_relay_no_more_relay_flag;
5664static int hf_ieee80211_s1g_aid_entry_mac_addr;
5665static int hf_ieee80211_s1g_aid_entry_assoc_id;
5666static int hf_ieee80211_s1g_beacon_compatibility_info;
5667static int hf_ieee80211_s1g_beacon_interval;
5668static int hf_ieee80211_s1g_tsf_completion;
5669static int hf_ieee80211_s1g_channel_width;
5670static int hf_ieee80211_s1g_primary_channel_width;
5671static int hf_ieee80211_s1g_bss_operating_channel_width;
5672static int hf_ieee80211_s1g_primary_channel_location;
5673static int hf_ieee80211_s1g_reserved_b6;
5674static int hf_ieee80211_s1g_mcs10_use;
5675static int hf_ieee80211_s1g_operating_class;
5676static int hf_ieee80211_s1g_primary_channel_number;
5677static int hf_ieee80211_s1g_channel_center_frequency;
5678static int hf_ieee80211_s1g_basic_mcs_and_nss_set;
5679static int hf_ieee80211_s1g_sst_enabled_channel_bitmap;
5680static int hf_ieee80211_s1g_sst_primary_channel_offset;
5681static int hf_ieee80211_s1g_sst_channel_unit;
5682static int hf_ieee80211_s1g_sst_reserved;
5683static int hf_ieee80211_s1g_max_away_duration;
5684static int hf_ieee80211_s1g_tim_bmapctrl;
5685static int hf_ieee80211_s1g_tim_bmapctl_traffic_indicator;
5686static int hf_ieee80211_s1g_tim_page_slice_number;
5687static int hf_ieee80211_s1g_tim_page_index;
5688static int hf_ieee80211_s1g_pvb_block_control_byte;
5689static int hf_ieee80211_s1g_pvb_encoding_mode;
5690static int hf_ieee80211_s1g_pvb_inverse_bitmap;
5691static int hf_ieee80211_s1g_pvb_block_offset;
5692static int hf_ieee80211_s1g_block_bitmap;
5693static int hf_ieee80211_s1g_block_bitmap_sta_aid13;
5694static int hf_ieee80211_s1g_block_bitmap_single_aid;
5695static int hf_ieee80211_s1g_block_bitmap_olb_length;
5696static int hf_ieee80211_s1g_block_bitmap_ade;
5697static int hf_ieee80211_s1g_block_bitmap_ewl;
5698static int hf_ieee80211_s1g_block_bitmap_len;
5699static int hf_ieee80211_s1g_block_bitmap_ade_bytes;
5700static int hf_ieee80211_s1g_probe_response_group_bitmap;
5701static int hf_ieee80211_s1g_probe_resp_subfield_0;
5702static int hf_ieee80211_pv1_probe_response_req_full_ssid;
5703static int hf_ieee80211_pv1_probe_response_req_next_tbtt;
5704static int hf_ieee80211_pv1_probe_response_req_access_network_option;
5705static int hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility;
5706static int hf_ieee80211_pv1_probe_response_req_supported_rates;
5707static int hf_ieee80211_pv1_probe_response_req_s1g_capability;
5708static int hf_ieee80211_pv1_probe_response_req_s1g_operation;
5709static int hf_ieee80211_pv1_probe_response_req_rsn;
5710static int hf_ieee80211_s1g_el_op_max_awake_duration;
5711static int hf_ieee80211_s1g_el_op_recovery_time_duration;
5712static int hf_ieee80211_s1g_sectorized_group_id_list;
5713static int hf_ieee80211_s1g_header_comp_control;
5714static int hf_ieee80211_s1g_header_comp_req_resp;
5715static int hf_ieee80211_s1g_header_comp_store_a3;
5716static int hf_ieee80211_s1g_header_comp_store_a4;
5717static int hf_ieee80211_s1g_header_comp_ccmp_update_present;
5718static int hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported;
5719static int hf_ieee80211_s1g_header_comp_reserved;
5720static int hf_ieee80211_s1g_header_comp_a3;
5721static int hf_ieee80211_s1g_header_comp_a4;
5722static int hf_ieee80211_s1g_header_comp_ccmp_update;
5723
5724static int hf_ieee80211_mcsset;
5725static int hf_ieee80211_mcsset_vs;
5726static int hf_ieee80211_mcsset_rx_bitmask;
5727static int hf_ieee80211_mcsset_rx_bitmask_0to7;
5728static int hf_ieee80211_mcsset_rx_bitmask_8to15;
5729static int hf_ieee80211_mcsset_rx_bitmask_16to23;
5730static int hf_ieee80211_mcsset_rx_bitmask_24to31;
5731static int hf_ieee80211_mcsset_rx_bitmask_32;
5732static int hf_ieee80211_mcsset_rx_bitmask_33to38;
5733static int hf_ieee80211_mcsset_rx_bitmask_39to52;
5734static int hf_ieee80211_mcsset_rx_bitmask_53to76;
5735static int hf_ieee80211_mcsset_highest_data_rate;
5736static int hf_ieee80211_mcsset_tx_mcs_set_defined;
5737static int hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal;
5738static int hf_ieee80211_mcsset_tx_max_spatial_streams;
5739static int hf_ieee80211_mcsset_tx_unequal_modulation;
5740
5741static int hf_ieee80211_htex_cap;
5742static int hf_ieee80211_htex_vs_cap;
5743static int hf_ieee80211_htex_reserved_b0_b7;
5744static int hf_ieee80211_htex_mcs;
5745static int hf_ieee80211_htex_htc_support;
5746static int hf_ieee80211_htex_rd_responder;
5747static int hf_ieee80211_htex_reserved_b12_b15;
5748
5749static int hf_ieee80211_txbf;
5750static int hf_ieee80211_txbf_vs;
5751static int hf_ieee80211_txbf_cap;
5752static int hf_ieee80211_txbf_rcv_ssc;
5753static int hf_ieee80211_txbf_tx_ssc;
5754static int hf_ieee80211_txbf_rcv_ndp;
5755static int hf_ieee80211_txbf_tx_ndp;
5756static int hf_ieee80211_txbf_impl_txbf;
5757static int hf_ieee80211_txbf_calib;
5758static int hf_ieee80211_txbf_expl_csi;
5759static int hf_ieee80211_txbf_expl_uncomp_fm;
5760static int hf_ieee80211_txbf_expl_comp_fm;
5761static int hf_ieee80211_txbf_expl_bf_csi;
5762static int hf_ieee80211_txbf_expl_uncomp_fm_feed;
5763static int hf_ieee80211_txbf_expl_comp_fm_feed;
5764static int hf_ieee80211_txbf_csi_num_bf_ant;
5765static int hf_ieee80211_txbf_min_group;
5766static int hf_ieee80211_txbf_uncomp_sm_bf_ant;
5767static int hf_ieee80211_txbf_comp_sm_bf_ant;
5768static int hf_ieee80211_txbf_csi_max_rows_bf;
5769static int hf_ieee80211_txbf_chan_est;
5770static int hf_ieee80211_txbf_resrv;
5771
5772/*** Begin: 802.11n - HT Operation IE ***/
5773static int hf_ieee80211_ht_operation_primary_channel;
5774
5775static int hf_ieee80211_ht_operation_info_delimiter1;
5776static int hf_ieee80211_ht_operation_info_secondary_channel_offset;
5777static int hf_ieee80211_ht_operation_info_sta_channel_width;
5778static int hf_ieee80211_ht_operation_info_rifs_mode;
5779static int hf_ieee80211_ht_operation_info_reserved_b4_b7;
5780
5781static int hf_ieee80211_ht_operation_info_delimiter2;
5782static int hf_ieee80211_ht_operation_info_protection;
5783static int hf_ieee80211_ht_operation_info_non_greenfield_sta_present;
5784static int hf_ieee80211_ht_operation_info_reserved_b11;
5785static int hf_ieee80211_ht_operation_info_obss_non_ht_stas_present;
5786static int hf_ieee80211_ht_operation_info_channel_center_freq_seg_2;
5787static int hf_ieee80211_ht_operation_info_reserved_b21_b23;
5788
5789static int hf_ieee80211_ht_operation_info_delimiter3;
5790static int hf_ieee80211_ht_operation_info_reserved_b24_b29;
5791static int hf_ieee80211_ht_operation_info_dual_beacon;
5792static int hf_ieee80211_ht_operation_info_dual_cts_protection;
5793static int hf_ieee80211_ht_operation_info_stbc_beacon;
5794static int hf_ieee80211_ht_operation_info_reserved_b33_b39;
5795
5796static int hf_ieee80211_ht_operation_mcsset_reserved;
5797/*** End: 802.11n - HT Operation IE ***/
5798
5799static int hf_ieee80211_tag_ap_channel_report_operating_class;
5800static int hf_ieee80211_tag_ap_channel_report_channel_list;
5801
5802static int hf_ieee80211_tag_secondary_channel_offset;
5803
5804static int hf_ieee80211_tag_bss_ap_avg_access_delay;
5805
5806static int hf_ieee80211_tag_antenna_id;
5807
5808static int hf_ieee80211_tag_rsni;
5809
5810static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask;
5811static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0;
5812static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1;
5813static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2;
5814static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3;
5815static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4;
5816static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5;
5817static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6;
5818static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7;
5819static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0;
5820static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1;
5821static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2;
5822static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3;
5823static int hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv;
5824static int hf_ieee80211_tag_bss_avb_adm_cap_up0;
5825static int hf_ieee80211_tag_bss_avb_adm_cap_up1;
5826static int hf_ieee80211_tag_bss_avb_adm_cap_up2;
5827static int hf_ieee80211_tag_bss_avb_adm_cap_up3;
5828static int hf_ieee80211_tag_bss_avb_adm_cap_up4;
5829static int hf_ieee80211_tag_bss_avb_adm_cap_up5;
5830static int hf_ieee80211_tag_bss_avb_adm_cap_up6;
5831static int hf_ieee80211_tag_bss_avb_adm_cap_up7;
5832static int hf_ieee80211_tag_bss_avb_adm_cap_ac0;
5833static int hf_ieee80211_tag_bss_avb_adm_cap_ac1;
5834static int hf_ieee80211_tag_bss_avb_adm_cap_ac2;
5835static int hf_ieee80211_tag_bss_avb_adm_cap_ac3;
5836
5837static int hf_ieee80211_tag_bss_avg_ac_access_delay_be;
5838static int hf_ieee80211_tag_bss_avg_ac_access_delay_bk;
5839static int hf_ieee80211_tag_bss_avg_ac_access_delay_vi;
5840static int hf_ieee80211_tag_bss_avg_ac_access_delay_vo;
5841
5842static int hf_ieee80211_tag_rm_enabled_capabilities;
5843static int hf_ieee80211_tag_rm_enabled_capabilities_b0;
5844static int hf_ieee80211_tag_rm_enabled_capabilities_b1;
5845static int hf_ieee80211_tag_rm_enabled_capabilities_b2;
5846static int hf_ieee80211_tag_rm_enabled_capabilities_b3;
5847static int hf_ieee80211_tag_rm_enabled_capabilities_b4;
5848static int hf_ieee80211_tag_rm_enabled_capabilities_b5;
5849static int hf_ieee80211_tag_rm_enabled_capabilities_b6;
5850static int hf_ieee80211_tag_rm_enabled_capabilities_b7;
5851static int hf_ieee80211_tag_rm_enabled_capabilities_b8;
5852static int hf_ieee80211_tag_rm_enabled_capabilities_b9;
5853static int hf_ieee80211_tag_rm_enabled_capabilities_b10;
5854static int hf_ieee80211_tag_rm_enabled_capabilities_b11;
5855static int hf_ieee80211_tag_rm_enabled_capabilities_b12;
5856static int hf_ieee80211_tag_rm_enabled_capabilities_b13;
5857static int hf_ieee80211_tag_rm_enabled_capabilities_b14;
5858static int hf_ieee80211_tag_rm_enabled_capabilities_b15;
5859static int hf_ieee80211_tag_rm_enabled_capabilities_b16;
5860static int hf_ieee80211_tag_rm_enabled_capabilities_b17;
5861static int hf_ieee80211_tag_rm_enabled_capabilities_b18to20;
5862static int hf_ieee80211_tag_rm_enabled_capabilities_b21to23;
5863static int hf_ieee80211_tag_rm_enabled_capabilities_b24to26;
5864static int hf_ieee80211_tag_rm_enabled_capabilities_b27;
5865static int hf_ieee80211_tag_rm_enabled_capabilities_b28;
5866static int hf_ieee80211_tag_rm_enabled_capabilities_b29;
5867static int hf_ieee80211_tag_rm_enabled_capabilities_b30;
5868static int hf_ieee80211_tag_rm_enabled_capabilities_b31;
5869static int hf_ieee80211_tag_rm_enabled_capabilities_b32;
5870static int hf_ieee80211_tag_rm_enabled_capabilities_b33;
5871static int hf_ieee80211_tag_rm_enabled_capabilities_b34;
5872static int hf_ieee80211_tag_rm_enabled_capabilities_b35;
5873static int hf_ieee80211_tag_rm_enabled_capabilities_o5;
5874
5875static int hf_ieee80211_tag_rcpi;
5876static int hf_ieee80211_tag_multiple_bssid;
5877static int hf_ieee80211_tag_multiple_bssid_subelem_id;
5878static int hf_ieee80211_tag_multiple_bssid_subelem_len;
5879static int hf_ieee80211_tag_multiple_bssid_subelem_reserved;
5880static int hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile;
5881
5882static int hf_ieee80211_tag_20_40_bc;
5883static int hf_ieee80211_tag_20_40_bc_information_request;
5884static int hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant;
5885static int hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request;
5886static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request;
5887static int hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant;
5888static int hf_ieee80211_tag_20_40_bc_reserved;
5889
5890static int hf_ieee80211_tag_intolerant_operating_class;
5891static int hf_ieee80211_tag_intolerant_channel_list;
5892static int hf_ieee80211_tag_intolerant_channel;
5893
5894static int hf_ieee80211_tag_power_constraint_local;
5895
5896static int hf_ieee80211_tag_power_capability_min;
5897static int hf_ieee80211_tag_power_capability_max;
5898
5899static int hf_ieee80211_tag_tpc_report_trsmt_pow;
5900static int hf_ieee80211_tag_tpc_report_link_mrg;
5901static int hf_ieee80211_tag_tpc_report_reserved;
5902
5903static int hf_ieee80211_tag_supported_channels;
5904static int hf_ieee80211_tag_supported_channels_first;
5905static int hf_ieee80211_tag_supported_channels_range;
5906
5907static int hf_ieee80211_csa_channel_switch_mode;
5908static int hf_ieee80211_csa_new_channel_number;
5909static int hf_ieee80211_csa_channel_switch_count;
5910
5911static int hf_ieee80211_tag_measure_request_token;
5912static int hf_ieee80211_tag_measure_request_mode;
5913static int hf_ieee80211_tag_measure_request_mode_parallel;
5914static int hf_ieee80211_tag_measure_request_mode_enable;
5915static int hf_ieee80211_tag_measure_request_mode_request;
5916static int hf_ieee80211_tag_measure_request_mode_report;
5917static int hf_ieee80211_tag_measure_request_mode_duration_mandatory;
5918static int hf_ieee80211_tag_measure_request_mode_reserved;
5919static int hf_ieee80211_tag_measure_request_type;
5920
5921static int hf_ieee80211_tag_measure_request_channel_number;
5922static int hf_ieee80211_tag_measure_request_start_time;
5923static int hf_ieee80211_tag_measure_request_duration;
5924
5925static int hf_ieee80211_tag_measure_request_operating_class;
5926static int hf_ieee80211_tag_measure_request_randomization_interval;
5927
5928static int hf_ieee80211_tag_measure_report_measurement_token;
5929static int hf_ieee80211_tag_measure_report_mode;
5930static int hf_ieee80211_tag_measure_report_mode_late;
5931static int hf_ieee80211_tag_measure_report_mode_incapable;
5932static int hf_ieee80211_tag_measure_report_mode_refused;
5933static int hf_ieee80211_tag_measure_report_mode_reserved;
5934static int hf_ieee80211_tag_measure_report_type;
5935static int hf_ieee80211_tag_measure_report_channel_number;
5936static int hf_ieee80211_tag_measure_report_start_time;
5937static int hf_ieee80211_tag_measure_report_duration;
5938
5939static int hf_ieee80211_tag_measure_basic_map_field;
5940static int hf_ieee80211_tag_measure_map_field_bss;
5941static int hf_ieee80211_tag_measure_map_field_ofdm;
5942static int hf_ieee80211_tag_measure_map_field_unident_signal;
5943static int hf_ieee80211_tag_measure_map_field_radar;
5944static int hf_ieee80211_tag_measure_map_field_unmeasured;
5945static int hf_ieee80211_tag_measure_map_field_reserved;
5946
5947static int hf_ieee80211_tag_measure_cca_busy_fraction;
5948
5949static int hf_ieee80211_tag_measure_rpi_histogram_report;
5950static int hf_ieee80211_tag_measure_rpi_histogram_report_0;
5951static int hf_ieee80211_tag_measure_rpi_histogram_report_1;
5952static int hf_ieee80211_tag_measure_rpi_histogram_report_2;
5953static int hf_ieee80211_tag_measure_rpi_histogram_report_3;
5954static int hf_ieee80211_tag_measure_rpi_histogram_report_4;
5955static int hf_ieee80211_tag_measure_rpi_histogram_report_5;
5956static int hf_ieee80211_tag_measure_rpi_histogram_report_6;
5957static int hf_ieee80211_tag_measure_rpi_histogram_report_7;
5958
5959static int hf_ieee80211_tag_measure_report_operating_class;
5960static int hf_ieee80211_tag_measure_report_channel_load;
5961static int hf_ieee80211_tag_measure_report_frame_info;
5962static int hf_ieee80211_tag_measure_report_frame_info_phy_type;
5963static int hf_ieee80211_tag_measure_report_frame_info_frame_type;
5964static int hf_ieee80211_tag_measure_report_rcpi;
5965static int hf_ieee80211_tag_measure_report_rsni;
5966static int hf_ieee80211_tag_measure_report_bssid;
5967static int hf_ieee80211_tag_measure_report_ant_id;
5968static int hf_ieee80211_tag_measure_report_anpi;
5969static int hf_ieee80211_tag_measure_report_ipi_density_0;
5970static int hf_ieee80211_tag_measure_report_ipi_density_1;
5971static int hf_ieee80211_tag_measure_report_ipi_density_2;
5972static int hf_ieee80211_tag_measure_report_ipi_density_3;
5973static int hf_ieee80211_tag_measure_report_ipi_density_4;
5974static int hf_ieee80211_tag_measure_report_ipi_density_5;
5975static int hf_ieee80211_tag_measure_report_ipi_density_6;
5976static int hf_ieee80211_tag_measure_report_ipi_density_7;
5977static int hf_ieee80211_tag_measure_report_ipi_density_8;
5978static int hf_ieee80211_tag_measure_report_ipi_density_9;
5979static int hf_ieee80211_tag_measure_report_ipi_density_10;
5980static int hf_ieee80211_tag_measure_report_parent_tsf;
5981
5982static int hf_ieee80211_tag_measure_report_subelement_length;
5983static int hf_ieee80211_tag_measure_report_beacon_sub_id;
5984static int hf_ieee80211_tag_measure_report_beacon_unknown;
5985static int hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication;
5986static int hf_ieee80211_tag_measure_reported_frame_frag_id;
5987static int hf_ieee80211_tag_measure_reported_frame_frag_rep_id;
5988static int hf_ieee80211_tag_measure_reported_frame_frag_number;
5989static int hf_ieee80211_tag_measure_reported_frame_frag_more;
5990
5991static int hf_ieee80211_tag_measure_report_lci_sub_id;
5992static int hf_ieee80211_tag_measure_report_lci_lci;
5993static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info;
5994static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move;
5995static int hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number;
5996static int hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor;
5997static int hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty;
5998static int hf_ieee80211_tag_measure_report_lci_urp;
5999static int hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed;
6000static int hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present;
6001static int hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy;
6002static int hf_ieee80211_tag_measure_report_lci_urp_reserved;
6003static int hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative;
6004static int hf_ieee80211_tag_measure_report_lci_unknown;
6005
6006static int hf_ieee80211_tag_measure_report_civic_location_type;
6007static int hf_ieee80211_tag_measure_report_civic_sub_id;
6008static int hf_ieee80211_tag_measure_report_location_civic_country;
6009static int hf_ieee80211_tag_measure_report_location_civic_type;
6010static int hf_ieee80211_tag_measure_report_location_civic_length;
6011static int hf_ieee80211_tag_measure_report_location_civic;
6012
6013static int hf_ieee80211_tag_measure_report_unknown;
6014
6015static int hf_ieee80211_tag_quiet_count;
6016static int hf_ieee80211_tag_quiet_period;
6017static int hf_ieee80211_tag_quiet_duration;
6018static int hf_ieee80211_tag_quiet_offset;
6019
6020static int hf_ieee80211_tag_dfs_owner;
6021static int hf_ieee80211_tag_dfs_recovery_interval;
6022static int hf_ieee80211_tag_dfs_channel_map;
6023static int hf_ieee80211_tag_dfs_channel_number;
6024static int hf_ieee80211_tag_dfs_map;
6025
6026static int hf_ieee80211_tag_erp_info;
6027static int hf_ieee80211_tag_erp_info_erp_present;
6028static int hf_ieee80211_tag_erp_info_use_protection;
6029static int hf_ieee80211_tag_erp_info_barker_preamble_mode;
6030static int hf_ieee80211_tag_erp_info_reserved;
6031
6032static int hf_ieee80211_tag_extended_capabilities;
6033static int hf_ieee80211_tag_extended_capabilities_b0;
6034static int hf_ieee80211_tag_extended_capabilities_b1;
6035static int hf_ieee80211_tag_extended_capabilities_b2;
6036static int hf_ieee80211_tag_extended_capabilities_b3;
6037static int hf_ieee80211_tag_extended_capabilities_b4;
6038static int hf_ieee80211_tag_extended_capabilities_b5;
6039static int hf_ieee80211_tag_extended_capabilities_b6;
6040static int hf_ieee80211_tag_extended_capabilities_b7;
6041static int hf_ieee80211_tag_extended_capabilities_b8;
6042static int hf_ieee80211_tag_extended_capabilities_b9;
6043static int hf_ieee80211_tag_extended_capabilities_b10;
6044static int hf_ieee80211_tag_extended_capabilities_b11;
6045static int hf_ieee80211_tag_extended_capabilities_b12;
6046static int hf_ieee80211_tag_extended_capabilities_b13;
6047static int hf_ieee80211_tag_extended_capabilities_b14;
6048static int hf_ieee80211_tag_extended_capabilities_b15;
6049static int hf_ieee80211_tag_extended_capabilities_b16;
6050static int hf_ieee80211_tag_extended_capabilities_b17;
6051static int hf_ieee80211_tag_extended_capabilities_b18;
6052static int hf_ieee80211_tag_extended_capabilities_b19;
6053static int hf_ieee80211_tag_extended_capabilities_b20;
6054static int hf_ieee80211_tag_extended_capabilities_b21;
6055static int hf_ieee80211_tag_extended_capabilities_b22;
6056static int hf_ieee80211_tag_extended_capabilities_b23;
6057static int hf_ieee80211_tag_extended_capabilities_b24;
6058static int hf_ieee80211_tag_extended_capabilities_b25;
6059static int hf_ieee80211_tag_extended_capabilities_b26;
6060static int hf_ieee80211_tag_extended_capabilities_b27;
6061static int hf_ieee80211_tag_extended_capabilities_b28;
6062static int hf_ieee80211_tag_extended_capabilities_b29;
6063static int hf_ieee80211_tag_extended_capabilities_b30;
6064static int hf_ieee80211_tag_extended_capabilities_b31;
6065static int hf_ieee80211_tag_extended_capabilities_b32;
6066static int hf_ieee80211_tag_extended_capabilities_b33;
6067static int hf_ieee80211_tag_extended_capabilities_b34;
6068static int hf_ieee80211_tag_extended_capabilities_b35;
6069static int hf_ieee80211_tag_extended_capabilities_b36;
6070static int hf_ieee80211_tag_extended_capabilities_b37;
6071static int hf_ieee80211_tag_extended_capabilities_b38;
6072static int hf_ieee80211_tag_extended_capabilities_b39;
6073static int hf_ieee80211_tag_extended_capabilities_b40;
6074static int hf_ieee80211_tag_extended_capabilities_serv_int_granularity;
6075static int hf_ieee80211_tag_extended_capabilities_b44;
6076static int hf_ieee80211_tag_extended_capabilities_b45;
6077static int hf_ieee80211_tag_extended_capabilities_b46;
6078static int hf_ieee80211_tag_extended_capabilities_b47;
6079static int hf_ieee80211_tag_extended_capabilities_b48;
6080static int hf_ieee80211_tag_extended_capabilities_b49;
6081static int hf_ieee80211_tag_extended_capabilities_b50;
6082static int hf_ieee80211_tag_extended_capabilities_b51;
6083static int hf_ieee80211_tag_extended_capabilities_b52;
6084static int hf_ieee80211_tag_extended_capabilities_b53;
6085static int hf_ieee80211_tag_extended_capabilities_b54;
6086static int hf_ieee80211_tag_extended_capabilities_b55;
6087static int hf_ieee80211_tag_extended_capabilities_b56;
6088static int hf_ieee80211_tag_extended_capabilities_b57;
6089static int hf_ieee80211_tag_extended_capabilities_b58;
6090static int hf_ieee80211_tag_extended_capabilities_b59;
6091static int hf_ieee80211_tag_extended_capabilities_b60;
6092static int hf_ieee80211_tag_extended_capabilities_b61;
6093static int hf_ieee80211_tag_extended_capabilities_b62;
6094static int hf_ieee80211_tag_extended_capabilities_b63;
6095/* Used for the two-byte ext-cap field when present */
6096static int hf_ieee80211_tag_extended_capabilities_2;
6097static int hf_ieee80211_tag_extended_capabilities_b56_2;
6098static int hf_ieee80211_tag_extended_capabilities_b57_2;
6099static int hf_ieee80211_tag_extended_capabilities_b58_2;
6100static int hf_ieee80211_tag_extended_capabilities_b59_2;
6101static int hf_ieee80211_tag_extended_capabilities_b60_2;
6102static int hf_ieee80211_tag_extended_capabilities_b61_2;
6103static int hf_ieee80211_tag_extended_capabilities_b62_2;
6104static int hf_ieee80211_tag_extended_capabilities_max_num_msdus;
6105static int hf_ieee80211_tag_extended_capabilities_b65_2;
6106static int hf_ieee80211_tag_extended_capabilities_b66_2;
6107static int hf_ieee80211_tag_extended_capabilities_b67_2;
6108static int hf_ieee80211_tag_extended_capabilities_b68_2;
6109static int hf_ieee80211_tag_extended_capabilities_b69_2;
6110static int hf_ieee80211_tag_extended_capabilities_b70_2;
6111static int hf_ieee80211_tag_extended_capabilities_b71_2;
6112
6113static int hf_ieee80211_tag_extended_capabilities_b72;
6114static int hf_ieee80211_tag_extended_capabilities_b73;
6115static int hf_ieee80211_tag_extended_capabilities_b74;
6116static int hf_ieee80211_tag_extended_capabilities_b75;
6117static int hf_ieee80211_tag_extended_capabilities_b76;
6118static int hf_ieee80211_tag_extended_capabilities_b77;
6119static int hf_ieee80211_tag_extended_capabilities_b78;
6120static int hf_ieee80211_tag_extended_capabilities_b79;
6121static int hf_ieee80211_tag_extended_capabilities_b80;
6122static int hf_ieee80211_tag_extended_capabilities_b81;
6123static int hf_ieee80211_tag_extended_capabilities_b82;
6124static int hf_ieee80211_tag_extended_capabilities_b83;
6125static int hf_ieee80211_tag_extended_capabilities_b84;
6126static int hf_ieee80211_tag_extended_capabilities_b85;
6127static int hf_ieee80211_tag_extended_capabilities_b86;
6128static int hf_ieee80211_tag_extended_capabilities_b87;
6129
6130static int hf_ieee80211_tag_extended_capabilities_b88;
6131static int hf_ieee80211_tag_extended_capabilities_b89;
6132static int hf_ieee80211_tag_extended_capabilities_b90;
6133static int hf_ieee80211_tag_extended_capabilities_b91;
6134static int hf_ieee80211_tag_extended_capabilities_b92;
6135static int hf_ieee80211_tag_extended_capabilities_b93;
6136static int hf_ieee80211_tag_extended_capabilities_b94;
6137static int hf_ieee80211_tag_extended_capabilities_b95;
6138
6139static int hf_ieee80211_tag_extended_capabilities_b96;
6140static int hf_ieee80211_tag_extended_capabilities_b97;
6141static int hf_ieee80211_tag_extended_capabilities_b98;
6142static int hf_ieee80211_tag_extended_capabilities_b99;
6143static int hf_ieee80211_tag_extended_capabilities_b100;
6144static int hf_ieee80211_tag_extended_capabilities_b101;
6145static int hf_ieee80211_tag_extended_capabilities_b102;
6146static int hf_ieee80211_tag_extended_capabilities_b103;
6147static int hf_ieee80211_tag_extended_capabilities_b104;
6148static int hf_ieee80211_tag_extended_capabilities_b105;
6149static int hf_ieee80211_tag_extended_capabilities_reserved2;
6150
6151static int hf_ieee80211_tag_cisco_ccx1_unknown;
6152static int hf_ieee80211_tag_cisco_ccx1_name;
6153static int hf_ieee80211_tag_cisco_ccx1_clients;
6154static int hf_ieee80211_tag_cisco_ccx1_unknown2;
6155
6156static int hf_ieee80211_vs_cisco_ap_name_v2;
6157
6158static int hf_ieee80211_vht_cap;
6159static int hf_ieee80211_vht_max_mpdu_length;
6160static int hf_ieee80211_vht_supported_chan_width_set;
6161static int hf_ieee80211_vht_rx_ldpc;
6162static int hf_ieee80211_vht_short_gi_for_80;
6163static int hf_ieee80211_vht_short_gi_for_160;
6164static int hf_ieee80211_vht_tx_stbc;
6165static int hf_ieee80211_vht_rx_stbc;
6166static int hf_ieee80211_vht_su_beamformer_cap;
6167static int hf_ieee80211_vht_su_beamformee_cap;
6168static int hf_ieee80211_vht_beamformer_antennas;
6169static int hf_ieee80211_vht_sounding_dimensions;
6170static int hf_ieee80211_vht_mu_beamformer_cap;
6171static int hf_ieee80211_vht_mu_beamformee_cap;
6172static int hf_ieee80211_vht_txop_ps;
6173static int hf_ieee80211_vht_var_htc_field;
6174static int hf_ieee80211_vht_max_ampdu;
6175static int hf_ieee80211_vht_link_adaptation_cap;
6176static int hf_ieee80211_vht_rx_pattern;
6177static int hf_ieee80211_vht_tx_pattern;
6178static int hf_ieee80211_vht_ext_nss_bw_support;
6179
6180static int hf_ieee80211_vht_mcsset;
6181
6182static int hf_ieee80211_vht_mcsset_rx_mcs_map;
6183static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss;
6184static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss;
6185static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss;
6186static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss;
6187static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss;
6188static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss;
6189static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss;
6190static int hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss;
6191
6192static int hf_ieee80211_vht_mcsset_max_nsts_total;
6193static int hf_ieee80211_vht_mcsset_rx_highest_long_gi;
6194static int hf_ieee80211_vht_mcsset_extended_nss_bw_capable;
6195static int hf_ieee80211_vht_mcsset_reserved;
6196
6197static int hf_ieee80211_vht_mcsset_tx_mcs_map;
6198static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss;
6199static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss;
6200static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss;
6201static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss;
6202static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss;
6203static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss;
6204static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss;
6205static int hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss;
6206
6207static int hf_ieee80211_vht_op;
6208static int hf_ieee80211_vht_op_channel_width;
6209static int hf_ieee80211_vht_op_channel_center0;
6210static int hf_ieee80211_vht_op_channel_center1;
6211
6212static int hf_ieee80211_vht_op_basic_mcs_map;
6213static int hf_ieee80211_vht_op_max_basic_mcs_for_1_ss;
6214static int hf_ieee80211_vht_op_max_basic_mcs_for_2_ss;
6215static int hf_ieee80211_vht_op_max_basic_mcs_for_3_ss;
6216static int hf_ieee80211_vht_op_max_basic_mcs_for_4_ss;
6217static int hf_ieee80211_vht_op_max_basic_mcs_for_5_ss;
6218static int hf_ieee80211_vht_op_max_basic_mcs_for_6_ss;
6219static int hf_ieee80211_vht_op_max_basic_mcs_for_7_ss;
6220static int hf_ieee80211_vht_op_max_basic_mcs_for_8_ss;
6221static int hf_ieee80211_vht_mcsset_tx_highest_long_gi;
6222
6223static int hf_ieee80211_vht_tpe_pwr_info;
6224static int hf_ieee80211_vht_tpe_pwr_info_count;
6225static int hf_ieee80211_vht_tpe_pwr_info_unit;
6226static int hf_ieee80211_vht_tpe_pwr_info_category;
6227static int hf_ieee80211_vht_tpe_pwr_constr_20;
6228static int hf_ieee80211_vht_tpe_pwr_constr_40;
6229static int hf_ieee80211_vht_tpe_pwr_constr_80;
6230static int hf_ieee80211_vht_tpe_pwr_constr_160;
6231static int hf_ieee80211_vht_tpe_pwr_constr_320;
6232static int hf_ieee80211_vht_tpe_any_bw_psd;
6233static int hf_ieee80211_vht_tpe_psd;
6234static int hf_ieee80211_vht_tpe_ext_count;
6235static int hf_ieee80211_vht_tpe_ext_reserved;
6236
6237static int hf_ieee80211_beamform_feedback_seg_retrans_bitmap;
6238
6239static int hf_ieee80211_ndp_annc_token;
6240static int hf_ieee80211_ndp_annc_variant;
6241static int hf_ieee80211_ndp_annc_token_number;
6242static int hf_ieee80211_vht_ndp_annc_sta_info_aid12;
6243static int hf_ieee80211_vht_ndp_annc_sta_info_feedback_type;
6244static int hf_ieee80211_vht_ndp_annc_sta_info_nc_index;
6245static int hf_ieee80211_vht_ndp_annc_sta_info_reserved;
6246
6247static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008;
6248static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11;
6249static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset;
6250static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts;
6251static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep;
6252static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts;
6253static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1;
6254static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation;
6255static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep;
6256static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2;
6257
6258static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043;
6259static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11;
6260static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac;
6261static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation;
6262static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved;
6263
6264static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044;
6265static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11;
6266static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf;
6267static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation;
6268static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved;
6269static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token;
6270
6271static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045;
6272static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11;
6273static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power;
6274static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi;
6275static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation;
6276static int hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved;
6277
6278
6279static int hf_ieee80211_ndp_eht_annc_sta_info;
6280static int hf_ieee80211_ndp_eht_annc_aid11;
6281static int hf_ieee80211_ndp_eht_annc_resolution;
6282static int hf_ieee80211_ndp_eht_annc_feedback_map;
6283static int hf_ieee80211_ndp_eht_annc_reserved1;
6284static int hf_ieee80211_ndp_eht_annc_nc_index;
6285static int hf_ieee80211_ndp_eht_annc_feedback_type;
6286static int hf_ieee80211_ndp_eht_annc_disambiguation;
6287static int hf_ieee80211_ndp_eht_annc_codebook_size;
6288static int hf_ieee80211_ndp_eht_annc_reserved2;
6289
6290static int hf_ieee80211_ff_vht_action;
6291static int hf_ieee80211_ff_vht_mimo_cntrl;
6292static int hf_ieee80211_ff_vht_mimo_cntrl_nc_index;
6293static int hf_ieee80211_ff_vht_mimo_cntrl_nr_index;
6294static int hf_ieee80211_ff_vht_mimo_cntrl_channel_width;
6295static int hf_ieee80211_ff_vht_mimo_cntrl_grouping;
6296static int hf_ieee80211_ff_vht_mimo_cntrl_codebook_info;
6297static int hf_ieee80211_ff_vht_mimo_cntrl_feedback_type;
6298static int hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg;
6299static int hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg;
6300static int hf_ieee80211_ff_vht_mimo_cntrl_reserved;
6301static int hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number;
6302
6303static int * const hf_ieee80211_ff_vht_mimo_cntrl_fields[] = {
6304 &hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
6305 &hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
6306 &hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
6307 &hf_ieee80211_ff_vht_mimo_cntrl_grouping,
6308 &hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
6309 &hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
6310 &hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
6311 &hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
6312 &hf_ieee80211_ff_vht_mimo_cntrl_reserved,
6313 &hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
6314 NULL((void*)0),
6315};
6316
6317static int hf_ieee80211_vht_compressed_beamforming_report;
6318static int hf_ieee80211_vht_compressed_beamforming_report_snr;
6319static int hf_ieee80211_vht_compressed_beamform_scidx;
6320static int hf_ieee80211_vht_group_id_management;
6321static int hf_ieee80211_vht_membership_status_array;
6322static int hf_ieee80211_vht_user_position_array;
6323static int hf_ieee80211_vht_operation_mode_notification;
6324static int hf_ieee80211_vht_membership_status_field;
6325static int hf_ieee80211_vht_user_position_field;
6326static int hf_ieee80211_vht_mu_exclusive_beamforming_report;
6327static int hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr;
6328
6329static int hf_ieee80211_ff_he_action;
6330static int hf_ieee80211_ff_protected_he_action;
6331static int hf_ieee80211_ff_protected_ftm_action;
6332static int hf_ieee80211_ff_eht_action;
6333static int hf_ieee80211_ff_protected_eht_action;
6334static int hf_ieee80211_he_mimo_control_nc_index;
6335static int hf_ieee80211_he_mimo_control_nr_index;
6336static int hf_ieee80211_he_mimo_control_bw;
6337static int hf_ieee80211_he_mimo_control_grouping;
6338static int hf_ieee80211_he_mimo_control_codebook_info;
6339static int hf_ieee80211_he_mimo_control_feedback_type;
6340static int hf_ieee80211_he_mimo_control_remaining_feedback_segs;
6341static int hf_ieee80211_he_mimo_control_first_feedback_seg;
6342static int hf_ieee80211_he_mimo_control_ru_start_index;
6343static int hf_ieee80211_he_mimo_control_ru_end_index;
6344static int hf_ieee80211_he_mimo_control_sounding_dialog_token_num;
6345static int hf_ieee80211_he_mimo_control_reserved;
6346static int hf_ieee80211_he_mimo_control_field;
6347static int hf_ieee80211_he_compressed_beamforming_report_snr;
6348static int hf_ieee80211_he_compressed_beamform_scidx;
6349static int hf_ieee80211_he_beamforming_report_len;
6350
6351static int hf_ieee80211_tag_neighbor_report_bssid;
6352static int hf_ieee80211_tag_neighbor_report_bssid_info;
6353static int hf_ieee80211_tag_neighbor_report_bssid_info_reachability;
6354static int hf_ieee80211_tag_neighbor_report_bssid_info_security;
6355static int hf_ieee80211_tag_neighbor_report_bssid_info_key_scope;
6356static int hf_ieee80211_tag_neighbor_report_bssid_info_capability;
6357static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng;
6358static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos;
6359static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd;
6360static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt;
6361static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4;
6362static int hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5;
6363static int hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain;
6364static int hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput;
6365static int hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput;
6366static int hf_ieee80211_tag_neighbor_report_bssid_info_ftm;
6367static int hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency;
6368static int hf_ieee80211_tag_neighbor_report_bssid_info_er_bss;
6369static int hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap;
6370static int hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active;
6371static int hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap;
6372static int hf_ieee80211_tag_neighbor_report_bssid_info_oct_supported_with_reporting_ap;
6373static int hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap;
6374static int hf_ieee80211_tag_neighbor_report_bssid_info_eht;
6375static int hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning;
6376static int hf_ieee80211_tag_neighbor_report_bssid_info_reserved;
6377static int hf_ieee80211_tag_neighbor_report_ope_class;
6378static int hf_ieee80211_tag_neighbor_report_channel_number;
6379static int hf_ieee80211_tag_neighbor_report_phy_type;
6380static int hf_ieee80211_tag_neighbor_report_subelement_id;
6381static int hf_ieee80211_tag_neighbor_report_subelement_length;
6382static int hf_ieee80211_tag_neighbor_report_subelement_data;
6383static int hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref;
6384static int hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf;
6385static int hf_ieee80211_tag_neighbor_report_subelement_bss_dur;
6386static int hf_ieee80211_tag_neighbor_report_subelement_tsf_offset;
6387static int hf_ieee80211_tag_neighbor_report_subelement_beacon_interval;
6388static int hf_ieee80211_tag_neighbor_report_subelement_country_code;
6389static int hf_ieee80211_tag_supported_ope_classes_current;
6390static int hf_ieee80211_tag_supported_ope_classes_alternate;
6391
6392static int hf_ieee80211_tag_dirn_meas_results_aoa_results;
6393static int hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth;
6394static int hf_ieee80211_tag_ftm_aoa_results_aoa_elevation;
6395static int hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy;
6396static int hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy;
6397static int hf_ieee80211_tag_ftm_aoa_results_best_awv_id;
6398static int hf_ieee80211_tag_ftm_aoa_results_aoa_reference;
6399static int hf_ieee80211_tag_ftm_aoa_results_reserved;
6400
6401/* IEEE Std 802.11r-2008 7.3.2.47 */
6402static int hf_ieee80211_tag_mobility_domain_mdid;
6403static int hf_ieee80211_tag_mobility_domain_ft_capab;
6404static int hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds;
6405static int hf_ieee80211_tag_mobility_domain_ft_capab_resource_req;
6406static int hf_ieee80211_tag_mobility_domain_ft_capab_reserved;
6407static int * const ieee80211_tag_mobility_domain_ft_capab_fields[] = {
6408 &hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
6409 &hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
6410 &hf_ieee80211_tag_mobility_domain_ft_capab_reserved,
6411 NULL((void*)0)
6412};
6413
6414/* IEEE Std 802.11r-2008 7.3.2.48 */
6415static int hf_ieee80211_tag_ft_mic_control;
6416static int hf_ieee80211_tag_ft_mic_control_rsnxe_used;
6417static int hf_ieee80211_tag_ft_mic_control_mic_length;
6418static int hf_ieee80211_tag_ft_mic_control_reserved;
6419static int hf_ieee80211_tag_ft_mic_control_element_count;
6420static int * const ieee80211_tag_ft_mic_control_fields[] = {
6421 &hf_ieee80211_tag_ft_mic_control_rsnxe_used,
6422 &hf_ieee80211_tag_ft_mic_control_mic_length,
6423 &hf_ieee80211_tag_ft_mic_control_reserved,
6424 &hf_ieee80211_tag_ft_mic_control_element_count,
6425 NULL((void*)0)
6426};
6427static int hf_ieee80211_tag_ft_mic;
6428static int hf_ieee80211_tag_ft_anonce;
6429static int hf_ieee80211_tag_ft_snonce;
6430static int hf_ieee80211_tag_ft_subelem_id;
6431static int hf_ieee80211_tag_ft_subelem_len;
6432static int hf_ieee80211_tag_ft_subelem_data;
6433static int hf_ieee80211_tag_ft_subelem_r1kh_id;
6434static int hf_ieee80211_tag_ft_subelem_gtk_key_info;
6435static int hf_ieee80211_tag_ft_subelem_gtk_key_id;
6436static int hf_ieee80211_tag_ft_subelem_gtk_key_length;
6437static int hf_ieee80211_tag_ft_subelem_gtk_rsc;
6438static int hf_ieee80211_tag_ft_subelem_gtk_key;
6439static int hf_ieee80211_tag_ft_subelem_gtk_key_encrypted;
6440static int hf_ieee80211_tag_ft_subelem_r0kh_id;
6441static int hf_ieee80211_tag_ft_subelem_igtk_key_id;
6442static int hf_ieee80211_tag_ft_subelem_igtk_ipn;
6443static int hf_ieee80211_tag_ft_subelem_igtk_key_length;
6444static int hf_ieee80211_tag_ft_subelem_igtk_key;
6445static int hf_ieee80211_tag_ft_subelem_oci_op_class;
6446static int hf_ieee80211_tag_ft_subelem_oci_prim_chan_num;
6447static int hf_ieee80211_tag_ft_subelem_oci_freq_seg_1;
6448static int hf_ieee80211_tag_ft_subelem_oci_oct_op_class;
6449static int hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num;
6450static int hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1;
6451static int hf_ieee80211_tag_ft_subelem_bigtk_key_id;
6452static int hf_ieee80211_tag_ft_subelem_bigtk_bipn;
6453static int hf_ieee80211_tag_ft_subelem_bigtk_key_length;
6454static int hf_ieee80211_tag_ft_subelem_bigtk_key;
6455static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info;
6456static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id;
6457static int hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info;
6458static int hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id;
6459static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length;
6460static int hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc;
6461static int hf_ieee80211_tag_ft_subelem_mlo_gtk_key;
6462static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id;
6463static int hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn;
6464static int hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info;
6465static int hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id;
6466static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length;
6467static int hf_ieee80211_tag_ft_subelem_mlo_igtk_key;
6468static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id;
6469static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_bipn;
6470static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info;
6471static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id;
6472static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_length;
6473static int hf_ieee80211_tag_ft_subelem_mlo_bigtk_key;
6474
6475/* IEEE Std 802.11-2012: 11r 8.4.2.52 */
6476static int hf_ieee80211_tag_ric_data_id;
6477static int hf_ieee80211_tag_ric_data_desc_cnt;
6478static int hf_ieee80211_tag_ric_data_status_code;
6479
6480/* IEEE Std 802.11-2012: 11r 8.4.2.53 */
6481static int hf_ieee80211_tag_ric_desc_rsrc_type;
6482static int hf_ieee80211_tag_ric_desc_var_params;
6483
6484/* IEEE Std 802.11w-2009 7.3.2.55 */
6485static int hf_ieee80211_tag_mmie_keyid;
6486static int hf_ieee80211_tag_mmie_ipn;
6487static int hf_ieee80211_tag_mmie_mic;
6488
6489/* IEEE Std 802.11-2016: 9.4.2.72 */
6490static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control;
6491static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type;
6492static int hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved;
6493
6494/* IEEE Std 802.11-2016: 9.4.2.74 */
6495static int hf_ieee80211_tag_multiple_bssid_index_bssid_index;
6496static int hf_ieee80211_tag_multiple_bssid_index_dtim_period;
6497static int hf_ieee80211_tag_multiple_bssid_index_dtim_count;
6498
6499/* IEEE Std 802.11-2012: 8.4.2.61 */
6500static int hf_ieee80211_tag_obss_spd;
6501static int hf_ieee80211_tag_obss_sad;
6502static int hf_ieee80211_tag_obss_cwtsi;
6503static int hf_ieee80211_tag_obss_sptpc;
6504static int hf_ieee80211_tag_obss_satpc;
6505static int hf_ieee80211_tag_obss_wctdf;
6506static int hf_ieee80211_tag_obss_sat;
6507
6508/* IEEE Std 802.11-2012: 8.4.2.25.1 */
6509static int hf_ieee80211_group_data_cipher_suite_oui;
6510static int hf_ieee80211_group_data_cipher_suite_type;
6511static int hf_ieee80211_osen_pairwise_cipher_suite_oui;
6512static int hf_ieee80211_osen_pairwise_cipher_suite_type;
6513static int hf_ieee80211_osen_pcs_count;
6514static int hf_ieee80211_osen_akm_count;
6515static int hf_ieee80211_osen_akm_cipher_suite_oui;
6516static int hf_ieee80211_osen_akm_cipher_suite_type;
6517static int hf_ieee80211_osen_rsn_cap_preauth;
6518static int hf_ieee80211_osen_rsn_cap_no_pairwise;
6519static int hf_ieee80211_osen_rsn_cap_ptksa_replay_counter;
6520static int hf_ieee80211_osen_rsn_cap_gtksa_replay_counter;
6521static int hf_ieee80211_osen_rsn_cap_mfpr;
6522static int hf_ieee80211_osen_rsn_cap_mfpc;
6523static int hf_ieee80211_osen_rsn_cap_jmr;
6524static int hf_ieee80211_osen_rsn_cap_peerkey;
6525static int hf_ieee80211_osen_rsn_spp_a_msdu_capable;
6526static int hf_ieee80211_osen_rsn_spp_a_msdu_required;
6527static int hf_ieee80211_osen_rsn_pbac;
6528static int hf_ieee80211_osen_extended_key_id_iaf;
6529static int hf_ieee80211_osen_reserved;
6530static int hf_ieee80211_osen_rsn_cap_flags;
6531static int hf_ieee80211_osen_pmkid_count;
6532static int hf_ieee80211_osen_pmkid;
6533static int hf_ieee80211_osen_group_management_cipher_suite_oui;
6534static int hf_ieee80211_osen_group_management_cipher_suite_type;
6535
6536/*WAPI-Specification 7.3.2.25 : WAPI Parameter Set*/
6537static int hf_ieee80211_tag_wapi_param_set_version;
6538
6539static int hf_ieee80211_tag_wapi_param_set_akm_suite_count;
6540static int hf_ieee80211_tag_wapi_param_set_akm_suite_oui;
6541static int hf_ieee80211_tag_wapi_param_set_akm_suite_type;
6542
6543static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count;
6544static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui;
6545static int hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type;
6546
6547static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui;
6548static int hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type;
6549
6550static int hf_ieee80211_tag_wapi_param_set_capab;
6551static int hf_ieee80211_tag_wapi_param_set_capab_preauth;
6552static int hf_ieee80211_tag_wapi_param_set_capab_rsvd;
6553static int hf_ieee80211_tag_wapi_param_set_bkid_count;
6554static int hf_ieee80211_tag_wapi_param_set_bkid_list;
6555
6556/* IEEE Std 802.11v-2011 7.3.2.61 */
6557static int hf_ieee80211_tag_time_adv_timing_capab;
6558static int hf_ieee80211_tag_time_adv_time_value;
6559static int hf_ieee80211_tag_time_adv_time_value_year;
6560static int hf_ieee80211_tag_time_adv_time_value_month;
6561static int hf_ieee80211_tag_time_adv_time_value_day;
6562static int hf_ieee80211_tag_time_adv_time_value_hours;
6563static int hf_ieee80211_tag_time_adv_time_value_minutes;
6564static int hf_ieee80211_tag_time_adv_time_value_seconds;
6565static int hf_ieee80211_tag_time_adv_time_value_milliseconds;
6566static int hf_ieee80211_tag_time_adv_time_value_reserved;
6567static int hf_ieee80211_tag_time_adv_time_error;
6568static int hf_ieee80211_tag_time_adv_time_update_counter;
6569
6570/* IEEE Std 802.11-2012 8.4.2.81 */
6571static int hf_ieee80211_tag_bss_max_idle_period;
6572static int hf_ieee80211_tag_bss_max_idle_options;
6573static int hf_ieee80211_tag_bss_max_idle_options_protected;
6574static int hf_ieee80211_tag_bss_idle_options_reserved;
6575
6576/* IEEE Std 802.11-2012 8.4.2.82 */
6577static int hf_ieee80211_tag_tfs_request_id;
6578static int hf_ieee80211_tag_tfs_request_ac_delete_after_match;
6579static int hf_ieee80211_tag_tfs_request_ac_notify;
6580static int hf_ieee80211_tag_tfs_request_subelem_id;
6581static int hf_ieee80211_tag_tfs_request_subelem_len;
6582static int hf_ieee80211_tag_tfs_request_subelem;
6583
6584/* IEEE Std 802.11-2012 8.4.2.83 */
6585static int hf_ieee80211_tag_tfs_response_subelem_id;
6586static int hf_ieee80211_tag_tfs_response_subelem_len;
6587static int hf_ieee80211_tag_tfs_response_subelem;
6588static int hf_ieee80211_tag_tfs_response_status;
6589static int hf_ieee80211_tag_tfs_response_id;
6590
6591/* IEEE Std 802.11-2012 8.4.2.84 */
6592static int hf_ieee80211_tag_wnm_sleep_mode_action_type;
6593static int hf_ieee80211_tag_wnm_sleep_mode_response_status;
6594static int hf_ieee80211_tag_wnm_sleep_mode_interval;
6595
6596static int hf_ieee80211_wnm_sub_elt_id;
6597static int hf_ieee80211_wnm_sub_elt_len;
6598
6599/* IEEE Std 802.11v-2011 7.3.2.87 */
6600static int hf_ieee80211_tag_time_zone;
6601
6602/* IEEE Std 802.11u-2011 7.3.2.92 */
6603static int hf_ieee80211_tag_interworking_access_network_type;
6604static int hf_ieee80211_tag_interworking_internet;
6605static int hf_ieee80211_tag_interworking_asra;
6606static int hf_ieee80211_tag_interworking_esr;
6607static int hf_ieee80211_tag_interworking_uesa;
6608static int hf_ieee80211_tag_interworking_hessid;
6609
6610/* IEEE Std 802.11-2012, 8.4.2.97 */
6611static int hf_ieee80211_tag_qos_map_set_dscp_exc;
6612static int hf_ieee80211_tag_qos_map_set_dscp_exc_val;
6613static int hf_ieee80211_tag_qos_map_set_dscp_exc_up;
6614static int hf_ieee80211_tag_qos_map_set_range;
6615static int hf_ieee80211_tag_qos_map_set_low;
6616static int hf_ieee80211_tag_qos_map_set_high;
6617
6618/* IEEE Std 802.11u-2011 7.3.2.93 */
6619static int hf_ieee80211_tag_adv_proto_resp_len_limit;
6620static int hf_ieee80211_tag_adv_proto_pame_bi;
6621static int hf_ieee80211_tag_adv_proto_id;
6622static int hf_ieee80211_tag_adv_vs_len;
6623/* static int hf_ieee80211_tag_adv_proto_vs_info; */
6624
6625/* IEEE Std 802.11u-2011 7.3.2.96 */
6626static int hf_ieee80211_tag_roaming_consortium_num_anqp_oi;
6627static int hf_ieee80211_tag_roaming_consortium_oi1_len;
6628static int hf_ieee80211_tag_roaming_consortium_oi2_len;
6629static int hf_ieee80211_tag_roaming_consortium_oi1;
6630static int hf_ieee80211_tag_roaming_consortium_oi2;
6631static int hf_ieee80211_tag_roaming_consortium_oi3;
6632
6633/* 802.11n 7.3.2.48 */
6634static int hf_ieee80211_hta_cc;
6635static int hf_ieee80211_hta_cap1;
6636static int hf_ieee80211_hta_cap2;
6637static int hf_ieee80211_hta_ext_chan_offset;
6638static int hf_ieee80211_hta_rec_tx_width;
6639static int hf_ieee80211_hta_rifs_mode;
6640static int hf_ieee80211_hta_controlled_access;
6641static int hf_ieee80211_hta_service_interval;
6642static int hf_ieee80211_hta_operating_mode;
6643static int hf_ieee80211_hta_non_gf_devices;
6644static int hf_ieee80211_hta_basic_stbc_mcs;
6645static int hf_ieee80211_hta_dual_stbc_protection;
6646static int hf_ieee80211_hta_secondary_beacon;
6647static int hf_ieee80211_hta_lsig_txop_protection;
6648static int hf_ieee80211_hta_pco_active;
6649static int hf_ieee80211_hta_pco_phase;
6650
6651static int hf_ieee80211_antsel;
6652static int hf_ieee80211_antsel_vs;
6653static int hf_ieee80211_antsel_b0;
6654static int hf_ieee80211_antsel_b1;
6655static int hf_ieee80211_antsel_b2;
6656static int hf_ieee80211_antsel_b3;
6657static int hf_ieee80211_antsel_b4;
6658static int hf_ieee80211_antsel_b5;
6659static int hf_ieee80211_antsel_b6;
6660static int hf_ieee80211_antsel_b7;
6661
6662static int hf_ieee80211_rsn_version;
6663static int hf_ieee80211_rsn_gcs;
6664static int hf_ieee80211_rsn_gcs_oui;
6665static int hf_ieee80211_rsn_gcs_type;
6666static int hf_ieee80211_rsn_gcs_80211_type;
6667static int hf_ieee80211_rsn_pcs_count;
6668static int hf_ieee80211_rsn_pcs_list;
6669static int hf_ieee80211_rsn_pcs;
6670static int hf_ieee80211_rsn_pcs_oui;
6671static int hf_ieee80211_rsn_pcs_80211_type;
6672static int hf_ieee80211_rsn_pcs_type;
6673static int hf_ieee80211_rsn_akms_count;
6674static int hf_ieee80211_rsn_akms_list;
6675static int hf_ieee80211_rsn_akms;
6676static int hf_ieee80211_rsn_akms_oui;
6677static int hf_ieee80211_rsn_akms_80211_type;
6678static int hf_ieee80211_rsn_akms_type;
6679static int hf_ieee80211_rsn_cap;
6680static int hf_ieee80211_rsn_cap_preauth;
6681static int hf_ieee80211_rsn_cap_no_pairwise;
6682static int hf_ieee80211_rsn_cap_ptksa_replay_counter;
6683static int hf_ieee80211_rsn_cap_gtksa_replay_counter;
6684static int hf_ieee80211_rsn_cap_mfpr;
6685static int hf_ieee80211_rsn_cap_mfpc;
6686static int hf_ieee80211_rsn_cap_jmr;
6687static int hf_ieee80211_rsn_cap_peerkey;
6688static int hf_ieee80211_rsn_cap_spp_amsdu_cap;
6689static int hf_ieee80211_rsn_cap_spp_amsdu_req;
6690static int hf_ieee80211_rsn_cap_pbac;
6691static int hf_ieee80211_rsn_cap_extended_key_id_iaf;
6692static int hf_ieee80211_rsn_cap_ocvc;
6693static int hf_ieee80211_rsn_pmkid_count;
6694static int hf_ieee80211_rsn_pmkid_list;
6695static int hf_ieee80211_rsn_pmkid;
6696static int hf_ieee80211_rsn_gmcs;
6697static int hf_ieee80211_rsn_gmcs_oui;
6698static int hf_ieee80211_rsn_gmcs_type;
6699static int hf_ieee80211_rsn_gmcs_80211_type;
6700
6701static int hf_ieee80211_wfa_ie_type;
6702static int hf_ieee80211_wfa_ie_wpa_version;
6703static int hf_ieee80211_wfa_ie_wpa_mcs;
6704static int hf_ieee80211_wfa_ie_wpa_mcs_oui;
6705static int hf_ieee80211_wfa_ie_wpa_mcs_type;
6706static int hf_ieee80211_wfa_ie_wpa_mcs_wfa_type;
6707static int hf_ieee80211_wfa_ie_wpa_ucs_count;
6708static int hf_ieee80211_wfa_ie_wpa_ucs_list;
6709static int hf_ieee80211_wfa_ie_wpa_ucs;
6710static int hf_ieee80211_wfa_ie_wpa_ucs_oui;
6711static int hf_ieee80211_wfa_ie_wpa_ucs_wfa_type;
6712static int hf_ieee80211_wfa_ie_wpa_ucs_type;
6713static int hf_ieee80211_wfa_ie_wpa_akms_count;
6714static int hf_ieee80211_wfa_ie_wpa_akms_list;
6715static int hf_ieee80211_wfa_ie_wpa_akms;
6716static int hf_ieee80211_wfa_ie_wpa_akms_oui;
6717static int hf_ieee80211_wfa_ie_wpa_akms_wfa_type;
6718static int hf_ieee80211_wfa_ie_wpa_akms_type;
6719static int hf_ieee80211_wfa_ie_wme_subtype;
6720static int hf_ieee80211_wfa_ie_wme_version;
6721static int hf_ieee80211_wfa_ie_wme_qos_info;
6722static int hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length;
6723static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be;
6724static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk;
6725static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi;
6726static int hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo;
6727static int hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved;
6728static int hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd;
6729static int hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count;
6730static int hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved;
6731static int hf_ieee80211_wfa_ie_wme_reserved;
6732static int hf_ieee80211_wfa_ie_wme_ac_parameters;
6733static int hf_ieee80211_wfa_ie_wme_acp_aci_aifsn;
6734static int hf_ieee80211_wfa_ie_wme_acp_aci_be;
6735static int hf_ieee80211_wfa_ie_wme_acp_acm_be;
6736static int hf_ieee80211_wfa_ie_wme_acp_aifsn_be;
6737static int hf_ieee80211_wfa_ie_wme_acp_reserved_be;
6738static int hf_ieee80211_wfa_ie_wme_acp_aci_bk;
6739static int hf_ieee80211_wfa_ie_wme_acp_acm_bk;
6740static int hf_ieee80211_wfa_ie_wme_acp_aifsn_bk;
6741static int hf_ieee80211_wfa_ie_wme_acp_reserved_bk;
6742static int hf_ieee80211_wfa_ie_wme_acp_aci_vi;
6743static int hf_ieee80211_wfa_ie_wme_acp_acm_vi;
6744static int hf_ieee80211_wfa_ie_wme_acp_aifsn_vi;
6745static int hf_ieee80211_wfa_ie_wme_acp_reserved_vi;
6746static int hf_ieee80211_wfa_ie_wme_acp_aci_vo;
6747static int hf_ieee80211_wfa_ie_wme_acp_acm_vo;
6748static int hf_ieee80211_wfa_ie_wme_acp_aifsn_vo;
6749static int hf_ieee80211_wfa_ie_wme_acp_reserved_vo;
6750static int hf_ieee80211_wfa_ie_wme_acp_ecw;
6751static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_be;
6752static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk;
6753static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo;
6754static int hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi;
6755static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_be;
6756static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk;
6757static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo;
6758static int hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi;
6759static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_be;
6760static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk;
6761static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo;
6762static int hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi;
6763static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo;
6764static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid;
6765static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction;
6766static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb;
6767static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up;
6768static int hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved;
6769static int hf_ieee80211_wfa_ie_wme_tspec_nor_msdu;
6770static int hf_ieee80211_wfa_ie_wme_tspec_max_msdu;
6771static int hf_ieee80211_wfa_ie_wme_tspec_min_srv;
6772static int hf_ieee80211_wfa_ie_wme_tspec_max_srv;
6773static int hf_ieee80211_wfa_ie_wme_tspec_inact_int;
6774static int hf_ieee80211_wfa_ie_wme_tspec_susp_int;
6775static int hf_ieee80211_wfa_ie_wme_tspec_srv_start;
6776static int hf_ieee80211_wfa_ie_wme_tspec_min_data;
6777static int hf_ieee80211_wfa_ie_wme_tspec_mean_data;
6778static int hf_ieee80211_wfa_ie_wme_tspec_peak_data;
6779static int hf_ieee80211_wfa_ie_wme_tspec_burst_size;
6780static int hf_ieee80211_wfa_ie_wme_tspec_delay_bound;
6781static int hf_ieee80211_wfa_ie_wme_tspec_min_phy;
6782static int hf_ieee80211_wfa_ie_wme_tspec_surplus;
6783static int hf_ieee80211_wfa_ie_wme_tspec_medium;
6784static int hf_ieee80211_wfa_ie_nc_cost_level;
6785static int hf_ieee80211_wfa_ie_nc_reserved;
6786static int hf_ieee80211_wfa_ie_nc_cost_flags;
6787static int hf_ieee80211_wfa_ie_tethering_type;
6788static int hf_ieee80211_wfa_ie_tethering_mac_length;
6789static int hf_ieee80211_wfa_ie_tethering_mac;
6790static int hf_ieee80211_wfa_ie_owe_bssid;
6791static int hf_ieee80211_wfa_ie_owe_ssid_length;
6792static int hf_ieee80211_wfa_ie_owe_ssid;
6793static int hf_ieee80211_wfa_ie_owe_band_info;
6794static int hf_ieee80211_wfa_ie_owe_channel_info;
6795static int hf_ieee80211_wfa_ie_mbo_oce_attr;
6796static int hf_ieee80211_wfa_ie_mbo_oce_attr_id;
6797static int hf_ieee80211_wfa_ie_mbo_oce_attr_len;
6798static int hf_ieee80211_wfa_ie_mbo_ap_cap;
6799static int hf_ieee80211_wfa_ie_mbo_ap_cap_cell;
6800static int hf_ieee80211_wfa_ie_mbo_ap_cap_reserved;
6801static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class;
6802static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan;
6803static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref;
6804static int hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason;
6805static int hf_ieee80211_wfa_ie_mbo_cellular_cap;
6806static int hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason;
6807static int hf_ieee80211_wfa_ie_mbo_cellular_pref;
6808static int hf_ieee80211_wfa_ie_mbo_transition_reason;
6809static int hf_ieee80211_wfa_ie_mbo_transition_rej_reason;
6810static int hf_ieee80211_wfa_ie_mbo_assoc_retry_delay;
6811static int hf_ieee80211_wfa_ie_oce_cap_ctrl;
6812static int hf_ieee80211_wfa_ie_oce_cap_release;
6813static int hf_ieee80211_wfa_ie_oce_cap_sta_cfon;
6814static int hf_ieee80211_wfa_ie_oce_cap_11b_only_ap;
6815static int hf_ieee80211_wfa_ie_oce_cap_hlp;
6816static int hf_ieee80211_wfa_ie_oce_cap_non_oce_ap;
6817static int hf_ieee80211_wfa_ie_oce_cap_reserved;
6818static int hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta;
6819static int hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay;
6820static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap;
6821static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink;
6822static int hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink;
6823static int hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid;
6824static int hf_ieee80211_wfa_ie_oce_probe_suppr_bssid;
6825static int hf_ieee80211_wfa_ie_oce_probe_suppr_ssid;
6826static int hf_ieee80211_wfa_anqp_mbo_subtype;
6827static int hf_ieee80211_wfa_anqp_mbo_query;
6828static int hf_ieee80211_wfa_anqp_mbo_cellular_pref;
6829static int hf_ieee80211_wfa_ie_transition_disable_bitmap;
6830static int hf_ieee80211_wfa_ie_transition_disable_wpa3_personal;
6831static int hf_ieee80211_wfa_ie_transition_disable_sae_pk;
6832static int hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise;
6833static int hf_ieee80211_wfa_ie_transition_disable_enhanced_open;
6834static int hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7;
6835static int hf_ieee80211_wfa_ie_transition_disable_reserved;
6836
6837static int hf_ieee80211_aironet_ie_type;
6838static int hf_ieee80211_aironet_ie_dtpc;
6839static int hf_ieee80211_aironet_ie_dtpc_unknown;
6840static int hf_ieee80211_aironet_ie_version;
6841static int hf_ieee80211_aironet_ie_data;
6842static int hf_ieee80211_aironet_ie_qos_reserved;
6843static int hf_ieee80211_aironet_ie_qos_paramset;
6844static int hf_ieee80211_aironet_ie_qos_val;
6845static int hf_ieee80211_aironet_ie_clientmfp;
6846
6847static int hf_ieee80211_vs_sgdsn_tag;
6848static int hf_ieee80211_vs_sgdsn_type;
6849static int hf_ieee80211_vs_sgdsn_length;
6850static int hf_ieee80211_vs_sgdsn_version;
6851static int hf_ieee80211_vs_sgdsn_icaomfrcode;
6852static int hf_ieee80211_vs_sgdsn_manufacturer;
6853static int hf_ieee80211_vs_sgdsn_model;
6854static int hf_ieee80211_vs_sgdsn_serialnumber;
6855static int hf_ieee80211_vs_sgdsn_serialnumber_len;
6856static int hf_ieee80211_vs_sgdsn_gpscoord;
6857static int hf_ieee80211_vs_sgdsn_altitude;
6858static int hf_ieee80211_vs_sgdsn_speed;
6859static int hf_ieee80211_vs_sgdsn_heading;
6860
6861static int hf_ieee80211_vs_nintendo_type;
6862static int hf_ieee80211_vs_nintendo_length;
6863static int hf_ieee80211_vs_nintendo_servicelist;
6864static int hf_ieee80211_vs_nintendo_service;
6865static int hf_ieee80211_vs_nintendo_consoleid;
6866static int hf_ieee80211_vs_nintendo_unknown;
6867
6868static int hf_ieee80211_vs_aruba_subtype;
6869static int hf_ieee80211_vs_aruba_apname;
6870static int hf_ieee80211_vs_aruba_data;
6871static int hf_ieee80211_vs_aruba_gps_length;
6872static int hf_ieee80211_vs_aruba_gps_subversion;
6873static int hf_ieee80211_vs_aruba_gps_hop;
6874static int hf_ieee80211_vs_aruba_gps_latitude;
6875static int hf_ieee80211_vs_aruba_gps_longitude;
6876static int hf_ieee80211_vs_aruba_gps_major_axis;
6877static int hf_ieee80211_vs_aruba_gps_minor_axis;
6878static int hf_ieee80211_vs_aruba_gps_orientation;
6879static int hf_ieee80211_vs_aruba_gps_distance;
6880static int hf_ieee80211_vs_aruba_ap_health;
6881static int hf_ieee80211_vs_aruba_ap_health_version;
6882static int hf_ieee80211_vs_aruba_ap_health_ip_protocol;
6883static int hf_ieee80211_vs_aruba_ap_health_uplink;
6884static int hf_ieee80211_vs_aruba_ap_health_uplink_type;
6885static int hf_ieee80211_vs_aruba_ap_health_network_layer;
6886static int hf_ieee80211_vs_aruba_ap_health_proxy_server;
6887static int hf_ieee80211_vs_aruba_ap_health_activate;
6888static int hf_ieee80211_vs_aruba_ap_health_central;
6889static int hf_ieee80211_vs_aruba_ap_health_reserved;
6890
6891static int hf_ieee80211_vs_routerboard_unknown;
6892static int hf_ieee80211_vs_routerboard_subitem;
6893static int hf_ieee80211_vs_routerboard_subtype;
6894static int hf_ieee80211_vs_routerboard_sublength;
6895static int hf_ieee80211_vs_routerboard_subdata;
6896static int hf_ieee80211_vs_routerboard_subtype1_prefix;
6897static int hf_ieee80211_vs_routerboard_subtype1_data;
6898
6899static int hf_ieee80211_vs_meru_subitem;
6900static int hf_ieee80211_vs_meru_subtype;
6901static int hf_ieee80211_vs_meru_sublength;
6902static int hf_ieee80211_vs_meru_subdata;
6903
6904static int hf_ieee80211_vs_extreme_subtype;
6905static int hf_ieee80211_vs_extreme_subdata;
6906static int hf_ieee80211_vs_extreme_unknown;
6907static int hf_ieee80211_vs_extreme_ap_length;
6908static int hf_ieee80211_vs_extreme_ap_name;
6909
6910static int hf_ieee80211_vs_aerohive_version;
6911static int hf_ieee80211_vs_aerohive_subtype;
6912static int hf_ieee80211_vs_aerohive_hostname_length;
6913static int hf_ieee80211_vs_aerohive_hostname;
6914static int hf_ieee80211_vs_aerohive_data;
6915
6916static int hf_ieee80211_vs_mist_ap_name;
6917static int hf_ieee80211_vs_mist_data;
6918
6919static int hf_ieee80211_vs_ruckus_ap_name;
6920static int hf_ieee80211_vs_ruckus_data;
6921
6922static int hf_ieee80211_vs_alcatel_ap_name;
6923static int hf_ieee80211_vs_alcatel_data;
6924
6925static int hf_ieee80211_vs_fortinet_subtype;
6926static int hf_ieee80211_vs_fortinet_system_type;
6927static int hf_ieee80211_vs_fortinet_system_length;
6928static int hf_ieee80211_vs_fortinet_system_apname;
6929static int hf_ieee80211_vs_fortinet_system_apmodel;
6930static int hf_ieee80211_vs_fortinet_system_apserial;
6931static int hf_ieee80211_vs_fortinet_data;
6932
6933static int hf_ieee80211_vs_arista_subtype;
6934static int hf_ieee80211_vs_arista_apname;
6935static int hf_ieee80211_vs_arista_data;
6936
6937static int hf_ieee80211_vs_wisun_type;
6938static int hf_ieee80211_vs_wisun_ptkid;
6939static int hf_ieee80211_vs_wisun_gtkl;
6940static int hf_ieee80211_vs_wisun_gtkl_gtk0;
6941static int hf_ieee80211_vs_wisun_gtkl_gtk1;
6942static int hf_ieee80211_vs_wisun_gtkl_gtk2;
6943static int hf_ieee80211_vs_wisun_gtkl_gtk3;
6944static int hf_ieee80211_vs_wisun_nr;
6945static int hf_ieee80211_vs_wisun_lgtkl;
6946static int hf_ieee80211_vs_wisun_lgtkl_lgtk0;
6947static int hf_ieee80211_vs_wisun_lgtkl_lgtk1;
6948static int hf_ieee80211_vs_wisun_lgtkl_lgtk2;
6949static int hf_ieee80211_vs_wisun_lgtk_key_id;
6950static int hf_ieee80211_vs_wisun_lgtk_lgtk;
6951static int hf_ieee80211_vs_wisun_data;
6952
6953static int hf_ieee80211_vs_apple_type;
6954static int hf_ieee80211_vs_apple_subtype;
6955static int hf_ieee80211_vs_apple_length;
6956static int hf_ieee80211_vs_apple_data;
6957
6958static int hf_ieee80211_vs_ubiquiti_type;
6959static int hf_ieee80211_vs_ubiquiti_ap_name;
6960static int hf_ieee80211_vs_ubiquiti_data;
6961
6962static int hf_ieee80211_vs_meter_type;
6963static int hf_ieee80211_vs_meter_ap_name;
6964static int hf_ieee80211_vs_meter_data;
6965
6966static int hf_ieee80211_rsn_ie_ptk_keyid;
6967
6968static int hf_ieee80211_rsn_ie_gtk_kde_data_type;
6969static int hf_ieee80211_rsn_ie_gtk_kde_key_id;
6970static int hf_ieee80211_rsn_ie_gtk_kde_tx;
6971static int hf_ieee80211_rsn_ie_gtk_kde_reserved1;
6972static int hf_ieee80211_rsn_ie_gtk_kde_reserved2;
6973static int hf_ieee80211_rsn_ie_gtk_kde_gtk;
6974
6975static int hf_ieee80211_rsn_ie_mac_address_kde_mac;
6976
6977static int hf_ieee80211_rsn_ie_pmkid;
6978
6979static int hf_ieee80211_rsn_ie_unknown;
6980
6981static int hf_ieee80211_rsn_ie_gtk_kde_nonce;
6982static int hf_ieee80211_rsn_ie_gtk_kde_lifetime;
6983static int hf_ieee80211_rsn_ie_error_kde_res;
6984static int hf_ieee80211_rsn_ie_error_kde_error_type;
6985static int hf_ieee80211_rsn_ie_igtk_kde_keyid;
6986static int hf_ieee80211_rsn_ie_igtk_kde_ipn;
6987static int hf_ieee80211_rsn_ie_igtk_kde_igtk;
6988static int hf_ieee80211_rsn_ie_oci_operating_class;
6989static int hf_ieee80211_rsn_ie_oci_primary_channel_number;
6990static int hf_ieee80211_rsn_ie_oci_frequency_segment_1;
6991static int hf_ieee80211_rsn_ie_bigtk_key_id;
6992static int hf_ieee80211_rsn_ie_bigtk_bipn;
6993static int hf_ieee80211_rsn_ie_bigtk_bigtk;
6994static int hf_ieee80211_rsn_ie_mlo_link_info;
6995static int hf_ieee80211_rsn_ie_mlo_linkid;
6996static int hf_ieee80211_rsn_ie_mlo_rnse_present;
6997static int hf_ieee80211_rsn_ie_mlo_rnsxe_present;
6998static int hf_ieee80211_rsn_ie_mlo_reserved;
6999static int hf_ieee80211_rsn_ie_mlo_mac_addr;
7000static int hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id;
7001static int hf_ieee80211_rsn_ie_mlo_gtk_kde_tx;
7002static int hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved;
7003static int hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid;
7004static int hf_ieee80211_rsn_ie_mlo_gtk_kde_pn;
7005static int hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk;
7006
7007static int hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id;
7008static int hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn;
7009static int hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved;
7010static int hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid;
7011static int hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk;
7012
7013static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id;
7014static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn;
7015static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved;
7016static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid;
7017static int hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk;
7018
7019static int hf_ieee80211_marvell_ie_type;
7020static int hf_ieee80211_marvell_ie_mesh_subtype;
7021static int hf_ieee80211_marvell_ie_mesh_version;
7022static int hf_ieee80211_marvell_ie_mesh_active_proto_id;
7023static int hf_ieee80211_marvell_ie_mesh_active_metric_id;
7024static int hf_ieee80211_marvell_ie_mesh_cap;
7025static int hf_ieee80211_marvell_ie_data;
7026
7027static int hf_ieee80211_extreme_mesh_ie_type;
7028static int hf_ieee80211_extreme_mesh_ie_services;
7029static int hf_ieee80211_extreme_mesh_ie_hello_f_root;
7030static int hf_ieee80211_extreme_mesh_ie_hello_f_proxy;
7031static int hf_ieee80211_extreme_mesh_ie_hello_f_geo;
7032static int hf_ieee80211_extreme_mesh_ie_hello_f_path_pref;
7033static int hf_ieee80211_extreme_mesh_ie_hello_f_mobile;
7034static int hf_ieee80211_extreme_mesh_ie_htr;
7035static int hf_ieee80211_extreme_mesh_ie_mtr;
7036static int hf_ieee80211_extreme_mesh_ie_root;
7037static int hf_ieee80211_extreme_mesh_ie_nh;
7038static int hf_ieee80211_extreme_mesh_ie_mesh_id;
7039static int hf_ieee80211_extreme_mesh_ie_mp_id;
7040
7041static int hf_ieee80211_atheros_ie_type;
7042static int hf_ieee80211_atheros_ie_subtype;
7043static int hf_ieee80211_atheros_ie_version;
7044static int hf_ieee80211_atheros_ie_cap_f_turbop;
7045static int hf_ieee80211_atheros_ie_cap_f_comp;
7046static int hf_ieee80211_atheros_ie_cap_f_ff;
7047static int hf_ieee80211_atheros_ie_cap_f_xr;
7048static int hf_ieee80211_atheros_ie_cap_f_ar;
7049static int hf_ieee80211_atheros_ie_cap_f_burst;
7050static int hf_ieee80211_atheros_ie_cap_f_wme;
7051static int hf_ieee80211_atheros_ie_cap_f_boost;
7052static int hf_ieee80211_atheros_ie_advcap_cap;
7053static int hf_ieee80211_atheros_ie_advcap_defkey;
7054static int hf_ieee80211_atheros_ie_xr_info;
7055static int hf_ieee80211_atheros_ie_xr_base_bssid;
7056static int hf_ieee80211_atheros_ie_xr_xr_bssid;
7057static int hf_ieee80211_atheros_ie_xr_xr_beacon;
7058static int hf_ieee80211_atheros_ie_xr_base_cap;
7059static int hf_ieee80211_atheros_ie_xr_xr_cap;
7060static int hf_ieee80211_atheros_ie_data;
7061
7062/*QBSS - Version 1,2,802.11e*/
7063
7064static int hf_ieee80211_qbss2_cal;
7065static int hf_ieee80211_qbss2_gl;
7066static int hf_ieee80211_qbss_cu;
7067static int hf_ieee80211_qbss2_cu;
7068static int hf_ieee80211_qbss_scount;
7069static int hf_ieee80211_qbss2_scount;
7070static int hf_ieee80211_qbss_version;
7071static int hf_ieee80211_qbss_adc;
7072
7073static int hf_ieee80211_tsinfo;
7074static int hf_ieee80211_tsinfo_type;
7075static int hf_ieee80211_tsinfo_tsid;
7076static int hf_ieee80211_tsinfo_dir;
7077static int hf_ieee80211_tsinfo_access;
7078static int hf_ieee80211_tsinfo_agg;
7079static int hf_ieee80211_tsinfo_apsd;
7080static int hf_ieee80211_tsinfo_up;
7081static int hf_ieee80211_tsinfo_ack;
7082static int hf_ieee80211_tsinfo_sched;
7083static int hf_ieee80211_tsinfo_rsv;
7084
7085static int * const ieee80211_tsinfo_fields[] = {
7086 &hf_ieee80211_tsinfo_type,
7087 &hf_ieee80211_tsinfo_tsid,
7088 &hf_ieee80211_tsinfo_dir,
7089 &hf_ieee80211_tsinfo_access,
7090 &hf_ieee80211_tsinfo_agg,
7091 &hf_ieee80211_tsinfo_apsd,
7092 &hf_ieee80211_tsinfo_up,
7093 &hf_ieee80211_tsinfo_ack,
7094 &hf_ieee80211_tsinfo_sched,
7095 &hf_ieee80211_tsinfo_rsv,
7096 NULL((void*)0)
7097};
7098
7099static int hf_ieee80211_tspec_nor_msdu;
7100static int hf_ieee80211_tspec_max_msdu;
7101static int hf_ieee80211_tspec_min_srv;
7102static int hf_ieee80211_tspec_max_srv;
7103static int hf_ieee80211_tspec_inact_int;
7104static int hf_ieee80211_tspec_susp_int;
7105static int hf_ieee80211_tspec_srv_start;
7106static int hf_ieee80211_tspec_min_data;
7107static int hf_ieee80211_tspec_mean_data;
7108static int hf_ieee80211_tspec_peak_data;
7109static int hf_ieee80211_tspec_burst_size;
7110static int hf_ieee80211_tspec_delay_bound;
7111static int hf_ieee80211_tspec_min_phy;
7112static int hf_ieee80211_tspec_surplus;
7113static int hf_ieee80211_tspec_medium;
7114static int hf_ieee80211_tspec_dmg;
7115static int hf_ieee80211_ts_delay;
7116static int hf_ieee80211_tclas_process;
7117static int hf_ieee80211_tag_ext_supp_rates;
7118static int hf_ieee80211_sched_info;
7119static int hf_ieee80211_sched_info_agg;
7120static int hf_ieee80211_sched_info_tsid;
7121static int hf_ieee80211_sched_info_dir;
7122static int hf_ieee80211_sched_srv_start;
7123static int hf_ieee80211_sched_srv_int;
7124static int hf_ieee80211_sched_spec_int;
7125static int hf_ieee80211_tclas_up;
7126static int hf_ieee80211_tclas_class_type;
7127static int hf_ieee80211_tclas_class_mask;
7128static int hf_ieee80211_tclas_mask_reserved;
7129static int hf_ieee80211_tclas_class_mask0_src_addr;
7130static int hf_ieee80211_tclas_class_mask0_dst_addr;
7131static int hf_ieee80211_tclas_class_mask0_type;
7132static int hf_ieee80211_tclas_class_mask1_ver;
7133static int hf_ieee80211_tclas_class_mask1_src_ip;
7134static int hf_ieee80211_tclas_class_mask1_dst_ip;
7135static int hf_ieee80211_tclas_class_mask1_src_port;
7136static int hf_ieee80211_tclas_class_mask1_dst_port;
7137static int hf_ieee80211_tclas_class_mask1_ipv4_dscp;
7138static int hf_ieee80211_tclas_class_mask1_ipv4_proto;
7139static int hf_ieee80211_tclas_class_mask1_reserved;
7140static int hf_ieee80211_tclas_class_mask1_ipv6_flow;
7141static int hf_ieee80211_tclas_class_mask2_tci;
7142static int hf_ieee80211_tclas_src_mac_addr;
7143static int hf_ieee80211_tclas_dst_mac_addr;
7144static int hf_ieee80211_tclas_ether_type;
7145static int hf_ieee80211_tclas_version;
7146static int hf_ieee80211_tclas_ipv4_src;
7147static int hf_ieee80211_tclas_ipv4_dst;
7148static int hf_ieee80211_tclas_src_port;
7149static int hf_ieee80211_tclas_dst_port;
7150static int hf_ieee80211_tclas_dscp;
7151static int hf_ieee80211_tclas_protocol;
7152static int hf_ieee80211_tclas_ipv6_src;
7153static int hf_ieee80211_tclas_ipv6_dst;
7154static int hf_ieee80211_tclas_flow;
7155static int hf_ieee80211_tclas_tag_type;
7156static int hf_ieee80211_tclas_filter_offset;
7157static int hf_ieee80211_tclas_filter_value;
7158static int hf_ieee80211_tclas_filter_mask;
7159static int hf_ieee80211_tclas4_version;
7160static int hf_ieee80211_tclas_class_mask4_ver;
7161static int hf_ieee80211_tclas_class_mask4_4_src_ip;
7162static int hf_ieee80211_tclas_class_mask4_4_dst_ip;
7163static int hf_ieee80211_tclas_class_mask4_src_port;
7164static int hf_ieee80211_tclas_class_mask4_dst_port;
7165static int hf_ieee80211_tclas_class_mask4_dscp;
7166static int hf_ieee80211_tclas_class_mask4_ipv4_proto;
7167static int hf_ieee80211_tclas_class_mask4_reserved;
7168static int hf_ieee80211_tclas_class_mask4_6_src_ip;
7169static int hf_ieee80211_tclas_class_mask4_6_dst_ip;
7170static int hf_ieee80211_tclas_reserved_bytes;
7171static int hf_ieee80211_tclas_class_mask4_next_hdr;
7172static int hf_ieee80211_tclas_class_mask4_flow_label;
7173static int hf_ieee80211_tclas4_ipv4_src;
7174static int hf_ieee80211_tclas4_ipv4_dst;
7175static int hf_ieee80211_tclas4_src_port;
7176static int hf_ieee80211_tclas4_dst_port;
7177static int hf_ieee80211_tclas4_dscp;
7178static int hf_ieee80211_tclas4_protocol;
7179static int hf_ieee80211_tclas4_reserved;
7180static int hf_ieee80211_tclas4_ipv6_src;
7181static int hf_ieee80211_tclas4_ipv6_dst;
7182static int hf_ieee80211_tclas4_next_hdr;
7183static int hf_ieee80211_tclas4_flow;
7184static int hf_ieee80211_tclas_tclas_8021d_up_pcp;
7185static int hf_ieee80211_tclas_8021q_dei;
7186static int hf_ieee80211_tclas_8021q_vid;
7187
7188static int hf_ieee80211_tclas_class_mask5_up_prio;
7189static int hf_ieee80211_tclas_class_mask5_dei;
7190static int hf_ieee80211_tclas_class_mask5_vid;
7191static int hf_ieee80211_tclas_class_mask5_reserved;
7192
7193static int hf_ieee80211_tclas_class_mask6_a_above;
7194static int hf_ieee80211_tclas_class_mask6_frame_control_match_spec;
7195static int hf_ieee80211_tclas_class_mask6_duration_id_match_spec;
7196static int hf_ieee80211_tclas_class_mask6_address_1_match_spec;
7197static int hf_ieee80211_tclas_class_mask6_address_2_match_spec;
7198static int hf_ieee80211_tclas_class_mask6_address_3_match_spec;
7199static int hf_ieee80211_tclas_class_mask6_sequence_control_spec;
7200static int hf_ieee80211_tclas_class_mask6_address_4_match_spec;
7201static int hf_ieee80211_tclas_class_mask6_qos_control_spec;
7202static int hf_ieee80211_tclas_class_mask6_ht_control_spec;
7203static int hf_ieee80211_tclas_class_mask6_reserved;
7204static int hf_ieee80211_tclas6_frame_control_spec;
7205static int hf_ieee80211_tclas6_frame_control_mask;
7206static int hf_ieee80211_tclas6_duration_spec;
7207static int hf_ieee80211_tclas6_duration_mask;
7208static int hf_ieee80211_tclas6_address_1_spec;
7209static int hf_ieee80211_tclas6_address_1_mask;
7210static int hf_ieee80211_tclas6_address_2_spec;
7211static int hf_ieee80211_tclas6_address_2_mask;
7212static int hf_ieee80211_tclas6_address_3_spec;
7213static int hf_ieee80211_tclas6_address_3_mask;
7214static int hf_ieee80211_tclas6_sequence_control_spec;
7215static int hf_ieee80211_tclas6_sequence_control_mask;
7216static int hf_ieee80211_tclas6_address_4_spec;
7217static int hf_ieee80211_tclas6_address_4_mask;
7218static int hf_ieee80211_tclas6_qos_control_spec;
7219static int hf_ieee80211_tclas6_qos_control_mask;
7220static int hf_ieee80211_tclas6_ht_control_spec;
7221static int hf_ieee80211_tclas6_ht_control_mask;
7222
7223static int hf_ieee80211_tclas_class_mask7_frame_control_match_spec;
7224static int hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec;
7225static int hf_ieee80211_tclas_class_mask7_address_2_match_spec;
7226static int hf_ieee80211_tclas_class_mask7_sequence_control_spec;
7227static int hf_ieee80211_tclas_class_mask7_address_3_match_spec;
7228static int hf_ieee80211_tclas_class_mask7_address_4_match_spec;
7229static int hf_ieee80211_tclas_class_mask7_reserved;
7230static int hf_ieee80211_tclas7_frame_control_spec;
7231static int hf_ieee80211_tclas7_frame_control_mask;
7232static int hf_ieee80211_tclas7_address_1_sid_spec;
7233static int hf_ieee80211_tclas7_address_1_sid_mask;
7234static int hf_ieee80211_tclas7_address_2_spec;
7235static int hf_ieee80211_tclas7_address_2_mask;
7236static int hf_ieee80211_tclas7_sequence_control_spec;
7237static int hf_ieee80211_tclas7_sequence_control_mask;
7238static int hf_ieee80211_tclas7_address_3_spec;
7239static int hf_ieee80211_tclas7_address_3_mask;
7240static int hf_ieee80211_tclas7_address_4_spec;
7241static int hf_ieee80211_tclas7_address_4_mask;
7242
7243static int hf_ieee80211_tclas_class_mask8_frame_control_match_spec;
7244static int hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec;
7245static int hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec;
7246static int hf_ieee80211_tclas_class_mask8_sequence_control_spec;
7247static int hf_ieee80211_tclas_class_mask8_address_3_match_spec;
7248static int hf_ieee80211_tclas_class_mask8_address_4_match_spec;
7249static int hf_ieee80211_tclas_class_mask8_reserved;
7250static int hf_ieee80211_tclas8_frame_control_spec;
7251static int hf_ieee80211_tclas8_frame_control_mask;
7252static int hf_ieee80211_tclas8_address_1_bssid_spec;
7253static int hf_ieee80211_tclas8_address_1_bssid_mask;
7254static int hf_ieee80211_tclas8_address_2_sid_spec;
7255static int hf_ieee80211_tclas8_address_2_sid_mask;
7256static int hf_ieee80211_tclas8_sequence_control_spec;
7257static int hf_ieee80211_tclas8_sequence_control_mask;
7258static int hf_ieee80211_tclas8_address_3_spec;
7259static int hf_ieee80211_tclas8_address_3_mask;
7260static int hf_ieee80211_tclas8_address_4_spec;
7261static int hf_ieee80211_tclas8_address_4_mask;
7262
7263static int hf_ieee80211_tclas_class_mask9_frame_control_match_spec;
7264static int hf_ieee80211_tclas_class_mask9_address_1_match_spec;
7265static int hf_ieee80211_tclas_class_mask9_address_2_match_spec;
7266static int hf_ieee80211_tclas_class_mask9_sequence_control_spec;
7267static int hf_ieee80211_tclas_class_mask9_reserved;
7268static int hf_ieee80211_tclas9_frame_control_spec;
7269static int hf_ieee80211_tclas9_frame_control_mask;
7270static int hf_ieee80211_tclas9_address_1_spec;
7271static int hf_ieee80211_tclas9_address_1_mask;
7272static int hf_ieee80211_tclas9_address_2_spec;
7273static int hf_ieee80211_tclas9_address_2_mask;
7274static int hf_ieee80211_tclas9_sequence_control_spec;
7275static int hf_ieee80211_tclas9_sequence_control_mask;
7276
7277static int hf_ieee80211_tclas10_protocol_instance;
7278static int hf_ieee80211_tclas10_protocol_num_next_hdr;
7279
7280static int hf_ieee80211_aruba;
7281static int hf_ieee80211_aruba_hb_seq;
7282static int hf_ieee80211_aruba_mtu;
7283
7284static int hf_ieee80211_tag_vendor_oui_type;
7285static int hf_ieee80211_tag_vendor_data;
7286
7287static int hf_ieee80211_symbp_extreme_assoc_clients;
7288static int hf_ieee80211_symbp_extreme_load_kbps;
7289static int hf_ieee80211_symbp_extreme_load_pps;
7290static int hf_ieee80211_symbp_extreme_client_tx_power;
7291static int hf_ieee80211_symbp_extreme_timestamp;
7292
7293static int hf_ieee80211_tag_symbol_proprietary_oui;
7294static int hf_ieee80211_tag_symbol_proprietary_data;
7295
7296/* IEEE Std 802.11z-2010 7.3.2.62 */
7297static int hf_ieee80211_tag_link_id_bssid;
7298static int hf_ieee80211_tag_link_id_init_sta;
7299static int hf_ieee80211_tag_link_id_resp_sta;
7300
7301/* IEEE Std 802.11z-2010 7.3.2.63 */
7302static int hf_ieee80211_tag_wakeup_schedule_offset;
7303static int hf_ieee80211_tag_wakeup_schedule_interval;
7304static int hf_ieee80211_tag_wakeup_schedule_awake_window_slots;
7305static int hf_ieee80211_tag_wakeup_schedule_max_awake_dur;
7306static int hf_ieee80211_tag_wakeup_schedule_idle_count;
7307
7308/* IEEE Std 802.11z-2010 7.3.2.64 */
7309static int hf_ieee80211_tag_channel_switch_timing_switch_time;
7310static int hf_ieee80211_tag_channel_switch_timing_switch_timeout;
7311
7312/* IEEE Std 802.11z-2010 7.3.2.65 */
7313static int hf_ieee80211_tag_pti_control_tid;
7314static int hf_ieee80211_tag_pti_control_sequence_control;
7315
7316/* IEEE Std 802.11z-2010 7.3.2.66 */
7317static int hf_ieee80211_tag_pu_buffer_status_ac_bk;
7318static int hf_ieee80211_tag_pu_buffer_status_ac_be;
7319static int hf_ieee80211_tag_pu_buffer_status_ac_vi;
7320static int hf_ieee80211_tag_pu_buffer_status_ac_vo;
7321
7322/* IEEE Std 802.11r-2008 7.3.2.49 */
7323static int hf_ieee80211_tag_timeout_int_type;
7324static int hf_ieee80211_tag_timeout_int_value;
7325
7326/* Ethertype 89-0d */
7327static int hf_ieee80211_data_encap_payload_type;
7328
7329static int hf_ieee80211_anqp_wfa_subtype;
7330
7331static int hf_ieee80211_dpp_subtype;
7332
7333/* Hotspot 2.0 */
7334static int hf_ieee80211_hs20_indication_dgaf_disabled;
7335static int hf_ieee80211_hs20_indication_pps_mo_id_present;
7336static int hf_ieee80211_hs20_indication_anqp_domain_id_present;
7337static int hf_ieee80211_hs20_reserved;
7338static int hf_ieee80211_hs20_indication_version_number;
7339static int hf_ieee80211_hs20_indication_pps_mo_id;
7340static int hf_ieee80211_hs20_indication_anqp_domain_id;
7341
7342static int hf_ieee80211_hs20_anqp_subtype;
7343static int hf_ieee80211_hs20_anqp_reserved;
7344static int hf_ieee80211_hs20_anqp_payload;
7345static int hf_ieee80211_hs20_anqp_hs_query_list;
7346static int hf_ieee80211_hs20_anqp_hs_capability_list;
7347static int hf_ieee80211_hs20_anqp_ofn_length;
7348static int hf_ieee80211_hs20_anqp_ofn_language;
7349static int hf_ieee80211_hs20_anqp_ofn_name;
7350static int hf_ieee80211_hs20_anqp_wan_metrics_link_status;
7351static int hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link;
7352static int hf_ieee80211_hs20_anqp_wan_metrics_at_capacity;
7353static int hf_ieee80211_hs20_anqp_wan_metrics_reserved;
7354static int hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed;
7355static int hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed;
7356static int hf_ieee80211_hs20_anqp_wan_metrics_downlink_load;
7357static int hf_ieee80211_hs20_anqp_wan_metrics_uplink_load;
7358static int hf_ieee80211_hs20_anqp_wan_metrics_lmd;
7359static int hf_ieee80211_hs20_anqp_cc_proto_ip_proto;
7360static int hf_ieee80211_hs20_anqp_cc_proto_port_num;
7361static int hf_ieee80211_hs20_anqp_cc_proto_status;
7362static int hf_ieee80211_hs20_anqp_nai_hrq_count;
7363static int hf_ieee80211_hs20_anqp_nai_hrq_encoding_type;
7364static int hf_ieee80211_hs20_anqp_nai_hrq_length;
7365static int hf_ieee80211_hs20_anqp_nai_hrq_realm_name;
7366static int hf_ieee80211_hs20_anqp_oper_class_indic;
7367static int hf_ieee80211_hs20_osu_friendly_names_len;
7368static int hf_ieee80211_hs20_osu_friendly_name_length;
7369static int hf_ieee80211_hs20_osu_friendly_name_language;
7370static int hf_ieee80211_hs20_osu_friendly_name_name;
7371static int hf_ieee80211_hs20_osu_server_uri_len;
7372static int hf_ieee80211_hs20_osu_server_uri;
7373static int hf_ieee80211_hs20_osu_method_list_len;
7374static int hf_ieee80211_hs20_osu_method_val;
7375static int hf_ieee80211_hs20_icons_avail_len;
7376static int hf_ieee80211_hs20_osu_providers_list_ssid_len;
7377static int hf_ieee80211_hs20_osu_providers_ssid;
7378static int hf_ieee80211_hs20_osu_providers_count;
7379static int hf_ieee80211_hs20_osu_prov_length;
7380static int hf_ieee80211_hs20_icon_request_filename;
7381static int hf_ieee80211_hs20_icon_binary_file_status;
7382static int hf_ieee80211_hs20_icon_type_length;
7383static int hf_ieee80211_hs20_icon_type;
7384static int hf_ieee80211_hs20_icon_binary_data_len;
7385static int hf_ieee80211_hs20_icon_binary_data;
7386static int hf_ieee80211_osu_icon_avail_width;
7387static int hf_ieee80211_osu_icon_avail_height;
7388static int hf_ieee80211_osu_icon_avail_lang_code;
7389static int hf_ieee80211_osu_icon_avail_icon_type_len;
7390static int hf_ieee80211_osu_icon_avail_icon_type;
7391static int hf_ieee80211_osu_icon_avail_filename_len;
7392static int hf_ieee80211_osu_icon_avail_filename;
7393static int hf_ieee80211_hs20_osu_nai_len;
7394static int hf_ieee80211_hs20_osu_nai;
7395static int hf_ieee80211_hs20_osu_service_desc_len;
7396static int hf_ieee80211_hs20_osu_service_desc_duple_len;
7397static int hf_ieee80211_hs20_osu_service_desc_lang;
7398static int hf_ieee80211_hs20_osu_service_desc;
7399static int hf_ieee80211_hs20_anqp_venue_url_length;
7400static int hf_ieee80211_hs20_anqp_venue_number;
7401static int hf_ieee80211_hs20_anqp_venue_url;
7402static int hf_ieee80211_hs20_anqp_advice_of_charge_length;
7403static int hf_ieee80211_hs20_anqp_advice_of_charge_type;
7404static int hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding;
7405static int hf_ieee80211_hs20_anqp_aoc_nai_realm_len;
7406static int hf_ieee80211_hs20_anqp_aoc_nai_realm;
7407static int hf_ieee80211_hs20_anqp_aoc_plan_len;
7408static int hf_ieee80211_hs20_anqp_aoc_plan_lang;
7409static int hf_ieee80211_hs20_anqp_aoc_plan_curcy;
7410static int hf_ieee80211_hs20_anqp_aoc_plan_information;
7411
7412static int hf_ieee80211_hs20_subscription_remediation_url_len;
7413static int hf_ieee80211_hs20_subscription_remediation_server_url;
7414static int hf_ieee80211_hs20_subscription_remediation_server_method;
7415static int hf_ieee80211_hs20_deauth_reason_code;
7416static int hf_ieee80211_hs20_reauth_delay;
7417static int hf_ieee80211_hs20_deauth_reason_url_len;
7418static int hf_ieee80211_hs20_deauth_imminent_reason_url;
7419
7420/* IEEE Std 802.11ai : FILS Discovery */
7421static int hf_ieee80211_ff_fils_discovery_frame_control;
7422static int hf_ieee80211_ff_fils_discovery_frame_control_ssid_length;
7423static int hf_ieee80211_ff_fils_discovery_frame_control_capability;
7424static int hf_ieee80211_ff_fils_discovery_frame_control_short_ssid;
7425static int hf_ieee80211_ff_fils_discovery_frame_control_ap_csn;
7426static int hf_ieee80211_ff_fils_discovery_frame_control_ano;
7427static int hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency;
7428static int hf_ieee80211_ff_fils_discovery_frame_control_primary_channel;
7429static int hf_ieee80211_ff_fils_discovery_frame_control_rsn_info;
7430static int hf_ieee80211_ff_fils_discovery_frame_control_length;
7431static int hf_ieee80211_ff_fils_discovery_frame_control_md;
7432static int hf_ieee80211_ff_fils_discovery_frame_control_reserved;
7433static int hf_ieee80211_ff_fils_discovery_ssid;
7434static int hf_ieee80211_ff_fils_discovery_capability;
7435static int hf_ieee80211_ff_fils_discovery_capability_ess;
7436static int hf_ieee80211_ff_fils_discovery_capability_privacy;
7437static int hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width;
7438static int hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams;
7439static int hf_ieee80211_ff_fils_discovery_capability_reserved;
7440static int hf_ieee80211_ff_fils_discovery_capability_multiple_bssid;
7441static int hf_ieee80211_ff_fils_discovery_capability_phy_index;
7442static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss;
7443static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm;
7444static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht;
7445static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he;
7446static int hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate;
7447
7448static int hf_ieee80211_ff_fils_discovery_short_ssid;
7449static int hf_ieee80211_ff_fils_discovery_ap_csn;
7450static int hf_ieee80211_ff_fils_discovery_ano;
7451static int hf_ieee80211_ff_fils_discovery_ccfs1;
7452static int hf_ieee80211_ff_fils_discovery_operating_class;
7453static int hf_ieee80211_ff_fils_discovery_primary_channel;
7454static int hf_ieee80211_ff_fils_discovery_rsn_info;
7455static int hf_ieee80211_ff_fils_discovery_length;
7456static int hf_ieee80211_ff_fils_discovery_md;
7457
7458/* IEEE Std 802.11ad */
7459static int hf_ieee80211_block_ack_RBUFCAP;
7460static int hf_ieee80211_cf_response_offset;
7461static int hf_ieee80211_grant_ack_reserved;
7462static int hf_ieee80211_ff_dynamic_allocation;
7463static int hf_ieee80211_ff_TID;
7464static int hf_ieee80211_ff_alloc_type;
7465static int hf_ieee80211_ff_src_aid;
7466static int hf_ieee80211_ff_dest_aid;
7467static int hf_ieee80211_ff_alloc_duration;
7468static int hf_ieee80211_ff_b39;
7469static int hf_ieee80211_ff_ssw;
7470static int hf_ieee80211_ff_ssw_direction;
7471static int hf_ieee80211_ff_ssw_cdown;
7472static int hf_ieee80211_ff_ssw_sector_id;
7473static int hf_ieee80211_ff_ssw_dmg_ant_id;
7474static int hf_ieee80211_ff_ssw_rxss_len;
7475static int hf_ieee80211_ff_bf;
7476static int hf_ieee80211_ff_bf_train;
7477static int hf_ieee80211_ff_bf_is_init;
7478static int hf_ieee80211_ff_bf_is_resp;
7479static int hf_ieee80211_ff_bf_num_sectors;
7480static int hf_ieee80211_ff_bf_num_rx_dmg_ants;
7481static int hf_ieee80211_ff_bf_b12b15;
7482static int hf_ieee80211_ff_bf_rxss_len;
7483static int hf_ieee80211_ff_bf_rxss_rate;
7484static int hf_ieee80211_ff_bf_b10b15;
7485static int hf_ieee80211_addr_nav_da;
7486static int hf_ieee80211_addr_nav_sa;
7487static int hf_ieee80211_ff_sswf;
7488static int hf_ieee80211_ff_sswf_num_rx_dmg_ants;
7489static int hf_ieee80211_ff_sswf_poll_required;
7490static int hf_ieee80211_ff_sswf_total_sectors;
7491static int hf_ieee80211_ff_sswf_reserved1;
7492static int hf_ieee80211_ff_sswf_reserved2;
7493static int hf_ieee80211_ff_sswf_sector_select;
7494static int hf_ieee80211_ff_sswf_dmg_antenna_select;
7495static int hf_ieee80211_ff_sswf_snr_report;
7496static int hf_ieee80211_ff_brp;
7497static int hf_ieee80211_ff_brp_L_RX;
7498static int hf_ieee80211_ff_brp_TX_TRN_REQ;
7499static int hf_ieee80211_ff_brp_MID_REQ;
7500static int hf_ieee80211_ff_brp_BC_REQ;
7501static int hf_ieee80211_ff_brp_MID_GRANT;
7502static int hf_ieee80211_ff_brp_BC_GRANT;
7503static int hf_ieee80211_ff_brp_chan_FBCK_CAP;
7504static int hf_ieee80211_ff_brp_tx_sector;
7505static int hf_ieee80211_ff_brp_other_aid;
7506static int hf_ieee80211_ff_brp_tx_antenna;
7507static int hf_ieee80211_ff_brp_reserved;
7508static int hf_ieee80211_ff_blm;
7509static int hf_ieee80211_ff_blm_unit_index;
7510static int hf_ieee80211_ff_blm_maint_value;
7511static int hf_ieee80211_ff_blm_is_master;
7512static int hf_ieee80211_ff_bic;
7513static int hf_ieee80211_ff_bic_cc_present;
7514static int hf_ieee80211_ff_bic_discovery_mode;
7515static int hf_ieee80211_ff_bic_next_beacon;
7516static int hf_ieee80211_ff_bic_ati_present;
7517static int hf_ieee80211_ff_bic_abft_len;
7518static int hf_ieee80211_ff_bic_fss;
7519static int hf_ieee80211_ff_bic_is_resp;
7520static int hf_ieee80211_ff_bic_next_abft;
7521static int hf_ieee80211_ff_bic_frag_txss;
7522static int hf_ieee80211_ff_bic_txss_span;
7523static int hf_ieee80211_ff_bic_NBI_abft;
7524static int hf_ieee80211_ff_bic_abft_count;
7525static int hf_ieee80211_ff_bic_nabft;
7526static int hf_ieee80211_ff_bic_pcp;
7527static int hf_ieee80211_ff_bic_reserved;
7528static int * const ieee80211_ff_bic_fields[] = {
7529 &hf_ieee80211_ff_bic_cc_present,
7530 &hf_ieee80211_ff_bic_discovery_mode,
7531 &hf_ieee80211_ff_bic_next_beacon,
7532 &hf_ieee80211_ff_bic_ati_present,
7533 &hf_ieee80211_ff_bic_abft_len,
7534 &hf_ieee80211_ff_bic_fss,
7535 &hf_ieee80211_ff_bic_is_resp,
7536 &hf_ieee80211_ff_bic_next_abft,
7537 &hf_ieee80211_ff_bic_frag_txss,
7538 &hf_ieee80211_ff_bic_txss_span,
7539 &hf_ieee80211_ff_bic_NBI_abft,
7540 &hf_ieee80211_ff_bic_abft_count,
7541 &hf_ieee80211_ff_bic_nabft,
7542 &hf_ieee80211_ff_bic_pcp,
7543 &hf_ieee80211_ff_bic_reserved,
7544 NULL((void*)0)
7545};
7546static int hf_ieee80211_ff_dmg_params;
7547static int hf_ieee80211_ff_dmg_params_bss;
7548static int hf_ieee80211_ff_dmg_params_cbap_only;
7549static int hf_ieee80211_ff_dmg_params_cbap_src;
7550static int hf_ieee80211_ff_dmg_params_privacy;
7551static int hf_ieee80211_ff_dmg_params_policy;
7552static int hf_ieee80211_ff_dmg_params_spec_mgmt;
7553static int hf_ieee80211_ff_dmg_params_radio_measure;
7554static int hf_ieee80211_ff_cc;
7555static int hf_ieee80211_ff_cc_abft_resp_addr;
7556static int hf_ieee80211_ff_cc_sp_duration;
7557static int hf_ieee80211_ff_cc_cluster_id;
7558static int hf_ieee80211_ff_cc_role;
7559static int hf_ieee80211_ff_cc_max_mem;
7560static int hf_ieee80211_ff_dmg_action_code;
7561static int hf_ieee80211_ff_dmg_pwr_mgmt;
7562static int hf_ieee80211_ff_subject_address;
7563static int hf_ieee80211_ff_handover_reason;
7564static int hf_ieee80211_ff_handover_remaining_bi;
7565static int hf_ieee80211_ff_handover_result;
7566static int hf_ieee80211_ff_handover_reject_reason;
7567static int hf_ieee80211_ff_destination_reds_aid;
7568static int hf_ieee80211_ff_destination_aid;
7569static int hf_ieee80211_ff_relay_aid;
7570static int hf_ieee80211_ff_source_aid;
7571static int hf_ieee80211_ff_timing_offset;
7572static int hf_ieee80211_ff_sampling_frequency_offset;
7573static int hf_ieee80211_ff_relay_operation_type;
7574static int hf_ieee80211_ff_peer_sta_aid;
7575static int hf_ieee80211_ff_snr;
7576static int hf_ieee80211_ff_internal_angle;
7577static int hf_ieee80211_ff_recommend;
7578static int hf_ieee80211_ff_unprotected_dmg_action_code;
7579static int hf_ieee80211_ff_fst_action_code;
7580static int hf_ieee80211_ff_robust_av_streaming_action_code;
7581static int hf_ieee80211_ff_llt;
7582static int hf_ieee80211_ff_fsts_id;
7583static int hf_ieee80211_ff_mmpdu_len;
7584static int hf_ieee80211_ff_mmpdu_ctrl;
7585static int hf_ieee80211_ff_oct_mmpdu;
7586static int hf_ieee80211_ff_scs_scsid;
7587static int hf_ieee80211_ff_scs_status;
7588static int hf_ieee80211_ff_scs_response_count;
7589
7590#if 0
7591static int hf_ieee80211_ff_rcsi;
7592static int hf_ieee80211_ff_rcsi_aid;
7593#endif
7594static int hf_ieee80211_ff_band_id;
7595static int hf_ieee80211_tag_relay_support;
7596static int hf_ieee80211_tag_relay_use;
7597static int hf_ieee80211_tag_relay_permission;
7598static int hf_ieee80211_tag_AC_power;
7599static int hf_ieee80211_tag_relay_prefer;
7600static int hf_ieee80211_tag_duplex;
7601static int hf_ieee80211_tag_cooperation;
7602static int hf_ieee80211_tag_move;
7603static int hf_ieee80211_tag_size;
7604static int hf_ieee80211_tag_tbtt_offset;
7605static int hf_ieee80211_tag_bi_duration;
7606static int hf_ieee80211_tag_dmg_capa_sta_addr;
7607static int hf_ieee80211_tag_dmg_capa_aid;
7608static int hf_ieee80211_tag_reverse_direction;
7609static int hf_ieee80211_tag_hlts;
7610static int hf_ieee80211_tag_tpc;
7611static int hf_ieee80211_tag_spsh;
7612static int hf_ieee80211_tag_rx_antenna;
7613static int hf_ieee80211_tag_fast_link;
7614static int hf_ieee80211_tag_num_sectors;
7615static int hf_ieee80211_tag_rxss_length;
7616static int hf_ieee80211_tag_reciprocity;
7617static int hf_ieee80211_tag_max_ampdu_exp;
7618static int hf_ieee80211_tag_min_mpdu_spacing;
7619static int hf_ieee80211_tag_ba_flow_control;
7620static int hf_ieee80211_tag_max_sc_rx_mcs;
7621static int hf_ieee80211_tag_max_ofdm_rx_mcs;
7622static int hf_ieee80211_tag_max_sc_tx_mcs;
7623static int hf_ieee80211_tag_max_ofdm_tx_mcs;
7624static int hf_ieee80211_tag_low_power_supported;
7625static int hf_ieee80211_tag_code_rate;
7626static int hf_ieee80211_tag_dtp;
7627static int hf_ieee80211_tag_appdu_supp;
7628static int hf_ieee80211_tag_heartbeat;
7629static int hf_ieee80211_tag_other_aid;
7630static int hf_ieee80211_tag_pattern_recip;
7631static int hf_ieee80211_tag_heartbeat_elapsed;
7632static int hf_ieee80211_tag_grant_ack_supp;
7633static int hf_ieee80211_tag_RXSSTxRate_supp;
7634static int hf_ieee80211_tag_pcp_tddti;
7635static int hf_ieee80211_tag_pcp_PSA;
7636static int hf_ieee80211_tag_pcp_handover;
7637static int hf_ieee80211_tag_pcp_max_assoc;
7638static int hf_ieee80211_tag_pcp_power_src;
7639static int hf_ieee80211_tag_pcp_decenter;
7640static int hf_ieee80211_tag_pcp_forwarding;
7641static int hf_ieee80211_tag_pcp_center;
7642static int hf_ieee80211_tag_sta_beam_track;
7643static int hf_ieee80211_tag_ext_sc_mcs_max_tx;
7644static int hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8;
7645static int hf_ieee80211_tag_ext_sc_mcs_max_rx;
7646static int hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8;
7647static int hf_ieee80211_tag_max_basic_sf_amsdu;
7648static int hf_ieee80211_tag_max_short_sf_amsdu;
7649static int hf_ieee80211_tag_PSRSI;
7650static int hf_ieee80211_tag_min_BHI_duration;
7651static int hf_ieee80211_tag_brdct_sta_info_dur;
7652static int hf_ieee80211_tag_assoc_resp_confirm_time;
7653static int hf_ieee80211_tag_min_pp_duration;
7654static int hf_ieee80211_tag_SP_idle_timeout;
7655static int hf_ieee80211_tag_max_lost_beacons;
7656static int hf_ieee80211_tag_type;
7657static int hf_ieee80211_tag_tap1;
7658static int hf_ieee80211_tag_state1;
7659static int hf_ieee80211_tag_tap2;
7660static int hf_ieee80211_tag_state2;
7661static int hf_ieee80211_tag_allocation_id;
7662static int hf_ieee80211_tag_allocation_type;
7663static int hf_ieee80211_tag_pseudo_static;
7664static int hf_ieee80211_tag_truncatable;
7665static int hf_ieee80211_tag_extendable;
7666static int hf_ieee80211_tag_pcp_active;
7667static int hf_ieee80211_tag_lp_sc_used;
7668static int hf_ieee80211_tag_src_aid;
7669static int hf_ieee80211_tag_dest_aid;
7670static int hf_ieee80211_tag_alloc_start;
7671static int hf_ieee80211_tag_alloc_block_duration;
7672static int hf_ieee80211_tag_num_blocks;
7673static int hf_ieee80211_tag_alloc_block_period;
7674static int hf_ieee80211_tag_aid;
7675static int hf_ieee80211_tag_cbap;
7676static int hf_ieee80211_tag_pp_avail;
7677static int hf_ieee80211_tag_next_ati_start_time;
7678static int hf_ieee80211_tag_next_ati_duration;
7679static int hf_ieee80211_tag_old_bssid;
7680static int hf_ieee80211_tag_new_pcp_addr;
7681static int hf_ieee80211_tag_bssid;
7682static int hf_ieee80211_tag_duplex_relay;
7683static int hf_ieee80211_tag_cooperation_relay;
7684static int hf_ieee80211_tag_tx_mode;
7685static int hf_ieee80211_tag_link_change_interval;
7686static int hf_ieee80211_tag_data_sensing_time;
7687static int hf_ieee80211_tag_first_period;
7688static int hf_ieee80211_tag_second_period;
7689static int hf_ieee80211_tag_initiator;
7690static int hf_ieee80211_tag_tx_train_res;
7691static int hf_ieee80211_tag_rx_train_res;
7692static int hf_ieee80211_tag_tx_trn_ok;
7693static int hf_ieee80211_tag_txss_fbck_req;
7694static int hf_ieee80211_tag_bs_fbck;
7695static int hf_ieee80211_tag_bs_fbck_antenna_id;
7696static int hf_ieee80211_tag_snr_requested;
7697static int hf_ieee80211_tag_channel_measurement_requested;
7698static int hf_ieee80211_tag_number_of_taps_requested;
7699static int hf_ieee80211_tag_sector_id_order_req;
7700static int hf_ieee80211_tag_snr_present;
7701static int hf_ieee80211_tag_channel_measurement_present;
7702static int hf_ieee80211_tag_tap_delay_present;
7703static int hf_ieee80211_tag_number_of_taps_present;
7704static int hf_ieee80211_tag_number_of_measurement;
7705static int hf_ieee80211_tag_sector_id_order_present;
7706static int hf_ieee80211_tag_number_of_beams;
7707static int hf_ieee80211_tag_mid_extension;
7708static int hf_ieee80211_tag_capability_request;
7709static int hf_ieee80211_tag_beam_refine_reserved;
7710static int hf_ieee80211_tag_nextpcp_list;
7711static int hf_ieee80211_tag_nextpcp_token;
7712static int hf_ieee80211_tag_remaining_BI;
7713static int hf_ieee80211_tag_request_token;
7714static int hf_ieee80211_tag_bi_start_time;
7715static int hf_ieee80211_tag_sleep_cycle;
7716static int hf_ieee80211_tag_num_awake_bis;
7717static int hf_ieee80211_tag_tspec_allocation_id;
7718static int hf_ieee80211_tag_tspec_allocation_type;
7719static int hf_ieee80211_tag_tspec_allocation_format;
7720static int hf_ieee80211_tag_tspec_pseudo_static;
7721static int hf_ieee80211_tag_tspec_truncatable;
7722static int hf_ieee80211_tag_tspec_extendable;
7723static int hf_ieee80211_tag_tspec_lp_sc_used;
7724static int hf_ieee80211_tag_tspec_up;
7725static int hf_ieee80211_tag_tspec_dest_aid;
7726static int hf_ieee80211_tag_tspec_allocation_period;
7727static int hf_ieee80211_tag_tspec_min_allocation;
7728static int hf_ieee80211_tag_tspec_max_allocation;
7729static int hf_ieee80211_tag_tspec_min_duration;
7730static int hf_ieee80211_tag_tspec_num_of_constraints;
7731static int hf_ieee80211_tag_tspec_tsconst_start_time;
7732static int hf_ieee80211_tag_tspec_tsconst_duration;
7733static int hf_ieee80211_tag_tspec_tsconst_period;
7734static int hf_ieee80211_tag_tspec_tsconst_interferer_mac;
7735static int hf_ieee80211_tag_channel_measurement_feedback_relative_I;
7736static int hf_ieee80211_tag_channel_measurement_feedback_relative_Q;
7737static int hf_ieee80211_tag_channel_measurement_feedback_tap_delay;
7738static int hf_ieee80211_tag_channel_measurement_feedback_sector_id;
7739static int hf_ieee80211_tag_channel_measurement_feedback_antenna_id;
7740static int hf_ieee80211_tag_awake_window;
7741static int hf_ieee80211_tag_addba_ext_no_frag;
7742static int hf_ieee80211_tag_addba_ext_he_fragmentation_operation;
7743static int hf_ieee80211_tag_addba_ext_reserved;
7744static int hf_ieee80211_tag_addba_ext_buffer_size;
7745static int hf_ieee80211_tag_multi_band_ctrl_sta_role;
7746static int hf_ieee80211_tag_multi_band_ctrl_addr_present;
7747static int hf_ieee80211_tag_multi_band_ctrl_cipher_present;
7748static int hf_ieee80211_tag_multi_band_oper_class;
7749static int hf_ieee80211_tag_multi_band_channel_number;
7750static int hf_ieee80211_tag_multi_band_tsf_offset;
7751static int hf_ieee80211_tag_multi_band_conn_ap;
7752static int hf_ieee80211_tag_multi_band_conn_pcp;
7753static int hf_ieee80211_tag_multi_band_conn_dls;
7754static int hf_ieee80211_tag_multi_band_conn_tdls;
7755static int hf_ieee80211_tag_multi_band_conn_ibss;
7756static int hf_ieee80211_tag_multi_band_fst_timeout;
7757static int hf_ieee80211_tag_multi_band_sta_mac;
7758static int hf_ieee80211_tag_activity;
7759static int hf_ieee80211_tag_dmg_link_adapt_mcs;
7760static int hf_ieee80211_tag_dmg_link_adapt_link_margin;
7761static int hf_ieee80211_tag_ref_timestamp;
7762static int hf_ieee80211_tag_switching_stream_non_qos;
7763static int hf_ieee80211_tag_switching_stream_param_num;
7764static int hf_ieee80211_tag_switching_stream_old_tid;
7765static int hf_ieee80211_tag_switching_stream_old_direction;
7766static int hf_ieee80211_tag_switching_stream_new_tid;
7767static int hf_ieee80211_tag_switching_stream_new_direction;
7768static int hf_ieee80211_tag_switching_stream_new_valid_id;
7769static int hf_ieee80211_tag_switching_stream_llt_type;
7770
7771static int hf_ieee80211_mysterious_extra_stuff;
7772
7773static int hf_ieee80211_mscs_descriptor_type;
7774static int hf_ieee80211_mscs_user_prio_control_reserved;
7775static int hf_ieee80211_user_prio_bitmap;
7776static int hf_ieee80211_user_prio_bitmap_bit0;
7777static int hf_ieee80211_user_prio_bitmap_bit1;
7778static int hf_ieee80211_user_prio_bitmap_bit2;
7779static int hf_ieee80211_user_prio_bitmap_bit3;
7780static int hf_ieee80211_user_prio_bitmap_bit4;
7781static int hf_ieee80211_user_prio_bitmap_bit5;
7782static int hf_ieee80211_user_prio_bitmap_bit6;
7783static int hf_ieee80211_user_prio_bitmap_bit7;
7784static int hf_ieee80211_user_prio_limit;
7785static int hf_ieee80211_user_prio_reserved;
7786static int hf_ieee80211_stream_timeout_reserved;
7787static int hf_ieee80211_stream_timeout;
7788static int hf_ieee80211_mscs_subelement_id;
7789static int hf_ieee80211_mscs_subelement_len;
7790static int hf_ieee80211_mscs_subelement_data;
7791
7792static int hf_ieee80211_intra_access_prio;
7793static int hf_ieee80211_intra_access_prio_user_prio;
7794static int hf_ieee80211_intra_access_prio_alt_queue;
7795static int hf_ieee80211_intra_access_prio_drop_elig;
7796static int hf_ieee80211_intra_access_prio_reserved;
7797
7798static int hf_ieee80211_scs_descriptor_scsid;
7799static int hf_ieee80211_scs_descriptor_type;
7800
7801static int hf_ieee80211_esp_access_category;
7802static int hf_ieee80211_esp_reserved;
7803static int hf_ieee80211_esp_data_format;
7804static int hf_ieee80211_esp_ba_windows_size;
7805static int hf_ieee80211_esp_est_air_time_frac;
7806static int hf_ieee80211_esp_data_ppdu_duration_target;
7807static int hf_ieee80211_estimated_service_params;
7808
7809static int hf_ieee80211_fcg_new_channel_number;
7810static int hf_ieee80211_fcg_extra_info;
7811static int hf_ieee80211_sae_password_identifier;
7812
7813static int hf_ieee80211_sae_anti_clogging_token;
7814
7815static int hf_ieee80211_tag_fils_indication_info_nr_pk;
7816static int hf_ieee80211_tag_fils_indication_info_nr_realm;
7817static int hf_ieee80211_tag_fils_indication_info_ip_config;
7818static int hf_ieee80211_tag_fils_indication_info_cache_id_included;
7819static int hf_ieee80211_tag_fils_indication_info_hessid_included;
7820static int hf_ieee80211_tag_fils_indication_info_ska_without_pfs;
7821static int hf_ieee80211_tag_fils_indication_info_ska_with_pfs;
7822static int hf_ieee80211_tag_fils_indication_info_pka;
7823static int hf_ieee80211_tag_fils_indication_info_reserved;
7824static int hf_ieee80211_tag_fils_indication_cache_identifier;
7825static int hf_ieee80211_tag_fils_indication_hessid;
7826static int hf_ieee80211_tag_fils_indication_realm_list;
7827static int hf_ieee80211_tag_fils_indication_realm_identifier;
7828static int hf_ieee80211_tag_fils_indication_public_key_list;
7829static int hf_ieee80211_tag_fils_indication_public_key_type;
7830static int hf_ieee80211_tag_fils_indication_public_key_length;
7831static int hf_ieee80211_tag_fils_indication_public_key_indicator;
7832
7833static int hf_ieee80211_qos_mgmt_attribute_id;
7834static int hf_ieee80211_qos_mgmt_attribute_len;
7835static int hf_ieee80211_qos_mgmt_start_port_range;
7836static int hf_ieee80211_qos_mgmt_end_port_range;
7837static int hf_ieee80211_qos_mgmt_dscp_pol_id;
7838static int hf_ieee80211_qos_mgmt_dscp_pol_req_type;
7839static int hf_ieee80211_qos_mgmt_dscp_pol_dscp;
7840static int hf_ieee80211_qos_mgmt_domain_name;
7841static int hf_ieee80211_qos_mgmt_unknown_attr;
7842
7843static int hf_ieee80211_wfa_capa_tag_data;
7844static int hf_ieee80211_wfa_capa_tag_len;
7845static int hf_ieee80211_wfa_capa_tag_capabilities;
7846static int hf_ieee80211_wfa_capa_mgmt_dscp_policy;
7847static int hf_ieee80211_wfa_capa_mgmt_unsol_dscp_policy;
7848static int hf_ieee80211_wfa_capa_mgmt_scs_traffic_desc;
7849static int hf_ieee80211_wfa_capa_5g_wifi_qos_mapping;
7850static int hf_ieee80211_wfa_capa_data_plane_stat_report;
7851static int hf_ieee80211_wfa_capa_radio_counters_stat_support;
7852static int hf_ieee80211_wfa_capa_control_plane_stat_report;
7853static int hf_ieee80211_wfa_capa_unsolicited_report_support;
7854static int hf_ieee80211_wfa_capa_attr_id;
7855static int hf_ieee80211_wfa_capa_attr_len;
7856static int hf_ieee80211_wfa_capa_attr_field;
7857static int hf_ieee80211_wfa_capa_attr_supp_gene_length;
7858static int hf_ieee80211_wfa_capa_attr_supp_generations;
7859static int hf_ieee80211_wfa_capa_attr_supp_generations_b0;
7860static int hf_ieee80211_wfa_capa_attr_supp_generations_b1;
7861static int hf_ieee80211_wfa_capa_attr_supp_generations_b2;
7862static int hf_ieee80211_wfa_capa_attr_supp_generations_b3;
7863static int hf_ieee80211_wfa_capa_attr_supp_generations_reserved;
7864static int hf_ieee80211_wfa_capa_attr_cert_gene_length;
7865static int hf_ieee80211_wfa_capa_attr_cert_generations;
7866static int hf_ieee80211_wfa_capa_attr_cert_generations_b0;
7867static int hf_ieee80211_wfa_capa_attr_cert_generations_b1;
7868static int hf_ieee80211_wfa_capa_attr_cert_generations_b2;
7869static int hf_ieee80211_wfa_capa_attr_cert_generations_b3;
7870static int hf_ieee80211_wfa_capa_attr_cert_generations_reserved;
7871
7872static int hf_ieee80211_ext_tag;
7873static int hf_ieee80211_ext_tag_number;
7874static int hf_ieee80211_ext_tag_length;
7875static int hf_ieee80211_ext_tag_data;
7876
7877static int hf_ieee80211_fils_req_params_parameter_control_bitmap;
7878static int hf_ieee80211_fils_req_params_fils_criteria_present;
7879static int hf_ieee80211_fils_req_params_max_delay_limit_present;
7880static int hf_ieee80211_fils_req_params_minimum_data_rate_present;
7881static int hf_ieee80211_fils_req_params_rcpi_limit_present;
7882static int hf_ieee80211_fils_req_params_oui_response_criteria_present;
7883static int hf_ieee80211_fils_req_params_reserved;
7884static int hf_ieee80211_fils_req_params_max_channel_time;
7885static int hf_ieee80211_fils_req_params_fils_criteria;
7886static int hf_ieee80211_fils_req_params_fils_criteria_bss_delay;
7887static int hf_ieee80211_fils_req_params_fils_criteria_phy_support;
7888static int hf_ieee80211_fils_req_params_fils_criteria_reserved;
7889static int hf_ieee80211_fils_req_params_max_delay_limit;
7890static int hf_ieee80211_fils_req_params_minimum_data_rate;
7891static int hf_ieee80211_fils_req_params_rcpi_limit;
7892static int hf_ieee80211_fils_req_params_oui_response_criteria;
7893
7894static int hf_ieee80211_fils_session;
7895static int hf_ieee80211_fils_encrypted_data;
7896static int hf_ieee80211_fils_nonce;
7897
7898/* wfa 60g ie tree */
7899static int hf_ieee80211_wfa_60g_attr;
7900static int hf_ieee80211_wfa_60g_attr_id;
7901static int hf_ieee80211_wfa_60g_attr_len;
7902
7903static int hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr;
7904static int hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames;
7905static int hf_ieee80211_wfa_60g_attr_cap_reserved;
7906
7907/* ************************************************************************* */
7908/* 802.11AX fields */
7909/* ************************************************************************* */
7910static int hf_ieee80211_he_mac_capabilities;
7911static int hf_ieee80211_he_htc_he_support;
7912static int hf_ieee80211_he_twt_requester_support;
7913static int hf_ieee80211_he_twt_responder_support;
7914static int hf_ieee80211_he_dynamic_fragmentation_support;
7915static int hf_ieee80211_he_max_number_fragmented_msdus;
7916static int hf_ieee80211_he_min_fragment_size;
7917static int hf_ieee80211_he_trigger_frame_mac_padding_dur;
7918static int hf_ieee80211_he_multi_tid_aggregation_rx_support;
7919static int hf_ieee80211_he_he_link_adaptation_support;
7920static int hf_ieee80211_he_all_ack_support;
7921static int hf_ieee80211_he_trs_support;
7922static int hf_ieee80211_he_bsr_support;
7923static int hf_ieee80211_he_broadcast_twt_support;
7924static int hf_ieee80211_he_32_bit_ba_bitmap_support;
7925static int hf_ieee80211_he_mu_cascading_support;
7926static int hf_ieee80211_he_ack_enabled_aggregation_support;
7927static int hf_ieee80211_he_reserved_b24;
7928static int hf_ieee80211_he_om_control_support;
7929static int hf_ieee80211_he_ofdma_ra_support;
7930static int hf_ieee80211_he_max_a_mpdu_length_exponent_ext;
7931static int hf_ieee80211_he_a_msdu_fragmentation_support;
7932static int hf_ieee80211_he_flexible_twt_schedule_support;
7933static int hf_ieee80211_he_rx_control_frame_to_multibss;
7934static int hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation;
7935static int hf_ieee80211_he_qtp_support;
7936static int hf_ieee80211_he_bqr_support;
7937static int hf_ieee80211_he_psr_responder;
7938static int hf_ieee80211_he_ndp_feedback_report_support;
7939static int hf_ieee80211_he_ops_support;
7940static int hf_ieee80211_he_a_msdu_in_a_mpdu_support;
7941static int hf_ieee80211_he_multi_tid_aggregation_tx_support;
7942static int hf_ieee80211_he_subchannel_selective_trans_support;
7943static int hf_ieee80211_he_2_996_tone_ru_support;
7944static int hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support;
7945static int hf_ieee80211_he_dynamic_sm_power_save;
7946static int hf_ieee80211_he_punctured_sounding_support;
7947static int hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support;
7948static int hf_ieee80211_he_reserved_bit_18;
7949static int hf_ieee80211_he_reserved_bit_19;
7950static int hf_ieee80211_he_reserved_bit_25;
7951static int hf_ieee80211_he_reserved_bit_29;
7952static int hf_ieee80211_he_reserved_bit_34;
7953static int hf_ieee80211_he_reserved_bits_5_7;
7954static int hf_ieee80211_he_reserved_bits_8_9;
7955static int hf_ieee80211_he_reserved_bits_15_16;
7956static int hf_ieee80211_he_phy_reserved_b0;
7957static int hf_ieee80211_he_phy_cap_reserved_b0;
7958static int hf_ieee80211_he_phy_chan_width_set;
7959static int hf_ieee80211_he_40mhz_channel_2_4ghz;
7960static int hf_ieee80211_he_40_and_80_mhz_5ghz;
7961static int hf_ieee80211_he_160_mhz_5ghz;
7962static int hf_ieee80211_he_160_80_plus_80_mhz_5ghz;
7963static int hf_ieee80211_he_242_tone_rus_in_2_4ghz;
7964static int hf_ieee80211_he_242_tone_rus_in_5ghz;
7965static int hf_ieee80211_he_5ghz_b0_reserved;
7966static int hf_ieee80211_he_5ghz_b4_reserved;
7967static int hf_ieee80211_he_24ghz_b1_reserved;
7968static int hf_ieee80211_he_24ghz_b2_reserved;
7969static int hf_ieee80211_he_24ghz_b3_reserved;
7970static int hf_ieee80211_he_24ghz_b5_reserved;
7971static int hf_ieee80211_he_chan_width_reserved;
7972static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss;
7973static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss;
7974static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss;
7975static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss;
7976static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss;
7977static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss;
7978static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss;
7979static int hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss;
7980static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss;
7981static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss;
7982static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss;
7983static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss;
7984static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss;
7985static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss;
7986static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss;
7987static int hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss;
7988static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss;
7989static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss;
7990static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss;
7991static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss;
7992static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss;
7993static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss;
7994static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss;
7995static int hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss;
7996static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss;
7997static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss;
7998static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss;
7999static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss;
8000static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss;
8001static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss;
8002static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss;
8003static int hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss;
8004static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss;
8005static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss;
8006static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss;
8007static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss;
8008static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss;
8009static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss;
8010static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss;
8011static int hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss;
8012static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss;
8013static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss;
8014static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss;
8015static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss;
8016static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss;
8017static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss;
8018static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss;
8019static int hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss;
8020static int hf_ieee80211_he_rx_he_mcs_map_lte_80;
8021static int hf_ieee80211_he_tx_he_mcs_map_lte_80;
8022static int hf_ieee80211_he_rx_he_mcs_map_160;
8023static int hf_ieee80211_he_tx_he_mcs_map_160;
8024static int hf_ieee80211_he_rx_he_mcs_map_80_80;
8025static int hf_ieee80211_he_tx_he_mcs_map_80_80;
8026static int hf_ieee80211_he_ppe_thresholds_nss;
8027static int hf_ieee80211_he_ppe_thresholds_ru_index_bitmask;
8028static int hf_ieee80211_he_ppe_ppet16;
8029static int hf_ieee80211_he_ppe_ppet8;
8030static int hf_ieee80211_he_phy_b8_to_b23;
8031static int hf_ieee80211_he_phy_cap_punctured_preamble_rx;
8032static int hf_ieee80211_he_phy_cap_device_class;
8033static int hf_ieee80211_he_phy_cap_ldpc_coding_in_payload;
8034static int hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us;
8035static int hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts;
8036static int hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us;
8037static int hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz;
8038static int hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz;
8039static int hf_ieee80211_he_phy_cap_doppler_tx;
8040static int hf_ieee80211_he_phy_cap_doppler_rx;
8041static int hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo;
8042static int hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo;
8043static int hf_ieee80211_he_phy_b24_to_b39;
8044static int hf_ieee80211_he_phy_cap_dcm_max_constellation_tx;
8045static int hf_ieee80211_he_phy_cap_dcm_max_nss_tx;
8046static int hf_ieee80211_he_phy_cap_dcm_max_constellation_rx;
8047static int hf_ieee80211_he_phy_cap_dcm_max_nss_rx;
8048static int hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu;
8049static int hf_ieee80211_he_phy_cap_su_beamformer;
8050static int hf_ieee80211_he_phy_cap_su_beamformee;
8051static int hf_ieee80211_he_phy_cap_mu_beamformer;
8052static int hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz;
8053static int hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz;
8054static int hf_ieee80211_he_phy_b40_to_b55;
8055static int hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80;
8056static int hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80;
8057static int hf_ieee80211_he_phy_cap_ng_eq_16_su_fb;
8058static int hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb;
8059static int hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb;
8060static int hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb;
8061static int hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb;
8062static int hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb;
8063static int hf_ieee80211_he_phy_cap_triggered_cqi_fb;
8064static int hf_ieee80211_he_phy_cap_partial_bw_extended_range;
8065static int hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo;
8066static int hf_ieee80211_he_phy_cap_ppe_threshold_present;
8067static int hf_ieee80211_he_phy_b56_to_b71;
8068static int hf_ieee80211_he_phy_cap_psr_based_sr_support;
8069static int hf_ieee80211_he_phy_cap_power_boost_factor_ar_support;
8070static int hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi;
8071static int hf_ieee80211_he_phy_cap_max_nc;
8072static int hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz;
8073static int hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz;
8074static int hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi;
8075static int hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band;
8076static int hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu;
8077static int hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu;
8078static int hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi;
8079static int hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf;
8080static int hf_ieee80211_he_phy_b72_to_b87;
8081static int hf_ieee80211_he_phy_cap_dcm_max_ru;
8082static int hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support;
8083static int hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback;
8084static int hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support;
8085static int hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support;
8086static int hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb;
8087static int hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb;
8088static int hf_ieee80211_he_phy_cap_nominal_packet_padding;
8089static int hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max;
8090static int hf_ieee80211_he_phy_cap_b81_b87_reserved;
8091static int hf_ieee80211_he_operation_parameter;
8092static int hf_ieee80211_he_operation_default_pe_duration;
8093static int hf_ieee80211_he_operation_twt_required;
8094static int hf_ieee80211_he_operation_txop_duration_rts_threshold;
8095static int hf_ieee80211_he_operation_vht_operation_information_present;
8096static int hf_ieee80211_he_operation_co_hosted_bss;
8097static int hf_ieee80211_he_operation_er_su_disable;
8098static int hf_ieee80211_he_operation_6ghz_operation_information_present;
8099static int hf_ieee80211_he_operation_reserved_b16_b23;
8100static int hf_ieee80211_he_bss_color_information;
8101static int hf_ieee80211_he_bss_color_info_bss_color;
8102static int hf_ieee80211_he_bss_color_partial_bss_color;
8103static int hf_ieee80211_he_bss_color_bss_color_disabled;
8104static int hf_ieee80211_he_operation_basic_mcs;
8105static int hf_ieee80211_he_oper_max_he_mcs_for_1_ss;
8106static int hf_ieee80211_he_oper_max_he_mcs_for_2_ss;
8107static int hf_ieee80211_he_oper_max_he_mcs_for_3_ss;
8108static int hf_ieee80211_he_oper_max_he_mcs_for_4_ss;
8109static int hf_ieee80211_he_oper_max_he_mcs_for_5_ss;
8110static int hf_ieee80211_he_oper_max_he_mcs_for_6_ss;
8111static int hf_ieee80211_he_oper_max_he_mcs_for_7_ss;
8112static int hf_ieee80211_he_oper_max_he_mcs_for_8_ss;
8113static int hf_ieee80211_he_operation_channel_width;
8114static int hf_ieee80211_he_operation_channel_center_freq_0;
8115static int hf_ieee80211_he_operation_channel_center_freq_1;
8116static int hf_ieee80211_he_operation_max_co_hosted_bssid_indicator;
8117static int hf_ieee80211_he_operation_6ghz_primary_channel;
8118static int hf_ieee80211_he_operation_6ghz_control;
8119static int hf_ieee80211_he_operation_6ghz_control_channel_width;
8120static int hf_ieee80211_he_operation_6ghz_control_duplicate_beacon;
8121static int hf_ieee80211_he_operation_6ghz_control_regulatory_info;
8122static int hf_ieee80211_he_operation_6ghz_control_reserved;
8123static int hf_ieee80211_he_operation_6ghz_channel_center_freq_0;
8124static int hf_ieee80211_he_operation_6ghz_channel_center_freq_1;
8125static int hf_ieee80211_he_operation_6ghz_minimum_rate;
8126static int hf_ieee80211_he_muac_aci_aifsn;
8127static int hf_ieee80211_he_muac_aifsn;
8128static int hf_ieee80211_he_muac_acm;
8129static int hf_ieee80211_he_muac_aci;
8130static int hf_ieee80211_he_muac_reserved;
8131static int hf_ieee80211_he_mu_edca_timer;
8132static int hf_ieee80211_he_muac_ecwmin_ecwmax;
8133static int hf_ieee80211_he_srp_disallowed;
8134static int hf_ieee80211_he_non_srg_obss_pd_sr_disallowed;
8135static int hf_ieee80211_he_non_srg_offset_present;
8136static int hf_ieee80211_he_srg_information_present;
8137static int hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed;
8138static int hf_ieee80211_he_sr_control_reserved;
8139static int hf_ieee80211_he_spatial_reuse_sr_control;
8140static int hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset;
8141static int hf_ieee80211_he_spatial_srg_obss_pd_min_offset;
8142static int hf_ieee80211_he_spatial_srg_obss_pd_max_offset;
8143static int hf_ieee80211_he_spatial_srg_bss_color_bitmap;
8144static int hf_ieee80211_he_spatial_srg_partial_bssid_bitmap;
8145static int hf_ieee80211_he_ess_report_planned_ess;
8146static int hf_ieee80211_he_ess_report_edge_of_ess;
8147static int hf_ieee80211_he_resource_request_buffer_thresh;
8148static int hf_ieee80211_he_bss_color_change_new_color_info;
8149static int hf_ieee80211_he_new_bss_color_info_color;
8150static int hf_ieee80211_he_new_bss_color_info_reserved;
8151static int hf_ieee80211_he_bss_color_change_switch_countdown;
8152static int hf_ieee80211_he_ess_report_info_field;
8153static int hf_ieee80211_he_ess_report_recommend_transition_thresh;
8154static int hf_ieee80211_he_ops_duration;
8155static int hf_ieee80211_he_uora_field;
8156static int hf_ieee80211_he_uora_eocwmin;
8157static int hf_ieee80211_he_uora_owcwmax;
8158static int hf_ieee80211_he_uora_reserved;
8159
8160static int hf_ieee80211_max_channel_switch_time;
8161
8162static int hf_ieee80211_oci_operating_class;
8163static int hf_ieee80211_oci_primary_channel_number;
8164static int hf_ieee80211_oci_frequency_segment_1;
8165static int hf_ieee80211_oci_oct_operating_class;
8166static int hf_ieee80211_oci_oct_primary_channel_number;
8167static int hf_ieee80211_oci_oct_frequency_segment_1;
8168
8169static int hf_ieee80211_multiple_bssid_configuration_bssid_count;
8170static int hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity;
8171static int hf_ieee80211_known_bssid_bitmap;
8172static int hf_ieee80211_short_ssid;
8173
8174static int hf_ieee80211_non_inheritance_element_id_list_length;
8175static int hf_ieee80211_non_inheritance_element_id_list_element_id;
8176static int hf_ieee80211_non_inheritance_element_id_ext_list_length;
8177static int hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext;
8178
8179static int hf_ieee80211_rejected_groups_group;
8180
8181static int hf_ieee80211_twt_bcast_flow;
8182static int hf_ieee80211_twt_individual_flow;
8183static int hf_ieee80211_twt_individual_flow_id;
8184static int hf_ieee80211_twt_individual_reserved;
8185static int hf_ieee80211_twt_bcast_id;
8186static int hf_ieee80211_twt_neg_type;
8187static int hf_ieee80211_twt_neg_type2_reserved1;
8188static int hf_ieee80211_twt_neg_type2_reserved2;
8189static int hf_ieee80211_twt_bcast_teardown_all;
8190static int hf_ieee80211_twt_bcast_teardown_all_twt;
8191static int hf_ieee80211_twt_bcast_twt_id_reserved;
8192static int hf_ieee80211_twt_bcast_neg_type_reserved;
8193
8194static int hf_ieee80211_tag_twt_control_field;
8195static int hf_ieee80211_tag_twt_ndp_paging_indicator;
8196static int hf_ieee80211_tag_twt_responder_pm_mode;
8197static int hf_ieee80211_tag_twt_neg_type;
8198static int hf_ieee80211_tag_twt_info_frame_disabled;
8199static int hf_ieee80211_tag_twt_wake_duration_unit;
8200static int hf_ieee80211_tag_twt_link_id_bitmap_present;
8201static int hf_ieee80211_tag_twt_aligned_twt;
8202
8203static int hf_ieee80211_tag_twt_req_type_field;
8204static int hf_ieee80211_tag_twt_req_type_req;
8205static int hf_ieee80211_tag_twt_req_type_setup_cmd;
8206static int hf_ieee80211_tag_twt_req_type_trigger;
8207static int hf_ieee80211_tag_twt_req_type_implicit;
8208static int hf_ieee80211_tag_twt_req_type_flow_type;
8209static int hf_ieee80211_tag_twt_req_type_flow_id;
8210static int hf_ieee80211_tag_twt_req_type_wake_int_exp;
8211static int hf_ieee80211_tag_twt_req_type_prot;
8212static int hf_ieee80211_tag_twt_req_type_last_bcst_parm_set;
8213static int hf_ieee80211_tag_twt_req_type_bcst_twt_recom;
8214static int hf_ieee80211_tag_twt_req_type_aligned;
8215
8216static int hf_ieee80211_tag_twt_ndp_paging_field;
8217static int hf_ieee80211_tag_twt_ndp_paging_p_id;
8218static int hf_ieee80211_tag_twt_ndp_max_ndp_paging_period;
8219static int hf_ieee80211_tag_twt_ndp_partial_tsf_offset;
8220static int hf_ieee80211_tag_twt_ndp_action;
8221static int hf_ieee80211_tag_twt_ndp_min_sleep_duration;
8222static int hf_ieee80211_tag_twt_ndp_reserved;
8223static int hf_ieee80211_tag_twt_link_id_bitmap;
8224static int hf_ieee80211_tag_twt_aligned_twt_link_bitmap;
8225static int hf_ieee80211_tag_twt_broadcast_info;
8226static int hf_ieee80211_tag_twt_bcast_info_persistence;
8227static int hf_ieee80211_tag_twt_bcast_info_id;
8228static int hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present;
8229static int hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info;
8230static int hf_ieee80211_tag_twt_traffic_info_control;
8231static int hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid;
8232static int hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid;
8233static int hf_ieee80211_tag_twt_traffic_info_reserved;
8234static int hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap;
8235static int hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap;
8236
8237static int hf_ieee80211_tag_twt_target_wake_time;
8238static int hf_ieee80211_tag_twt_target_wake_time_short;
8239static int hf_ieee80211_tag_twt_nom_min_twt_wake_dur;
8240static int hf_ieee80211_tag_twt_wake_interval_mantissa;
8241static int hf_ieee80211_tag_twt_channel;
8242
8243static int hf_ieee80211_tag_rsnx;
8244/* octet 1 */
8245static int hf_ieee80211_tag_rsnx_length;
8246static int hf_ieee80211_tag_rsnx_protected_twt_operations_support;
8247static int hf_ieee80211_tag_rsnx_sae_hash_to_element;
8248static int hf_ieee80211_tag_rsnx_sae_pk;
8249static int hf_ieee80211_tag_rsnx_protected_wur_frame_support;
8250/* octet 2 */
8251static int hf_ieee80211_tag_rsnx_secure_ltf_support;
8252static int hf_ieee80211_tag_rsnx_secure_rtt_supported;
8253static int hf_ieee80211_tag_rsnx_urnm_mfpr_x20;
8254static int hf_ieee80211_tag_rsnx_protected_announce_support;
8255static int hf_ieee80211_tag_rsnx_pbac;
8256static int hf_ieee80211_tag_rsnx_extended_s1g_action_protection;
8257static int hf_ieee80211_tag_rsnx_spp_amsdu_capable;
8258static int hf_ieee80211_tag_rsnx_urnm_mfpr;
8259/* octet 3 */
8260static int hf_ieee80211_tag_rsnx_kek_in_pasn; /* bit 18 */
8261/* octet 4 */
8262static int hf_ieee80211_tag_rsnx_assoc_encryption; /* bit 27 */
8263static int hf_ieee80211_tag_rsnx_pmksa_privacy; /* bit 29 */
8264static int hf_ieee80211_tag_rsnx_reserved;
8265
8266static int hf_ieee80211_wfa_rsn_selection;
8267static int hf_ieee80211_wfa_rsn_or_link_kde_link_id;
8268
8269static int hf_ieee80211_nonap_sta_regulatory_conn;
8270static int hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid;
8271static int hf_ieee80211_nonap_sta_regu_conn_indoor_ap;
8272static int hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid;
8273static int hf_ieee80211_nonap_sta_regu_conn_sp_ap;
8274static int hf_ieee80211_nonap_sta_regu_conn_reserved;
8275
8276static int hf_ieee80211_tag_channel_usage_mode;
8277
8278static int hf_ieee80211_ff_count;
8279
8280static int hf_ieee80211_tag_dms_id;
8281static int hf_ieee80211_tag_dms_length;
8282static int hf_ieee80211_tag_dms_req_type;
8283static int hf_ieee80211_tag_dms_resp_type;
8284static int hf_ieee80211_tag_dms_last_seq_control;
8285
8286/* ************************************************************************* */
8287/* RFC 8110 fields */
8288/* ************************************************************************* */
8289static int hf_ieee80211_owe_dh_parameter_group;
8290static int hf_ieee80211_owe_dh_parameter_public_key;
8291
8292/* ************************************************************************* */
8293/* Protocol trees */
8294/* ************************************************************************* */
8295static int ett_80211;
8296static int ett_proto_flags;
8297static int ett_cap_tree;
8298static int ett_fc_tree;
8299static int ett_cntrl_wrapper_fc;
8300static int ett_cntrl_wrapper_payload;
8301static int ett_fragments;
8302static int ett_fragment;
8303static int ett_block_ack;
8304static int ett_block_ack_tid;
8305static int ett_block_ack_request_control;
8306static int ett_block_ack_bitmap;
8307static int ett_block_ack_request_multi_sta_aid_tid;
8308static int ett_multi_sta_block_ack;
8309static int ett_ath_cap_tree;
8310static int ett_extreme_mesh_services_tree;
8311static int ett_addr;
8312
8313static int ett_80211_mgt;
8314static int ett_fixed_parameters;
8315static int ett_tagged_parameters;
8316static int ett_tag_bmapctl_tree;
8317static int ett_s1g_pvb_tree;
8318static int ett_s1g_pvb_eb_tree;
8319static int ett_s1g_pvb_block_control_byte;
8320static int ett_s1g_pvb_block_bitmap_tree;
8321static int ett_s1g_pvb_subblock_tree;
8322static int ett_s1g_pvb_olb_tree;
8323static int ett_s1g_pvb_olb_subblock;
8324static int ett_s1g_pvb_ade_tree;
8325static int ett_s1g_pvb_ade_control;
8326static int ett_tag_country_fnm_tree;
8327static int ett_tag_country_rcc_tree;
8328static int ett_qos_parameters;
8329static int ett_qos_ps_buf_state;
8330static int ett_wep_parameters;
8331static int ett_msh_control;
8332static int ett_hwmp_targ_flags_tree;
8333static int ett_mesh_chswitch_flag_tree;
8334static int ett_mesh_config_cap_tree;
8335static int ett_mesh_formation_info_tree;
8336static int ett_bcn_timing_rctrl_tree;
8337static int ett_bcn_timing_info_tree;
8338static int ett_gann_flags_tree;
8339static int ett_pxu_proxy_info_tree;
8340static int ett_pxu_proxy_info_flags_tree;
8341
8342static int ett_rsn_gcs_tree;
8343static int ett_rsn_pcs_tree;
8344static int ett_rsn_sub_pcs_tree;
8345static int ett_rsn_akms_tree;
8346static int ett_rsn_sub_akms_tree;
8347static int ett_rsn_cap_tree;
8348static int ett_rsn_pmkid_tree;
8349static int ett_rsn_gmcs_tree;
8350
8351static int ett_kde_mlo_link_info;
8352
8353static int ett_wpa_mcs_tree;
8354static int ett_wpa_ucs_tree;
8355static int ett_wpa_sub_ucs_tree;
8356static int ett_wpa_akms_tree;
8357static int ett_wpa_sub_akms_tree;
8358static int ett_wme_ac;
8359static int ett_wme_aci_aifsn;
8360static int ett_wme_ecw;
8361static int ett_wme_qos_info;
8362
8363static int ett_update_edca_info;
8364
8365static int ett_ht_cap_tree;
8366static int ett_ampduparam_tree;
8367static int ett_mcsset_tree;
8368static int ett_mcsbit_tree;
8369static int ett_htex_cap_tree;
8370static int ett_txbf_tree;
8371static int ett_antsel_tree;
8372static int ett_hta_cap_tree;
8373static int ett_hta_cap1_tree;
8374static int ett_hta_cap2_tree;
8375
8376static int ett_s1g_ndp;
8377static int ett_s1g_ndp_ack;
8378static int ett_s1g_ndp_cts;
8379static int ett_s1g_ndp_cf_end;
8380static int ett_s1g_ndp_ps_poll;
8381static int ett_s1g_ndp_ps_poll_ack;
8382static int ett_s1g_ndp_block_ack;
8383static int ett_s1g_ndp_beamforming_report_poll;
8384static int ett_s1g_ndp_paging;
8385static int ett_s1g_ndp_probe;
8386static int ett_pv1_sid;
8387static int ett_pv1_sid_field;
8388static int ett_pv1_seq_control;
8389static int ett_ieee80211_s1g_capabilities_info;
8390static int ett_ieee80211_s1g_capabilities;
8391static int ett_s1g_cap_byte1;
8392static int ett_s1g_cap_byte2;
8393static int ett_s1g_cap_byte3;
8394static int ett_s1g_cap_byte4;
8395static int ett_s1g_cap_byte5;
8396static int ett_s1g_cap_byte6;
8397static int ett_s1g_cap_byte7;
8398static int ett_s1g_cap_byte8;
8399static int ett_s1g_cap_byte9;
8400static int ett_s1g_cap_byte10;
8401static int ett_ieee80211_s1g_sup_mcs_and_nss_set;
8402static int ett_s1g_mcs_and_mcs_set;
8403static int ett_s1g_operation_info;
8404static int ett_s1g_channel_width;
8405static int ett_s1g_subchannel_selective_transmission;
8406static int ett_s1g_raw_assignment;
8407static int ett_s1g_raw_assn_tree;
8408static int ett_s1g_raw_control;
8409static int ett_s1g_raw_slot_def;
8410static int ett_s1g_raw_group_subfield;
8411static int ett_s1g_raw_channel_indication;
8412static int ett_s1g_page_slice_control;
8413static int ett_s1g_aid_request_mode;
8414static int ett_s1g_aid_characteristic;
8415static int ett_s1g_sector_operation;
8416static int ett_tack_info;
8417static int ett_ieee80211_s1g_auth_control;
8418static int ett_s1g_relay_control;
8419static int ett_s1g_relay_function;
8420static int ett_ieee80211_s1g_addr_list;
8421static int ett_ieee80211_s1g_reach_addr;
8422static int ett_s1g_relay_discovery_control;
8423static int ett_ieee80211_s1g_aid_entry;
8424static int ett_s1g_probe_resp_subfield_0;
8425static int ett_s1g_header_comp_control;
8426static int ett_pv1_mgmt_action;
8427static int ett_pv1_mgmt_action_no_ack;
8428static int ett_pv1_cntl_stack;
8429static int ett_pv1_cntl_bat;
8430
8431static int ett_htc_tree;
8432static int ett_htc_he_a_control;
8433static int ett_mfb_subtree;
8434static int ett_lac_subtree;
8435static int ett_ieee80211_buffer_status_report;
8436static int ett_ieee80211_a_control_padding;
8437static int ett_ieee80211_a_control_ones;
8438static int ett_ieee80211_triggered_response_schedule;
8439static int ett_ieee80211_control_om;
8440static int ett_ieee80211_hla_control;
8441static int ett_ieee80211_control_uph;
8442static int ett_ieee80211_buffer_control_bqr;
8443static int ett_ieee80211_control_cci;
8444static int ett_ieee80211_control_eht_om;
8445static int ett_ieee80211_control_srs;
8446static int ett_ieee80211_control_aar;
8447
8448static int ett_vht_cap_tree;
8449static int ett_vht_mcsset_tree;
8450static int ett_vht_rx_mcsbit_tree;
8451static int ett_vht_tx_mcsbit_tree;
8452static int ett_vht_basic_mcsbit_tree;
8453static int ett_vht_op_tree;
8454static int ett_vht_tpe_info_tree;
8455static int ett_tpe_psd;
8456
8457static int ett_vht_ranging_annc;
8458static int ett_ndp_ranging_annc_sta_info;
8459
8460static int ett_ff_he_action;
8461static int ett_ff_protected_he_action;
8462static int ett_ff_protected_eht_action;
8463static int ett_ff_he_mimo_control;
8464static int ett_ff_he_mimo_beamforming_report_snr;
8465static int ett_ff_he_mimo_feedback_matrices;
8466
8467static int ett_ff_vhtmimo_cntrl;
8468static int ett_ff_vhtmimo_beamforming_report;
8469static int ett_ff_vhtmimo_beamforming_report_snr;
8470static int ett_ff_vhtmimo_beamforming_angle;
8471static int ett_ff_vhtmimo_beamforming_report_feedback_matrices;
8472static int ett_ff_vhtmu_exclusive_beamforming_report_matrices;
8473
8474static int ett_vht_grpidmgmt;
8475static int ett_vht_msa;
8476static int ett_vht_upa;
8477
8478static int ett_ht_operation_info_delimiter1_tree;
8479static int ett_ht_operation_info_delimiter2_tree;
8480static int ett_ht_operation_info_delimiter3_tree;
8481
8482static int ett_ff_ftm_param_delim1;
8483static int ett_ff_ftm_param_delim2;
8484static int ett_ff_ftm_param_delim3;
8485static int ett_ff_ftm_tod_err1;
8486static int ett_ff_ftm_toa_err1;
8487static int ett_tag_ranging;
8488static int ett_tag_ranging_ntb;
8489static int ett_tag_ranging_secure_he_ltf;
8490
8491static int ett_ranging_subelement_tree;
8492
8493static int ett_tag_direct_meas_results;
8494
8495static int ett_rsta_avail_header;
8496static int ett_rsta_avail_tree;
8497static int ett_rsta_avail_subfield;
8498
8499static int ett_pasn_parameters;
8500static int ett_pasn_comeback_tree;
8501
8502static int ett_pasn_auth_frame;
8503
8504/* 802.11be trees */
8505static int ett_eht_multi_link_control;
8506static int ett_eht_multi_link_common_info;
8507static int ett_eht_multi_link_common_info_link_id;
8508static int ett_eht_multi_link_common_info_medium_sync;
8509static int ett_eht_multi_link_common_info_eml_capa;
8510static int ett_eht_multi_link_common_info_mld_capa;
8511static int ett_eht_multi_link_common_info_ext_mld_capa;
8512static int ett_eht_multi_link_per_sta;
8513static int ett_eht_multi_link_subelt;
8514static int ett_eht_multi_link_sta_control;
8515static int ett_eht_multi_link_per_sta_info;
8516static int ett_eht_multi_link_sta_dtim;
8517static int ett_eht_multi_link_reconf_oper_param;
8518static int ett_eht_multi_link_reconfig_presence_indi;
8519static int ett_eht_multi_link_reconfig_operation_para_info;
8520static int ett_eht_operation_params;
8521static int ett_eht_operation_control;
8522static int ett_eht_mac_capa;
8523static int ett_eht_phy_capa;
8524static int ett_eht_phy_bits_0_15;
8525static int ett_eht_phy_bits_16_31;
8526static int ett_eht_phy_bits_32_39;
8527static int ett_eht_phy_bits_40_63;
8528static int ett_eht_phy_bits_64_71;
8529static int ett_eht_phy_mcs_nss;
8530static int ett_eht_phy_mcs_nss_set;
8531static int ett_eht_ttl_mapping;
8532static int ett_eht_ttl_mapping_link_mapping;
8533static int ett_eht_eht_multi_link_tc;
8534static int ett_eht_qos_characteristics;
8535static int ett_eht_aid_bmapctl_tree;
8536static int ett_eht_bw_indication_param;
8537static int ett_eht_eml_control;
8538static int ett_eht_eml_control_link_map;
8539static int ett_eht_eml_control_mcs_map_count;
8540static int ett_eht_emlsr_para_update;
8541static int ett_eht_mimo_ctrl;
8542static int ett_eht_beamforming_rpt_ru_index;
8543static int ett_eht_beamforming_feedback_tree;
8544static int ett_ff_eht_mimo_beamforming_report_snr;
8545static int ett_ff_eht_mimo_mu_exclusive_report;
8546static int ett_eht_mu_exclusive_beamforming_rpt_ru_index;
8547static int ett_eht_reconfig_status_list;
8548static int ett_eht_group_key_data;
8549
8550static int ett_tag_measure_request_mode_tree;
8551static int ett_tag_measure_request_type_tree;
8552static int ett_tag_measure_request_sub_element_tree;
8553static int ett_tag_measure_report_mode_tree;
8554static int ett_tag_measure_report_type_tree;
8555static int ett_tag_measure_report_basic_map_tree;
8556static int ett_tag_measure_report_rpi_tree;
8557static int ett_tag_measure_report_frame_tree;
8558static int ett_tag_measure_report_sub_element_tree;
8559static int ett_tag_measure_reported_frame_tree;
8560static int ett_tag_measure_reported_frame_frag_id_tree;
8561static int ett_tag_measure_reported_lci_z_tree;
8562static int ett_tag_measure_reported_lci_urp_tree;
8563static int ett_tag_bss_bitmask_tree;
8564static int ett_tag_dfs_map_tree;
8565static int ett_tag_dfs_map_flags_tree;
8566static int ett_tag_erp_info_tree;
8567static int ett_tag_ex_cap1;
8568static int ett_tag_ex_cap2;
8569static int ett_tag_ex_cap3;
8570static int ett_tag_ex_cap4;
8571static int ett_tag_ex_cap5;
8572static int ett_tag_ex_cap6;
8573static int ett_tag_ex_cap7;
8574static int ett_tag_ex_cap8;
8575static int ett_tag_ex_cap89;
8576static int ett_tag_ex_cap10;
8577static int ett_tag_ex_cap11;
8578static int ett_tag_ex_cap12;
8579static int ett_tag_ex_cap13;
8580static int ett_tag_ex_cap14;
8581
8582static int ett_tag_rm_cap1;
8583static int ett_tag_rm_cap2;
8584static int ett_tag_rm_cap3;
8585static int ett_tag_rm_cap4;
8586static int ett_tag_rm_cap5;
8587
8588static int ett_tag_rsnx_octet1;
8589static int ett_tag_rsnx_octet2;
8590static int ett_tag_rsnx_octet3;
8591static int ett_tag_rsnx_octet4;
8592
8593static int ett_tag_multiple_bssid_subelem_tree;
8594static int ett_tag_20_40_bc;
8595
8596static int ett_tag_intolerant_tree;
8597
8598static int ett_tag_tclas_mask_tree;
8599
8600static int ett_tag_supported_channels;
8601
8602static int ett_tag_neighbor_report_bssid_info_tree;
8603static int ett_tag_neighbor_report_bssid_info_capability_tree;
8604static int ett_tag_neighbor_report_subelement_tree;
8605static int ett_tag_neighbor_report_sub_tag_tree;
8606
8607static int ett_tag_wapi_param_set_akm_tree;
8608static int ett_tag_wapi_param_set_ucast_tree;
8609static int ett_tag_wapi_param_set_mcast_tree;
8610static int ett_tag_wapi_param_set_preauth_tree;
8611
8612static int ett_max_idle_period_options;
8613
8614static int ett_tag_time_adv_tree;
8615
8616static int ett_tag_he_6ghz_cap_inf_tree;
8617
8618static int ett_ff_ba_param_tree;
8619static int ett_ff_ba_ssc_tree;
8620static int ett_ff_delba_param_tree;
8621static int ett_ff_qos_info;
8622static int ett_ff_sm_pwr_save;
8623static int ett_ff_psmp_param_set;
8624static int ett_ff_mimo_cntrl;
8625static int ett_ff_ant_sel;
8626static int ett_mimo_report;
8627static int ett_ff_chan_switch_announce;
8628static int ett_ff_ht_info;
8629static int ett_ff_psmp_sta_info;
8630
8631static int ett_tpc;
8632
8633static int ett_msdu_aggregation_parent_tree;
8634static int ett_msdu_aggregation_subframe_tree;
8635
8636static int ett_80211_mgt_ie;
8637static int ett_tsinfo_tree;
8638static int ett_sched_tree;
8639
8640static int ett_fcs;
8641
8642static int ett_hs20_osu_providers_list;
8643static int ett_hs20_osu_provider_tree;
8644static int ett_hs20_friendly_names_list;
8645static int ett_hs20_friendly_name_tree;
8646static int ett_hs20_osu_provider_method_list;
8647static int ett_osu_icons_avail_list;
8648static int ett_hs20_osu_icon_tree;
8649static int ett_hs20_osu_service_desc_list;
8650static int ett_hs20_osu_service_desc_tree;
8651static int ett_hs20_venue_url;
8652static int ett_hs20_advice_of_charge;
8653static int ett_hs20_aoc_plan;
8654
8655static int ett_hs20_ofn_tree;
8656
8657static int ett_adv_proto;
8658static int ett_adv_proto_tuple;
8659static int ett_gas_query;
8660static int ett_gas_anqp;
8661static int ett_nai_realm;
8662static int ett_nai_realm_eap;
8663static int ett_tag_ric_data_desc_ie;
8664static int ett_anqp_vendor_capab;
8665
8666static int ett_osen_group_data_cipher_suite;
8667static int ett_osen_pairwise_cipher_suites;
8668static int ett_osen_pairwise_cipher_suite;
8669static int ett_osen_akm_cipher_suites;
8670static int ett_osen_akm_cipher_suite;
8671static int ett_osen_rsn_cap_tree;
8672static int ett_osen_pmkid_list;
8673static int ett_osen_pmkid_tree;
8674static int ett_osen_group_management_cipher_suite;
8675
8676static int ett_hs20_cc_proto_port_tuple;
8677
8678static int ett_tag_no_bssid_capability_dmg_bss_control_tree;
8679static int ett_ssid_list;
8680
8681static int ett_sgdsn;
8682static int ett_nintendo;
8683
8684static int ett_routerboard;
8685
8686static int ett_meru;
8687
8688static int ett_wisun_gtkl;
8689static int ett_wisun_lgtkl;
8690
8691static int ett_qos_map_set_exception;
8692static int ett_qos_map_set_range;
8693
8694static int ett_wnm_notif_subelt;
8695
8696static int ett_ieee80211_3gpp_plmn;
8697
8698static int ett_mbo_oce_attr;
8699static int ett_mbo_ap_cap;
8700static int ett_oce_cap;
8701static int ett_oce_metrics_cap;
8702
8703static int ett_tag_mobility_domain_ft_capab_tree;
8704
8705static int ett_tag_ft_mic_control_tree;
8706static int ett_tag_ft_subelem_tree;
8707
8708static int ett_qos_mgmt_pol_capa;
8709static int ett_qos_mgmt_attributes;
8710static int ett_qos_mgmt_dscp_policy_capabilities;
8711static int ett_qos_mgmt_dscp_policy;
8712static int ett_qos_mgmt_tclas;
8713static int ett_qos_mgmt_domain_name;
8714static int ett_qos_mgmt_unknown_attribute;
8715static int ett_dscp_policy_status_list;
8716static int ett_pol_rqst_cont_tree;
8717static int ett_pol_resp_cont_tree;
8718
8719static int ett_wfa_capa;
8720static int ett_wfa_capa_attributes;
8721static int ett_wfa_capa_supp_gene;
8722static int ett_wfa_capa_cert_gene;
8723
8724static int ett_ieee80211_vs_aruba_ap_health;
8725
8726static expert_field ei_ieee80211_bad_length;
8727static expert_field ei_ieee80211_inv_val;
8728static expert_field ei_ieee80211_vht_tpe_pwr_info_count;
8729static expert_field ei_ieee80211_vht_tpe_pwr_info_unit;
8730static expert_field ei_ieee80211_ff_query_response_length;
8731static expert_field ei_ieee80211_ff_anqp_nai_realm_eap_len;
8732static expert_field ei_hs20_anqp_nai_hrq_length;
8733static expert_field ei_ieee80211_extra_data;
8734static expert_field ei_ieee80211_tag_data;
8735static expert_field ei_ieee80211_tdls_setup_confirm_malformed;
8736static expert_field ei_ieee80211_ff_anqp_nai_field_len;
8737static expert_field ei_ieee80211_rsn_pcs_count;
8738static expert_field ei_ieee80211_tag_measure_request_unknown;
8739static expert_field ei_ieee80211_tag_measure_request_beacon_unknown;
8740static expert_field ei_ieee80211_tag_measure_report_unknown;
8741static expert_field ei_ieee80211_tag_measure_report_beacon_unknown;
8742static expert_field ei_ieee80211_tag_measure_report_lci_unknown;
8743static expert_field ei_ieee80211_tag_number;
8744static expert_field ei_ieee80211_ff_anqp_info_length;
8745static expert_field ei_hs20_anqp_ofn_length;
8746static expert_field ei_ieee80211_tdls_setup_response_malformed;
8747static expert_field ei_ieee80211_ff_anqp_capability;
8748static expert_field ei_ieee80211_not_enough_room_for_anqp_header;
8749static expert_field ei_ieee80211_ff_query_request_length;
8750static expert_field ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype;
8751static expert_field ei_ieee80211_qos_info_bad_ftype;
8752static expert_field ei_ieee80211_qos_bad_aifsn;
8753static expert_field ei_ieee80211_pmkid_count_too_large;
8754static expert_field ei_ieee80211_ff_anqp_venue_length;
8755static expert_field ei_ieee80211_ff_anqp_roaming_consortium_oi_len;
8756static expert_field ei_ieee80211_tag_length;
8757static expert_field ei_ieee80211_missing_data;
8758static expert_field ei_ieee80211_rsn_pmkid_count;
8759static expert_field ei_ieee80211_fc_retry;
8760static expert_field ei_ieee80211_tag_wnm_sleep_mode_no_key_data;
8761static expert_field ei_ieee80211_dmg_subtype;
8762static expert_field ei_ieee80211_vht_action;
8763static expert_field ei_ieee80211_mesh_peering_unexpected;
8764static expert_field ei_ieee80211_fcs;
8765static expert_field ei_ieee80211_mismatched_akm_suite;
8766static expert_field ei_ieee80211_vs_routerboard_unexpected_len;
8767static expert_field ei_ieee80211_vs_sgdsn_serialnumber_invalid_len_val;
8768static expert_field ei_ieee80211_vs_sgdsn_serialnumber_unexpected_len_val;
8769static expert_field ei_ieee80211_twt_tear_down_bad_neg_type;
8770static expert_field ei_ieee80211_twt_setup_bad_command;
8771static expert_field ei_ieee80211_twt_bcast_info_no_term;
8772static expert_field ei_ieee80211_invalid_control_word;
8773static expert_field ei_ieee80211_invalid_control_id;
8774static expert_field ei_ieee80211_invalid_control_length;
8775static expert_field ei_ieee80211_wfa_60g_attr_len_invalid;
8776static expert_field ei_ieee80211_wfa_60g_unknown_attribute;
8777static expert_field ei_ieee80211_htc_in_dmg_packet;
8778static expert_field ei_ieee80211_eht_invalid_subelement;
8779static expert_field ei_ieee80211_eht_invalid_action;
8780static expert_field ei_ieee80211_eht_invalid_multi_link;
8781static expert_field ei_ieee80211_eht_invalid_nc_nr;
8782
8783
8784/* 802.11ad trees */
8785static int ett_dynamic_alloc_tree;
8786static int ett_ssw_tree;
8787static int ett_bf_tree;
8788static int ett_sswf_tree;
8789static int ett_brp_tree;
8790static int ett_blm_tree;
8791static int ett_bic_tree;
8792static int ett_dmg_params_tree;
8793static int ett_cc_tree;
8794static int ett_rcsi_tree;
8795static int ett_80211_ext;
8796static int ett_allocation_tree;
8797static int ett_sta_info;
8798
8799static int ett_ieee80211_esp;
8800
8801static int ett_ieee80211_wfa_60g_attr;
8802static int ett_ieee80211_wfa_transition_disable_tree;
8803
8804/* 802.11ah trees */
8805static int ett_s1g_sync_control_tree;
8806static int ett_s1g_sector_id_index;
8807static int ett_s1g_twt_information_control;
8808static int ett_twt_tear_down_tree;
8809static int ett_twt_control_field_tree;
8810static int ett_twt_req_type_tree;
8811static int ett_twt_ndp_paging_field_tree;
8812static int ett_twt_broadcast_info_tree;
8813static int ett_twt_traffic_info_tree;
8814static int ett_twt_traffic_info_control_tree;
8815
8816/* 802.11ax trees */
8817static int ett_he_mac_capabilities;
8818static int ett_he_phy_capabilities;
8819static int ett_he_phy_cap_first_byte;
8820static int ett_he_phy_cap_chan_width_set;
8821static int ett_he_phy_cap_b8_to_b23;
8822static int ett_he_phy_cap_b24_to_b39;
8823static int ett_he_phy_cap_b40_to_b55;
8824static int ett_he_phy_cap_b56_to_b71;
8825static int ett_he_phy_cap_b72_to_b87;
8826static int ett_he_mcs_and_nss_set;
8827static int ett_he_rx_tx_he_mcs_map_lte_80;
8828static int ett_he_rx_mcs_map_lte_80;
8829static int ett_he_tx_mcs_map_lte_80;
8830static int ett_he_rx_tx_he_mcs_map_160;
8831static int ett_he_rx_mcs_map_160;
8832static int ett_he_tx_mcs_map_160;
8833static int ett_he_rx_tx_he_mcs_map_80_80;
8834static int ett_he_rx_mcs_map_80_80;
8835static int ett_he_tx_mcs_map_80_80;
8836static int ett_he_ppe_threshold;
8837static int ett_he_ppe_nss;
8838static int ett_he_ppe_ru_alloc;
8839static int ett_he_uora_tree;
8840static int ett_he_aic_aifsn;
8841static int ett_he_spatial_reuse_control;
8842static int ett_he_bss_new_color_info;
8843static int ett_he_ess_report_info_field;
8844static int ett_he_operation_params;
8845static int ett_he_bss_color_information;
8846static int ett_he_oper_basic_mcs;
8847static int ett_he_operation_vht_op_info;
8848static int ett_mscs_user_prio;
8849static int ett_ieee80211_user_prio_bitmap;
8850static int ett_ieee80211_intra_access_prio;
8851static int ett_he_operation_6ghz;
8852static int ett_he_operation_6ghz_control;
8853static int ett_he_mu_edca_param;
8854static int ett_he_trigger_common_info;
8855static int ett_he_trigger_ranging;
8856static int ett_he_trigger_ranging_poll;
8857static int ett_he_trigger_packet_extension;
8858static int ett_he_trigger_base_common_info;
8859static int ett_he_trigger_bar_ctrl;
8860static int ett_he_trigger_bar_info;
8861static int ett_he_trigger_user_info;
8862static int ett_he_trigger_base_user_info;
8863static int ett_he_trigger_dep_basic_user_info;
8864static int ett_he_trigger_dep_nfrp_user_info;
8865static int ett_ndp_annc;
8866static int ett_ndp_vht_annc_sta_list;
8867static int ett_ndp_vht_annc_sta_info_tree;
8868static int ett_ndp_he_annc_sta_list;
8869static int ett_ndp_he_annc_sta_item;
8870static int ett_ndp_he_annc_sta_info;
8871static int ett_ndp_ranging_annc_sta_list;
8872static int ett_ndp_eht_annc_sta_list;
8873static int ett_ndp_eht_annc_sta_info;
8874static int ett_non_inheritance_element_id_list;
8875static int ett_non_inheritance_element_id_ext_list;
8876
8877/* 802.11ai trees */
8878static int ett_fils_indication_realm_list;
8879static int ett_fils_indication_public_key_list;
8880static int ett_ff_fils_discovery_frame_control;
8881static int ett_ff_fils_discovery_capability;
8882static int ett_neighbor_ap_info;
8883static int ett_tbtt_infos;
8884static int ett_rnr_bss_params_tree;
8885static int ett_rnr_mld_params_tree;
8886
8887static int ett_ff_fils_req_params;
8888static int ett_ff_fils_req_params_fils_criteria;
8889
8890static int ett_nonap_sta_regulatory_conn;
8891
8892static int ett_chan_usage;
8893
8894/* Generic address HF list for proto_tree_add_mac48_detail() */
8895static const mac_hf_list_t mac_addr = {
8896 &hf_ieee80211_addr,
8897 &hf_ieee80211_addr_resolved,
8898 &hf_ieee80211_addr_oui,
8899 &hf_ieee80211_addr_oui_resolved,
8900 &hf_ieee80211_addr_lg,
8901 &hf_ieee80211_addr_ig,
8902};
8903
8904/* Generic address HF list for proto_tree_add_mac48_detail() --
8905 * no LG/IG bits */
8906static const mac_hf_list_t mac_addr_hidden = {
8907 &hf_ieee80211_addr,
8908 &hf_ieee80211_addr_resolved,
8909 &hf_ieee80211_addr_oui,
8910 &hf_ieee80211_addr_oui_resolved,
8911 NULL((void*)0),
8912 NULL((void*)0),
8913};
8914
8915/* Destination address HF list for proto_tree_add_mac48_detail() */
8916static const mac_hf_list_t mac_da = {
8917 &hf_ieee80211_addr_da,
8918 &hf_ieee80211_addr_da_resolved,
8919 &hf_ieee80211_addr_da_oui,
8920 &hf_ieee80211_addr_da_oui_resolved,
8921 &hf_ieee80211_addr_da_lg,
8922 &hf_ieee80211_addr_da_ig,
8923};
8924
8925/* Source address HF list for proto_tree_add_mac48_detail() */
8926static const mac_hf_list_t mac_sa = {
8927 &hf_ieee80211_addr_sa,
8928 &hf_ieee80211_addr_sa_resolved,
8929 &hf_ieee80211_addr_sa_oui,
8930 &hf_ieee80211_addr_sa_oui_resolved,
8931 &hf_ieee80211_addr_sa_lg,
8932 &hf_ieee80211_addr_sa_ig,
8933};
8934
8935/* Receiver address HF list for proto_tree_add_mac48_detail() */
8936static const mac_hf_list_t mac_ra = {
8937 &hf_ieee80211_addr_ra,
8938 &hf_ieee80211_addr_ra_resolved,
8939 &hf_ieee80211_addr_ra_oui,
8940 &hf_ieee80211_addr_ra_oui_resolved,
8941 &hf_ieee80211_addr_ra_lg,
8942 &hf_ieee80211_addr_ra_ig,
8943};
8944
8945/* Transmitter address HF list for proto_tree_add_mac48_detail() */
8946static const mac_hf_list_t mac_ta = {
8947 &hf_ieee80211_addr_ta,
8948 &hf_ieee80211_addr_ta_resolved,
8949 &hf_ieee80211_addr_ta_oui,
8950 &hf_ieee80211_addr_ta_oui_resolved,
8951 &hf_ieee80211_addr_ta_lg,
8952 &hf_ieee80211_addr_ta_ig,
8953};
8954
8955/* BSSID address HF list for proto_tree_add_mac48_detail() */
8956static const mac_hf_list_t mac_bssid = {
8957 &hf_ieee80211_addr_bssid,
8958 &hf_ieee80211_addr_bssid_resolved,
8959 &hf_ieee80211_addr_bssid_oui,
8960 &hf_ieee80211_addr_bssid_oui_resolved,
8961 &hf_ieee80211_addr_bssid_lg,
8962 &hf_ieee80211_addr_bssid_ig,
8963};
8964
8965/* Station address HF list for proto_tree_add_mac48_detail() */
8966static const mac_hf_list_t mac_staa = {
8967 &hf_ieee80211_addr_staa,
8968 &hf_ieee80211_addr_staa_resolved,
8969 &hf_ieee80211_addr_staa_oui,
8970 &hf_ieee80211_addr_staa_oui_resolved,
8971 &hf_ieee80211_addr_staa_lg,
8972 &hf_ieee80211_addr_staa_ig,
8973};
8974
8975static const fragment_items frag_items = {
8976 &ett_fragment,
8977 &ett_fragments,
8978 &hf_ieee80211_fragments,
8979 &hf_ieee80211_fragment,
8980 &hf_ieee80211_fragment_overlap,
8981 &hf_ieee80211_fragment_overlap_conflict,
8982 &hf_ieee80211_fragment_multiple_tails,
8983 &hf_ieee80211_fragment_too_long_fragment,
8984 &hf_ieee80211_fragment_error,
8985 &hf_ieee80211_fragment_count,
8986 &hf_ieee80211_reassembled_in,
8987 &hf_ieee80211_reassembled_length,
8988 /* Reassembled data field */
8989 NULL((void*)0),
8990 "fragments"
8991};
8992
8993static const enum_val_t wlan_ignore_prot_options[] = {
8994 { "no", "No", WLAN_IGNORE_PROT_NO0 },
8995 { "without_iv", "Yes - without IV", WLAN_IGNORE_PROT_WO_IV1 },
8996 { "with_iv", "Yes - with IV", WLAN_IGNORE_PROT_W_IV2 },
8997 { NULL((void*)0), NULL((void*)0), 0 }
8998};
8999
9000static int wlan_address_type = -1;
9001static int wlan_bssid_address_type = -1;
9002static int wlan_ra_ta_address_type = -1;
9003static int wlan_aid_address_type = -1;
9004
9005static int beacon_padding; /* beacon padding bug */
9006
9007/*
9008 * Check if we have an S1G STA
9009 */
9010static bool_Bool
9011sta_is_s1g(packet_info *pinfo)
9012{
9013 void * data_p;
9014
9015 if (treat_as_s1g)
9016 return true1;
9017
9018 data_p = p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY);
9019 return GPOINTER_TO_INT(data_p)((gint) (glong) (data_p));
9020}
9021
9022static heur_dissector_list_t heur_subdissector_list;
9023
9024static dissector_handle_t ieee80211_handle;
9025static dissector_handle_t wlan_withoutfcs_handle;
9026static dissector_handle_t llc_handle;
9027static dissector_handle_t epd_llc_handle;
9028static dissector_handle_t ipx_handle;
9029static dissector_handle_t eth_withoutfcs_handle;
9030
9031static capture_dissector_handle_t llc_cap_handle;
9032static capture_dissector_handle_t ipx_cap_handle;
9033
9034static dissector_table_t ethertype_subdissector_table;
9035static dissector_table_t tagged_field_table;
9036static dissector_table_t vendor_specific_action_table;
9037static dissector_table_t wifi_alliance_action_subtype_table;
9038static dissector_table_t vendor_specific_anqp_info_table;
9039static dissector_table_t wifi_alliance_anqp_info_table;
9040static dissector_table_t wifi_alliance_ie_table;
9041static dissector_table_t wifi_alliance_public_action_table;
9042
9043static int wlan_tap;
9044
9045static const value_string access_network_type_vals[] = {
9046 { 0, "Private network" },
9047 { 1, "Private network with guest access" },
9048 { 2, "Chargeable public network" },
9049 { 3, "Free public network" },
9050 { 4, "Personal device network" },
9051 { 5, "Emergency services only network" },
9052 { 14, "Test or experimental" },
9053 { 15, "Wildcard" },
9054 { 0, NULL((void*)0) }
9055};
9056
9057static const value_string adv_proto_id_vals[] = {
9058 { 0, "Access Network Query Protocol"},
9059 { 1, "MIH Information Service"},
9060 { 2, "MIH Command and Event Services Capability Discovery"},
9061 { 3, "Emergency Alert System (EAS)"},
9062 { 4, "Location-to-Service Translation Protocol"},
9063 {221, "Vendor Specific"},
9064 {0, NULL((void*)0)}
9065};
9066
9067static const value_string timeout_int_types[] = {
9068 {1, "Reassociation deadline interval (TUs)"},
9069 {2, "Key lifetime interval (seconds)"},
9070 {3, "Association Comeback time (TUs)"},
9071 {4, "Time to start (TUs)"},
9072 {0, NULL((void*)0)}
9073};
9074
9075static const value_string tdls_action_codes[] = {
9076 {TDLS_SETUP_REQUEST0, "TDLS Setup Request"},
9077 {TDLS_SETUP_RESPONSE1, "TDLS Setup Response"},
9078 {TDLS_SETUP_CONFIRM2, "TDLS Setup Confirm"},
9079 {TDLS_TEARDOWN3, "TDLS Teardown"},
9080 {TDLS_PEER_TRAFFIC_INDICATION4, "TDLS Peer Traffic Indication"},
9081 {TDLS_CHANNEL_SWITCH_REQUEST5, "TDLS Channel Switch Request"},
9082 {TDLS_CHANNEL_SWITCH_RESPONSE6, "TDLS Channel Switch Response"},
9083 {TDLS_PEER_PSM_REQUEST7, "TDLS Peer PSM Request"},
9084 {TDLS_PEER_PSM_RESPONSE8, "TDLS Peer PSM Response"},
9085 {TDLS_PEER_TRAFFIC_RESPONSE9, "TDLS Peer Traffic Response"},
9086 {TDLS_DISCOVERY_REQUEST10, "TDLS Discovery Request"},
9087 {0, NULL((void*)0)}
9088};
9089static 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) }
;
9090
9091static const value_string rm_action_codes[] = {
9092 {RM_ACTION_RADIO_MEASUREMENT_REQUEST0, "Radio Measurement Request"},
9093 {RM_ACTION_RADIO_MEASUREMENT_REPORT1, "Radio Measurement Report"},
9094 {RM_ACTION_LINK_MEASUREMENT_REQUEST2, "Link Measurement Request"},
9095 {RM_ACTION_LINK_MEASUREMENT_REPORT3, "Link Measurement Report"},
9096 {RM_ACTION_NEIGHBOR_REPORT_REQUEST4, "Neighbor Report Request"},
9097 {RM_ACTION_NEIGHBOR_REPORT_RESPONSE5, "Neighbor Report Response"},
9098 {0, NULL((void*)0)}
9099};
9100static 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) }
;
9101
9102static const val64_string number_of_taps_values[] = {
9103 {0x0, "1 tap"},
9104 {0x1, "5 taps"},
9105 {0x2, "15 taps"},
9106 {0x3, "63 taps"},
9107 {0, NULL((void*)0)}
9108};
9109
9110static const value_string aruba_vs_ap_health_version_vals[] = {
9111 { 0, "1" },
9112 { 1, "Reserved" },
9113 { 2, "Reserved" },
9114 { 3, "Reserved" },
9115 { 4, "Reserved" },
9116 { 5, "Reserved" },
9117 { 6, "Reserved" },
9118 { 7, "Reserved" },
9119 { 0, NULL((void*)0) }
9120};
9121
9122static const value_string aruba_vs_ap_health_ip_protocol_vals[] = {
9123 { 0, "IPv4" },
9124 { 1, "IPv6" },
9125 { 0, NULL((void*)0) }
9126};
9127
9128static const value_string aruba_vs_ap_health_uplink_vals[] = {
9129 { 0, "Uplink existed" },
9130 { 1, "No uplink" },
9131 { 0, NULL((void*)0) }
9132};
9133
9134static const value_string aruba_vs_ap_health_uplink_type_vals[] = {
9135 { 0, "Ethernet" },
9136 { 1, "Modem" },
9137 { 2, "Mesh" },
9138 { 3, "Wi-Fi uplink" },
9139 { 4, "Reserved" },
9140 { 5, "Reserved" },
9141 { 6, "Reserved" },
9142 { 7, "Reserved" },
9143 { 0, NULL((void*)0) }
9144};
9145
9146static const value_string aruba_vs_ap_health_network_layer_vals[] = {
9147 {0, "Success"},
9148 {1, "Missing IP"},
9149 {2, "No IP address (PPPoE failure)"},
9150 {3, "No IP address (DHCP failure)"},
9151 {4, "Missing DGW IP address"},
9152 {5, "Failed ARP/ND for DGW"},
9153 {6, "NTP date & time sync failure"},
9154 {7, "HCM status down"},
9155 {8, "Reserved"},
9156 {9, "Reserved"},
9157 {10, "Reserved"},
9158 {11, "Reserved"},
9159 {12, "Reserved"},
9160 {13, "Reserved"},
9161 {14, "Reserved"},
9162 {15, "Failure at previous layer"},
9163 {0, NULL((void*)0)}
9164};
9165
9166static const value_string aruba_vs_ap_health_proxy_server_vals[] = {
9167 {0, "Success"},
9168 {1, "Authentication failure"},
9169 {2, "Proxy server connection error"},
9170 {3, "Failure at previous layer"},
9171 {0, NULL((void*)0)}
9172};
9173
9174static const value_string aruba_vs_ap_health_activate_vals[] = {
9175 {0, "Success"},
9176 {1, "Unable to resolve A/AAAA"},
9177 {2, "IP connection failure"},
9178 {3, "HTTPS (TLS) failure"},
9179 {4, "Mandatory upgrade failure"},
9180 {5, "Slow mandatory upgrade"},
9181 {6, "No provisioning rule"},
9182 {7, "Invalid activate response"},
9183 {8, "Reserved"},
9184 {9, "Reserved"},
9185 {10, "Reserved"},
9186 {11, "Reserved"},
9187 {12, "Reserved"},
9188 {13, "Reserved"},
9189 {14, "Reserved"},
9190 {15, "Failure at previous layer"},
9191 {0, NULL((void*)0)}
9192};
9193
9194static const value_string aruba_vs_ap_health_central_vals[] = {
9195 {0, "Success"},
9196 {1, "Unable to resolve A/AAAA"},
9197 {2, "IP connection failure"},
9198 {3, "HTTPS (TLS) failure"},
9199 {4, "Websocket (WSS) failure"},
9200 {5, "No AP license"},
9201 {6, "Other failure"},
9202 {7, "Failure at previous layer"},
9203 {0, NULL((void*)0)}
9204};
9205
9206#define PSMP_STA_INFO_BROADCAST0 0
9207#define PSMP_STA_INFO_MULTICAST1 1
9208#define PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2 2
9209
9210#define PSMP_STA_INFO_FLAG_TYPE0x00000003 0x00000003
9211#define PSMP_STA_INFO_FLAG_DTT_START0x00001FFC 0x00001FFC
9212#define PSMP_STA_INFO_FLAG_DTT_DURATION0x001FE000 0x001FE000
9213
9214#define PSMP_STA_INFO_FLAG_STA_ID0x001FFFE0 0x001FFFE0
9215
9216#define PSMP_STA_INFO_FLAG_UTT_START0x0000FFE0 0x0000FFE0
9217#define PSMP_STA_INFO_FLAG_UTT_DURATION0x03FF0000 0x03FF0000
9218
9219#define PSMP_STA_INFO_FLAG_IA_RESERVED0xFC000000 0xFC000000
9220
9221static const value_string ff_psmp_sta_info_flags[] = {
9222 { PSMP_STA_INFO_BROADCAST0, "Broadcast"},
9223 { PSMP_STA_INFO_MULTICAST1, "Multicast"},
9224 { PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2, "Individually Addressed"},
9225 {0, NULL((void*)0)}
9226};
9227
9228static const char*
9229wlan_conv_get_filter_type(conv_item_t* conv, conv_filter_type_e filter)
9230{
9231 if ((filter == CONV_FT_SRC_ADDRESS) && (conv->src_address.type == wlan_address_type))
9232 return "wlan.sa";
9233
9234 if ((filter == CONV_FT_DST_ADDRESS) && (conv->dst_address.type == wlan_address_type))
9235 return "wlan.da";
9236
9237 if ((filter == CONV_FT_ANY_ADDRESS) && (conv->src_address.type == wlan_address_type))
9238 return "wlan.addr";
9239
9240 return CONV_FILTER_INVALID"INVALID";
9241}
9242
9243static ct_dissector_info_t wlan_ct_dissector_info = {&wlan_conv_get_filter_type};
9244
9245static tap_packet_status
9246wlan_conversation_packet(void *pct, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *vip, tap_flags_t flags)
9247{
9248 conv_hash_t *hash = (conv_hash_t*) pct;
9249 hash->flags = flags;
9250 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
9251 tap_packet_status status = TAP_PACKET_DONT_REDRAW;
9252
9253 if ((whdr->src.type != AT_NONE) && (whdr->dst.type != AT_NONE)) {
9254 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);
9255
9256 status = TAP_PACKET_REDRAW;
9257 }
9258
9259 return status;
9260}
9261
9262static const char*
9263wlan_endpoint_get_filter_type(endpoint_item_t* endpoint, conv_filter_type_e filter)
9264{
9265 if ((filter == CONV_FT_ANY_ADDRESS) && (endpoint->myaddress.type == wlan_address_type))
9266 return "wlan.addr";
9267
9268 return CONV_FILTER_INVALID"INVALID";
9269}
9270
9271static et_dissector_info_t wlan_endpoint_dissector_info = {&wlan_endpoint_get_filter_type};
9272
9273static tap_packet_status
9274wlan_endpoint_packet(void *pit, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *vip, tap_flags_t flags)
9275{
9276 conv_hash_t *hash = (conv_hash_t*) pit;
9277 hash->flags = flags;
9278 const wlan_hdr_t *whdr=(const wlan_hdr_t *)vip;
9279 tap_packet_status status = TAP_PACKET_DONT_REDRAW;
9280
9281 /* Take two "add" passes per packet, adding for each direction, ensures that all
9282 packets are counted properly (even if address is sending to itself)
9283 XXX - this could probably be done more efficiently inside endpoint_table */
9284 if (whdr->src.type != AT_NONE) {
9285 add_endpoint_table_data(hash, &whdr->src, 0, true1, 1, pinfo->fd->pkt_len, &wlan_endpoint_dissector_info, ENDPOINT_NONECONVERSATION_NONE);
9286 status = TAP_PACKET_REDRAW;
9287 }
9288
9289 if (whdr->dst.type != AT_NONE) {
9290 add_endpoint_table_data(hash, &whdr->dst, 0, false0, 1, pinfo->fd->pkt_len, &wlan_endpoint_dissector_info, ENDPOINT_NONECONVERSATION_NONE);
9291 status = TAP_PACKET_REDRAW;
9292 }
9293
9294 return status;
9295}
9296
9297static const char*
9298wlan_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src)
9299{
9300 if (is_src)
9301 return "wlan.sa";
9302
9303 return "wlan.da";
9304}
9305
9306static const char*
9307wlan_bssid_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src _U___attribute__((unused)))
9308{
9309 return "wlan.bssid";
9310}
9311
9312static const char*
9313wlan_ra_ta_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src)
9314{
9315 if (is_src)
9316 return "wlan.ta";
9317
9318 return "wlan.ra";
9319}
9320
9321static const char*
9322wlan_aid_col_filter_str(const address* addr _U___attribute__((unused)), bool_Bool is_src _U___attribute__((unused)))
9323{
9324 return "wlan.fc.sid.association_id";
9325}
9326
9327static void
9328beacon_interval_base_custom(char *result, uint32_t beacon_interval)
9329{
9330 double temp_double;
9331
9332 temp_double = (double)beacon_interval;
9333 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (temp_double * 1024 / 1000000));
9334}
9335
9336static void
9337allocation_duration_base_custom(char *result, uint32_t allocation_duration)
9338{
9339 double temp_double;
9340
9341 temp_double = (double)allocation_duration;
9342 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (temp_double / 1000000));
9343}
9344
9345static void
9346extra_one_base_custom(char *result, uint32_t value)
9347{
9348 snprintf(result, ITEM_LABEL_LENGTH240, "%d", value+1);
9349}
9350
9351static void
9352extra_one_mul_two_base_custom(char *result, uint32_t value)
9353{
9354 snprintf(result, ITEM_LABEL_LENGTH240, "%d", (value+1)*2);
9355}
9356
9357static void
9358rcpi_and_power_level_custom(char *result, uint8_t value)
9359{
9360 /* 802.11-2016 section 9.4.2.38
9361 RCPI = |2 x (P + 110)| in steps of 0.5 dB */
9362
9363 if (value == 0)
9364 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P < -109.5 dBm)", value);
9365 else if (value == 220)
9366 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P >= 0 dBm)", value);
9367 else if (value < 220)
9368 snprintf(result, ITEM_LABEL_LENGTH240, "%d (P = %.1f dBm)", value, ((double)value) / 2 - 110);
9369 else if (value < 255)
9370 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Reserved)", value);
9371 else
9372 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Measurement not available)", value);
9373}
9374
9375static void
9376sts_custom(char *result, uint32_t value)
9377{
9378 snprintf(result, ITEM_LABEL_LENGTH240, "%d STS", value + 1);
9379}
9380
9381static void
9382rep_custom(char *result, uint32_t value)
9383{
9384 snprintf(result, ITEM_LABEL_LENGTH240, "%u repetition%s (%u)", value + 1, plurality(value + 1, "", "s")((value + 1) == 1 ? ("") : ("s")), value);
9385}
9386
9387static void
9388hundred_us_base_custom(char *result, uint32_t value)
9389{
9390 snprintf(result, ITEM_LABEL_LENGTH240, "%0.1f ms (%u)", ((double)value * 100 / 1000), value);
9391}
9392
9393static void
9394partial_tsf_custom(char *result, uint32_t value)
9395{
9396 uint32_t shifted = value << 10;
9397 snprintf(result, ITEM_LABEL_LENGTH240, "%u %s (%u)", shifted,
9398 unit_name_string_get_value(shifted, &units_microseconds), value);
9399}
9400
9401/*
9402 * We use this is displaying the ru allocation region.
9403 */
9404static uint8_t global_he_trigger_bw;
9405
9406static void
9407he_ru_allocation_base_custom(char *result, uint32_t ru_allocation)
9408{
9409 uint32_t tones = 0;
9410
9411 switch (global_he_trigger_bw) {
9412 case 0:
9413 if (ru_allocation <= 8) {
9414 tones = 26;
9415 break;
9416 }
9417 if (ru_allocation >= 37 && ru_allocation <= 40) {
9418 tones = 52;
9419 break;
9420 }
9421 if (ru_allocation >= 53 && ru_allocation <= 54) {
9422 tones = 106;
9423 break;
9424 }
9425 if (ru_allocation == 61) {
9426 tones = 242;
9427 break;
9428 }
9429 // error
9430 break;
9431 case 1:
9432 if (ru_allocation <= 17) {
9433 tones = 26;
9434 break;
9435 }
9436 if (ru_allocation >= 37 && ru_allocation <= 44) {
9437 tones = 52;
9438 break;
9439 }
9440 if (ru_allocation >= 53 && ru_allocation <= 56) {
9441 tones = 106;
9442 break;
9443 }
9444 if (ru_allocation >= 61 && ru_allocation <= 62) {
9445 tones = 242;
9446 break;
9447 }
9448 if (ru_allocation == 65) {
9449 tones = 484;
9450 break;
9451 }
9452 // error
9453 break;
9454 case 2:
9455 /* fall-through */
9456 case 3:
9457 if (ru_allocation <= 36) {
9458 tones = 26;
9459 break;
9460 }
9461 if (ru_allocation >= 37 && ru_allocation <= 52) {
9462 tones = 52;
9463 break;
9464 }
9465 if (ru_allocation >= 53 && ru_allocation <= 60) {
9466 tones = 106;
9467 break;
9468 }
9469 if (ru_allocation >= 61 && ru_allocation <= 64) {
9470 tones = 242;
9471 break;
9472 }
9473 if (ru_allocation >= 65 && ru_allocation <= 66) {
9474 tones = 484;
9475 break;
9476 }
9477 if (ru_allocation == 67) {
9478 tones = 996;
9479 break;
9480 }
9481 if (ru_allocation == 68 && global_he_trigger_bw == 3) {
9482 tones = 2*996;
9483 break;
9484 }
9485 break;
9486 default:
9487 break;
9488 }
9489
9490 if (tones)
9491 snprintf(result, ITEM_LABEL_LENGTH240, "%d (%d tones)", ru_allocation, tones);
9492 else
9493 snprintf(result, ITEM_LABEL_LENGTH240, "%d (bogus number of tones)", ru_allocation);
9494}
9495
9496static void
9497eht_ru_allocation_base_custom(char *result, uint32_t ru_allocation)
9498{
9499 char *ru_str;
9500
9501 /* TODO: check with PS160, B0 of RU allocation, BW */
9502 if (ru_allocation <= 36) {
9503 ru_str = "RU size: 26";
9504 } else if (ru_allocation >= 37 && ru_allocation <= 52) {
9505 ru_str = "RU size: 52";
9506 } else if (ru_allocation >= 53 && ru_allocation <= 60) {
9507 ru_str = "RU size: 106";
9508 } else if (ru_allocation >= 61 && ru_allocation <= 64) {
9509 ru_str = "RU size: 242";
9510 } else if (ru_allocation == 65 || ru_allocation == 66) {
9511 ru_str = "RU size: 484";
9512 } else if (ru_allocation == 67) {
9513 ru_str = "RU size: 996";
9514 } else if (ru_allocation == 68) {
9515 ru_str = "RU size: 2x996";
9516 } else if (ru_allocation == 69) {
9517 ru_str = "RU size: 4x996";
9518 } else if (ru_allocation >= 70 && ru_allocation <= 81) {
9519 ru_str = "MRU size: 52+26";
9520 } else if (ru_allocation >= 82 && ru_allocation <= 89) {
9521 ru_str = "MRU size: 106+26";
9522 } else if (ru_allocation >= 90 && ru_allocation <= 93) {
9523 ru_str = "MRU size: 484+242";
9524 } else if (ru_allocation >= 94 && ru_allocation <= 95) {
9525 ru_str = "MRU size: 996+484";
9526 } else if (ru_allocation >= 96 && ru_allocation <= 99) {
9527 ru_str = "MRU size: 996+484+242";
9528 } else if (ru_allocation >= 100 && ru_allocation <= 103) {
9529 ru_str = "MRU size: 2x996+484";
9530 } else if (ru_allocation == 104) {
9531 ru_str = "MRU size: 3x996";
9532 } else if (ru_allocation == 105 || ru_allocation == 106) {
9533 ru_str = "MRU size: 3x996+484";
9534 } else {
9535 ru_str = "Reserved";
9536 }
9537
9538 snprintf(result, ITEM_LABEL_LENGTH240, "%d (%s)", ru_allocation, ru_str);
9539}
9540
9541/*
9542 * We use this to display the ANSI/CTA-2063 Serial number length
9543 */
9544static void
9545vs_sgdsn_serialnumber_len_custom(char *result, uint32_t val)
9546{
9547 if (val >= 0x30 && val <= 0x39) {
9548 snprintf(result, ITEM_LABEL_LENGTH240, "%d byte(s)", val-0x30);
9549 } else if (val >= 0x41 && val <= 0x46) {
9550 snprintf(result, ITEM_LABEL_LENGTH240, "%d byte(s)", val-0x37);
9551 } else {
9552 snprintf(result, ITEM_LABEL_LENGTH240, "Invalid length: %u", val);
9553 }
9554}
9555
9556/* ************************************************************************* */
9557/* Mesh Control field helper functions
9558 *
9559 * Per IEEE 802.11s Draft 12.0 section 7.2.2.1:
9560 *
9561 * The frame body consists of either:
9562 * The MSDU (or a fragment thereof), the Mesh Control field (if and only if the
9563 * frame is transmitted by a mesh STA and the Mesh Control Present subfield of
9564 * the QoS Control field is 1)...
9565 *
9566 * 8.2.4.5.1 "QoS Control field structure", table 8-4, in 802.11-2012,
9567 * seems to indicate that the bit that means "Mesh Control Present" in
9568 * frames sent by mesh STAs in a mesh BSS is part of the TXOP Limit field,
9569 * the AP PS Buffer State field, the TXOP Duration Requested field, or the
9570 * Queue Size field in some data frames in non-mesh BSSes.
9571 *
9572 * We need a statefull sniffer for that. For now, use heuristics.
9573 *
9574 * Notably, only mesh data frames contain the Mesh Control field in the header.
9575 * Other frames that contain mesh control (i.e., multihop action frames) have
9576 * it deeper in the frame body where it can be definitively identified.
9577 * Further, mesh data frames always have to-ds and from-ds either 11 or 01. We
9578 * use these facts to make our heuristics more reliable.
9579 * ************************************************************************* */
9580static int
9581has_mesh_control(uint16_t fcf, uint16_t qos_ctl, uint8_t mesh_flags)
9582{
9583 /* assume mesh control present if the QOS field's Mesh Control Present bit is
9584 * set, all reserved bits in the mesh_flags field are zero, and the address
9585 * extension mode is not a reserved value.
9586 */
9587 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))) &&
9588 (QOS_MESH_CONTROL_PRESENT(qos_ctl)(((qos_ctl) & 0x0100) >> 8)) &&
9589 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION0x3) == 0) &&
9590 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3) != MESH_FLAGS_ADDRESS_EXTENSION0x3));
9591}
9592
9593/****************************************************************************** */
9594/*
9595 * locally originated mesh frames will have a mesh control field, but no QoS header
9596 * detect the presence of mesh control field by checking if mesh flags are legal
9597 * and confirming that the next header is an 802.2 LLC header
9598 *
9599 ****************************************************************************** */
9600static int
9601has_mesh_control_local(uint16_t fcf, uint8_t mesh_flags, uint16_t next_header)
9602{
9603 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))) &&
9604 ((mesh_flags & ~MESH_FLAGS_ADDRESS_EXTENSION0x3) == 0) &&
9605 ((mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3) != MESH_FLAGS_ADDRESS_EXTENSION0x3)) &&
9606 next_header == 0xaaaa;
9607}
9608
9609static int
9610find_mesh_control_length(uint8_t mesh_flags)
9611{
9612 return 6 + 6*(mesh_flags & MESH_FLAGS_ADDRESS_EXTENSION0x3);
9613}
9614
9615static mimo_control_t
9616get_mimo_control(tvbuff_t *tvb, int offset)
9617{
9618 uint16_t mimo;
9619 mimo_control_t output;
9620
9621 mimo = tvb_get_letohs(tvb, offset);
9622
9623 output.nc = (mimo & 0x0003) + 1;
9624 output.nr = ((mimo & 0x000C) >> 2) + 1;
9625 output.chan_width = (mimo & 0x0010) >> 4;
9626 output.coefficient_size = 4; /* XXX - Is this a good default? */
9627
9628 switch ((mimo & 0x0060) >> 5)
9629 {
9630 case 0:
9631 output.grouping = 1;
9632 break;
9633
9634 case 1:
9635 output.grouping = 2;
9636 break;
9637
9638 case 2:
9639 output.grouping = 4;
9640 break;
9641
9642 default:
9643 output.grouping = 1;
9644 break;
9645 }
9646
9647 switch ((mimo & 0x0180) >> 7)
9648 {
9649 case 0:
9650 output.coefficient_size = 4;
9651 break;
9652
9653 case 1:
9654 output.coefficient_size = 5;
9655 break;
9656
9657 case 2:
9658 output.coefficient_size = 6;
9659 break;
9660
9661 case 3:
9662 output.coefficient_size = 8;
9663 break;
9664 }
9665
9666 output.codebook_info = (mimo & 0x0600) >> 9;
9667 output.remaining_matrix_segment = (mimo & 0x3800) >> 11;
9668
9669 return output;
9670}
9671
9672static int
9673get_mimo_na(uint8_t nr, uint8_t nc)
9674{
9675 if ((nr == 2) && (nc == 1)) {
9676 return 2;
9677 } else if ((nr == 2) && (nc == 2)) {
9678 return 2;
9679 } else if ((nr == 3) && (nc == 1)) {
9680 return 4;
9681 } else if ((nr == 3) && (nc == 2)) {
9682 return 6;
9683 } else if ((nr == 3) && (nc == 3)) {
9684 return 6;
9685 } else if ((nr == 4) && (nc == 1)) {
9686 return 6;
9687 } else if ((nr == 4) && (nc == 2)) {
9688 return 10;
9689 } else if ((nr == 4) && (nc == 3)) {
9690 return 12;
9691 } else if ((nr == 4) && (nc == 4)) {
9692 return 12;
9693 } else{
9694 return 0;
9695 }
9696}
9697
9698static int
9699get_mimo_ns(bool_Bool chan_width, uint8_t output_grouping)
9700{
9701 int ns = 0;
9702
9703 if (chan_width)
9704 {
9705 switch (output_grouping)
9706 {
9707 case 1:
9708 ns = 114;
9709 break;
9710
9711 case 2:
9712 ns = 58;
9713 break;
9714
9715 case 4:
9716 ns = 30;
9717 break;
9718
9719 default:
9720 ns = 0;
9721 }
9722 } else {
9723 switch (output_grouping)
9724 {
9725 case 1:
9726 ns = 56;
9727 break;
9728
9729 case 2:
9730 ns = 30;
9731 break;
9732
9733 case 4:
9734 ns = 16;
9735 break;
9736
9737 default:
9738 ns = 0;
9739 }
9740 }
9741
9742 return ns;
9743}
9744
9745static int
9746add_mimo_csi_matrices_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9747{
9748 proto_tree *snr_tree;
9749 int csi_matrix_size, start_offset;
9750 int ns, i;
9751
9752 start_offset = offset;
9753 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
9754 ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9755
9756 for (i = 1; i <= mimo_cntrl.nr; i++)
9757 {
9758 uint8_t snr;
9759
9760 snr = tvb_get_uint8(tvb, offset);
9761 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9762 snr, "Channel %d - Signal to Noise Ratio: 0x%02X", i, snr);
9763 offset += 1;
9764 }
9765
9766 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9767 csi_matrix_size = ns*(3+(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size));
9768 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9769 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9770 offset += csi_matrix_size;
9771 return offset - start_offset;
9772}
9773
9774static int
9775add_mimo_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9776{
9777 proto_tree *snr_tree;
9778 int csi_matrix_size, start_offset;
9779 int ns, i;
9780
9781 start_offset = offset;
9782 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc, ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9783
9784 for (i = 1; i <= mimo_cntrl.nc; i++)
9785 {
9786 uint8_t snr;
9787
9788 snr = tvb_get_uint8(tvb, offset);
9789 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9790 snr, "Stream %d - Signal to Noise Ratio: 0x%02X", i, snr);
9791 offset += 1;
9792 }
9793
9794 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9795 csi_matrix_size = ns*(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size);
9796 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9797 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_bf_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9798 offset += csi_matrix_size;
9799 return offset - start_offset;
9800}
9801
9802static int
9803add_mimo_compressed_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_control_t mimo_cntrl)
9804{
9805 proto_tree *snr_tree;
9806 int csi_matrix_size, start_offset;
9807 int ns, na, i;
9808
9809 start_offset = offset;
9810 snr_tree = proto_tree_add_subtree(tree, tvb, offset, mimo_cntrl.nc,
9811 ett_mimo_report, NULL((void*)0), "Signal to Noise Ratio");
9812
9813 for (i = 1; i <= mimo_cntrl.nc; i++)
9814 {
9815 int8_t snr;
9816 char edge_sign;
9817
9818 snr = tvb_get_int8(tvb, offset);
9819
9820 switch(snr) {
9821 case -128:
9822 edge_sign = '<';
9823 break;
9824 case 127:
9825 edge_sign = '>';
9826 break;
9827 default:
9828 edge_sign = ' ';
9829 break;
9830 }
9831 proto_tree_add_uint_format(snr_tree, hf_ieee80211_ff_mimo_csi_snr, tvb, offset, 1,
9832 snr, "Stream %d - Signal to Noise Ratio: %c%3.2fdB", i, edge_sign,snr/4.0+22.0);
9833 offset += 1;
9834 }
9835
9836 na = get_mimo_na(mimo_cntrl.nr, mimo_cntrl.nc);
9837 ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
9838 csi_matrix_size = ns*(na*((mimo_cntrl.codebook_info+1)*2 + 2)/2);
9839 csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size)(((csi_matrix_size) + ((unsigned)(8U-1U))) & (~((unsigned
)(8U-1U))))
/ 8;
9840 proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_cbf_matrices, tvb, offset, csi_matrix_size, ENC_NA0x00000000);
9841 offset += csi_matrix_size;
9842 return offset - start_offset;
9843}
9844
9845static void
9846mesh_active_window_base_custom(char *result, uint32_t mesh_active_window)
9847{
9848 snprintf(result, ITEM_LABEL_LENGTH240, "%f [Seconds]", (mesh_active_window * 1024.0 / 1000000));
9849}
9850
9851/* ************************************************************************* */
9852/* This is the capture function used to update packet counts */
9853/* ************************************************************************* */
9854static bool_Bool
9855capture_ieee80211_common(const unsigned char * pd, int offset, int len,
9856 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)), bool_Bool datapad)
9857{
9858 uint16_t fcf, hdr_length;
9859
9860 if (!BYTES_ARE_IN_FRAME(offset, len, 2)((unsigned)(offset) + (unsigned)(2) > (unsigned)(offset) &&
(unsigned)(offset) + (unsigned)(2) <= (unsigned)(len))
)
9861 return false0;
9862
9863 fcf = pletohu16(&pd[offset]);
9864
9865 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))
9866 return false0;
9867
9868 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)))
) {
9869
9870 case DATA0x20:
9871 case DATA_CF_ACK0x21:
9872 case DATA_CF_POLL0x22:
9873 case DATA_CF_ACK_POLL0x23:
9874 case DATA_QOS_DATA0x28:
9875 case DATA_QOS_DATA_CF_ACK0x29:
9876 case DATA_QOS_DATA_CF_POLL0x2A:
9877 case DATA_QOS_DATA_CF_ACK_POLL0x2B:
9878 {
9879 /* These are data frames that actually contain *data*. */
9880 hdr_length = (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) ? DATA_LONG_HDR_LEN30 : DATA_SHORT_HDR_LEN24;
9881
9882 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)
) {
9883 /* QoS frame, so the header includes a QoS field */
9884 uint16_t qosoff; /* Offset of the 2-byte QoS field */
9885 uint8_t mesh_flags;
9886
9887 qosoff = hdr_length;
9888 hdr_length += 2; /* Include the QoS field in the header length */
9889
9890 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
9891 /* Frame has a 4-byte HT Control field */
9892 hdr_length += 4;
9893 }
9894
9895 if (datapad) {
9896 /*
9897 * Include the padding between the 802.11 header and the body,
9898 * as "helpfully" provided by some Atheros adapters.
9899 *
9900 * In the Atheros mesh capture sample we have, the padding
9901 * is before the mesh header, possibly because it doesn't
9902 * recognize the mesh header.
9903 */
9904 hdr_length = WS_ROUNDUP_4(hdr_length)(((hdr_length) + ((unsigned)(4U-1U))) & (~((unsigned)(4U-
1U))))
;
9905 }
9906
9907 /*
9908 * Does it look as if we have a mesh header?
9909 * Look at the Mesh Control subfield of the QoS field and at the
9910 * purported mesh flag fields.
9911 */
9912 if (!BYTES_ARE_IN_FRAME(offset, hdr_length, 1)((unsigned)(offset) + (unsigned)(1) > (unsigned)(offset) &&
(unsigned)(offset) + (unsigned)(1) <= (unsigned)(hdr_length
))
)
9913 return false0;
9914
9915 mesh_flags = pd[hdr_length];
9916 if (has_mesh_control(fcf, pletohu16(&pd[qosoff]), mesh_flags)) {
9917 /* Yes, add the length of that in as well. */
9918 hdr_length += find_mesh_control_length(mesh_flags);
9919 }
9920 }
9921 /* I guess some bridges take Netware Ethernet_802_3 frames,
9922 which are 802.3 frames (with a length field rather than
9923 a type field, but with no 802.2 header in the payload),
9924 and just stick the payload into an 802.11 frame. I've seen
9925 captures that show frames of that sort.
9926
9927 We also handle some odd form of encapsulation in which a
9928 complete Ethernet frame is encapsulated within an 802.11
9929 data frame, with no 802.2 header. This has been seen
9930 from some hardware.
9931
9932 On top of that, at least at some point it appeared that
9933 the OLPC XO sent out frames with two bytes of 0 between
9934 the "end" of the 802.11 header and the beginning of
9935 the payload.
9936
9937 So, if the packet doesn't start with 0xaa 0xaa:
9938
9939 we first use the same scheme that linux-wlan-ng does to detect
9940 those encapsulated Ethernet frames, namely looking to see whether
9941 the frame either starts with 6 octets that match the destination
9942 address from the 802.11 header or has 6 octets that match the
9943 source address from the 802.11 header following the first 6 octets,
9944 and, if so, treat it as an encapsulated Ethernet frame;
9945
9946 otherwise, we use the same scheme that we use in the Ethernet
9947 dissector to recognize Netware 802.3 frames, namely checking
9948 whether the packet starts with 0xff 0xff and, if so, treat it
9949 as an encapsulated IPX frame, and then check whether the
9950 packet starts with 0x00 0x00 and, if so, treat it as an OLPC
9951 frame. */
9952 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))
)
9953 return false0;
9954
9955 if ((pd[offset+hdr_length] != 0xaa) && (pd[offset+hdr_length+1] != 0xaa)) {
9956#if 0
9957 /* XXX - this requires us to parse the header to find the source
9958 and destination addresses. */
9959 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))
) {
9960 /* We have two MAC addresses after the header. */
9961 if ((memcmp(&pd[offset+hdr_length+6], pinfo->dl_src.data, 6) == 0) ||
9962 (memcmp(&pd[offset+hdr_length+6], pinfo->dl_dst.data, 6) == 0)) {
9963 return capture_eth (pd, offset + hdr_length, len, cpinfo, pseudo_header);
9964 }
9965 }
9966#endif
9967 if ((pd[offset+hdr_length] == 0xff) && (pd[offset+hdr_length+1] == 0xff))
9968 return call_capture_dissector (ipx_cap_handle, pd, offset+hdr_length, len, cpinfo, pseudo_header);
9969 else if ((pd[offset+hdr_length] == 0x00) && (pd[offset+hdr_length+1] == 0x00))
9970 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length + 2, len, cpinfo, pseudo_header);
9971 }
9972 else {
9973 return call_capture_dissector (llc_cap_handle, pd, offset + hdr_length, len, cpinfo, pseudo_header);
9974 }
9975 break;
9976 }
9977 }
9978
9979 return false0;
9980}
9981
9982/*
9983 * Handle 802.11 with a variable-length link-layer header.
9984 */
9985static bool_Bool
9986capture_ieee80211(const unsigned char * pd, int offset, int len, capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)))
9987{
9988 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, false0);
9989}
9990
9991/*
9992 * Handle 802.11 with a variable-length link-layer header and data padding.
9993 */
9994static bool_Bool
9995capture_ieee80211_datapad(const unsigned char * pd, int offset, int len,
9996 capture_packet_info_t *cpinfo, const union wtap_pseudo_header *pseudo_header _U___attribute__((unused)))
9997{
9998 return capture_ieee80211_common (pd, offset, len, cpinfo, pseudo_header, true1);
9999}
10000
10001
10002/* ************************************************************************* */
10003/* Add the subtree used to store the fixed parameters */
10004/* ************************************************************************* */
10005static proto_tree *
10006get_fixed_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size,
10007 bool_Bool no_append)
10008{
10009 proto_item *fixed_fields;
10010
10011 fixed_fields = proto_tree_add_item(tree, hf_ieee80211_fixed_parameters, tvb, start, size, ENC_NA0x00000000);
10012 if (!no_append)
10013 proto_item_append_text(fixed_fields, " (%d bytes)", size);
10014
10015 return proto_item_add_subtree(fixed_fields, ett_fixed_parameters);
10016}
10017
10018
10019/* ************************************************************************* */
10020/* Add the subtree used to store tagged parameters */
10021/* ************************************************************************* */
10022static proto_tree *
10023get_tagged_parameter_tree(proto_tree * tree, tvbuff_t *tvb, int start, int size)
10024{
10025 proto_item *tagged_fields;
10026
10027 tagged_fields = proto_tree_add_item(tree, hf_ieee80211_tagged_parameters, tvb, start, -1, ENC_NA0x00000000);
10028 proto_item_append_text(tagged_fields, " (%d bytes)", size);
10029
10030 return proto_item_add_subtree(tagged_fields, ett_tagged_parameters);
10031}
10032
10033static void
10034add_ptk_analysis(tvbuff_t *tvb, proto_tree *tree, DOT11DECRYPT_KEY_ITEM *used_key)
10035{
10036 if (!used_key) {
10037 return;
10038 }
10039 const uint8_t *key = NULL((void*)0);
10040 proto_item *ti;
10041 char buf[SHORT_STR256];
10042 int len = Dot11DecryptGetKCK(used_key, &key);
10043 bytes_to_hexstr(buf, key, len);
10044 buf[2 * len] = '\0';
10045 ti = proto_tree_add_string(tree, hf_ieee80211_fc_analysis_kck, tvb, 0, 0, buf);
10046 proto_item_set_generated(ti);
10047
10048 len = Dot11DecryptGetKEK(used_key, &key);
10049 bytes_to_hexstr(buf, key, len);
10050 buf[2 * len] = '\0';
10051 ti = proto_tree_add_string(tree, hf_ieee80211_fc_analysis_kek, tvb, 0, 0, buf);
10052 proto_item_set_generated(ti);
10053}
10054
10055static int
10056dissect_vendor_action_marvell(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
10057{
10058 uint8_t octet;
10059 int offset = 0;
10060
10061 octet = tvb_get_uint8(tvb, offset);
10062 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_action_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10063 offset += 1;
10064 switch (octet)
10065 {
10066 case MRVL_ACTION_MESH_MANAGEMENT1:
10067 octet = tvb_get_uint8(tvb, offset);
10068 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10069 offset += 1;
10070 switch (octet)
10071 {
10072 case MRVL_MESH_MGMT_ACTION_RREQ0:
10073 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10074 offset += 1;
10075 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10076 offset += 1;
10077 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10078 offset += 1;
10079 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10080 offset += 1;
10081 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_rreqid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10082 offset += 4;
10083 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA0x00000000);
10084 offset += 6;
10085 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10086 offset += 4;
10087 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10088 offset += 4;
10089 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10090 offset += 4;
10091 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10092 offset += 1;
10093 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10094 offset += 1;
10095 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
10096 offset += 6;
10097 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10098 offset += 4;
10099 break;
10100 case MRVL_MESH_MGMT_ACTION_RREP1:
10101 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10102 offset += 1;
10103 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10104 offset += 1;
10105 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10106 offset += 1;
10107 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10108 offset += 1;
10109 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
10110 offset += 6;
10111 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10112 offset += 4;
10113 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10114 offset += 4;
10115 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10116 offset += 4;
10117 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_sa, tvb, offset, 6, ENC_NA0x00000000);
10118 offset += 6;
10119 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_ssn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10120 offset += 4;
10121 break;
10122 case MRVL_MESH_MGMT_ACTION_RERR2:
10123 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10124 offset += 1;
10125 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10126 offset += 1;
10127 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dstcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10128 offset += 1;
10129 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_da, tvb, offset, 6, ENC_NA0x00000000);
10130 offset += 6;
10131 proto_tree_add_item(tree, hf_ieee80211_ff_marvell_mesh_mgt_dsn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
10132 offset += 4;
10133 break;
10134 default:
10135 break;
10136 }
10137 break;
10138 default:
10139 break;
10140 }
10141
10142 return offset;
10143}
10144
10145static int
10146dissect_dscp_policy_query(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10147 proto_tree *tree, int offset)
10148{
10149 int start_offset = offset;
10150
10151 while (tvb_captured_length_remaining(tvb, offset)) {
10152 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
10153 }
10154
10155 return offset - start_offset;
10156}
10157
10158static int * const rqst_control_fields[] = {
10159 &hf_ieee80211_oui_qos_mgmt_rq_ctrl_more,
10160 &hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset,
10161 &hf_ieee80211_oui_qos_mgmt_rq_reserved,
10162 NULL((void*)0)
10163};
10164
10165static int
10166dissect_dscp_policy_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10167 proto_tree *tree, int offset)
10168{
10169 int start_offset = offset;
10170
10171 proto_tree_add_bitmask(tree, tvb, offset,
10172 hf_ieee80211_oui_qos_mgmt_rqst_control,
10173 ett_pol_rqst_cont_tree, rqst_control_fields,
10174 ENC_NA0x00000000);
10175 offset += 1;
10176
10177 while (tvb_reported_length_remaining(tvb, offset)) {
10178 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
10179 }
10180
10181 return offset - start_offset;
10182}
10183
10184static int * const resp_control_fields[] = {
10185 &hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more,
10186 &hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset,
10187 &hf_ieee80211_oui_qos_mgmt_rsp_reserved,
10188 NULL((void*)0)
10189};
10190
10191static int
10192dissect_dscp_policy_response(tvbuff_t *tvb, packet_info *pinfo,
10193 proto_tree *tree, int offset)
10194{
10195 int start_offset = offset;
10196 uint8_t count;
10197 wmem_strbuf_t *status_buf = wmem_strbuf_create(pinfo->pool)wmem_strbuf_new(pinfo->pool, "");
10198 int i;
10199
10200 proto_tree_add_bitmask(tree, tvb, offset,
10201 hf_ieee80211_oui_qos_mgmt_resp_control,
10202 ett_pol_resp_cont_tree, resp_control_fields,
10203 ENC_NA0x00000000);
10204 offset += 1;
10205
10206 count = tvb_get_uint8(tvb, offset);
10207 proto_tree_add_item(tree, hf_ieee80211_oui_qos_mgmt_count, tvb, offset,
10208 1, ENC_NA0x00000000);
10209 offset += 1;
10210
10211 for (i = 0; i < count; i++) {
10212 proto_tree *status_tree = NULL((void*)0);
10213 uint8_t scsid, status;
10214
10215 scsid = tvb_get_uint8(tvb, offset);
10216 status_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2,
10217 ett_dscp_policy_status_list,
10218 NULL((void*)0), "Status list item %d",
10219 i);
10220 proto_tree_add_item(status_tree, hf_ieee80211_dscp_policy_id, tvb,
10221 offset, 1, ENC_NA0x00000000);
10222 if (wmem_strbuf_get_len(status_buf) == 0) {
10223 wmem_strbuf_append_printf(status_buf, "%u:", scsid);
10224 } else {
10225 wmem_strbuf_append_printf(status_buf, " %u:", scsid);
10226 }
10227 offset += 1;
10228
10229 status = tvb_get_uint8(tvb, offset);
10230 proto_tree_add_item(status_tree, hf_ieee80211_dscp_policy_status, tvb,
10231 offset, 1, ENC_NA0x00000000);
10232 wmem_strbuf_append_printf(status_buf, "%u", status);
10233 offset += 1;
10234 }
10235 proto_tree_add_string(tree, hf_ieee80211_dscp_policy_scs_sts_list, tvb, 0, 1,
10236 wmem_strbuf_finalize(status_buf));
10237
10238 return offset - start_offset;
10239}
10240
10241static int
10242dissect_vendor_action_wfa_qos_mgmt(tvbuff_t *tvb, packet_info *pinfo,
10243 proto_tree *tree, void *data _U___attribute__((unused)))
10244{
10245 int offset = 0;
10246 uint8_t subtype = tvb_get_uint8(tvb, offset);
10247
10248 proto_tree_add_item(tree, hf_ieee80211_oui_qos_subtype, tvb, offset, 1,
10249 ENC_NA0x00000000);
10250 offset += 1;
10251
10252 proto_tree_add_item(tree, hf_ieee80211_oui_qos_mgmt_dialog_token, tvb, offset,
10253 1, ENC_NA0x00000000);
10254 offset += 1;
10255
10256 switch (subtype) {
10257 case 0:
10258 offset += dissect_dscp_policy_query(tvb, pinfo, tree, offset);
10259 break;
10260 case 1:
10261 offset += dissect_dscp_policy_request(tvb, pinfo, tree, offset);
10262 break;
10263 case 2:
10264 offset += dissect_dscp_policy_response(tvb, pinfo, tree, offset);
10265 break;
10266 }
10267
10268 return offset;
10269}
10270
10271static int
10272dissect_vendor_action_wifi_alliance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
10273{
10274 uint8_t subtype;
10275 int offset = 0;
10276 int dissected;
10277 tvbuff_t *subtvb;
10278
10279 subtype = tvb_get_uint8(tvb, offset);
10280 proto_tree_add_item(tree, hf_ieee80211_tag_oui_wfa_action_type, tvb, offset,
10281 1, ENC_NA0x00000000);
10282 offset += 1;
10283
10284 subtvb = tvb_new_subset_remaining(tvb, offset);
10285 dissected = dissector_try_uint_with_data(wifi_alliance_action_subtype_table, subtype, subtvb, pinfo, tree, false0, NULL((void*)0));
10286 if (dissected <= 0)
10287 {
10288 call_data_dissector(subtvb, pinfo, tree);
10289 dissected = tvb_reported_length(subtvb);
10290 }
10291
10292 offset += dissected;
10293
10294 return offset;
10295}
10296
10297/*
10298 * This function is called from two different places. In one case it is called
10299 * without the tag and length. In other cases, it is called with those and
10300 * is asked to return the type and subtype. We know the difference because
10301 * type and subtype will be NULL in the first case.
10302 */
10303static unsigned
10304dissect_advertisement_protocol_common(packet_info *pinfo, proto_tree *tree,
10305 tvbuff_t *tvb, int offset, unsigned *type,
10306 unsigned *subtype)
10307{
10308 uint8_t tag_no = 0, tag_len, left;
10309 proto_item *item = NULL((void*)0), *adv_item;
10310 proto_tree *adv_tree, *adv_tuple_tree;
10311
10312 if (type)
10313 *type = 0xff; // Last reserved value
10314 if (subtype)
10315 *subtype = 0xff;
10316 tag_no = tvb_get_uint8(tvb, offset);
10317 if (type)
10318 item = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10319
10320 /*
10321 * If we have the tag and len, use the len in the tvb, otherwise ask
10322 * for the length of the tvb.
10323 */
10324 if (type)
10325 tag_len = tvb_get_uint8(tvb, offset + 1);
10326 else
10327 tag_len = tvb_reported_length_remaining(tvb, 0);
10328
10329 if (type && tag_no != TAG_ADVERTISEMENT_PROTOCOL108) {
10330 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_number,
10331 "Unexpected IE %d (expected Advertisement "
10332 "Protocol)", tag_no);
10333 return 2 + tag_len;
10334 }
10335 if (type)
10336 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
10337 if (tag_len < 2) {
10338 if (!type)
10339 item = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
10340 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
10341 "Advertisement Protocol: IE must be at least 2 "
10342 "octets long");
10343 return 2 + tag_len;
10344 }
10345
10346 left = tag_len;
10347 if (type) /* Skip past the header if there ... */
10348 offset += 2;
10349 adv_tree = proto_tree_add_subtree(tree, tvb, offset, left,
10350 ett_adv_proto, &adv_item, "Advertisement Protocol element");
10351
10352 while (left >= 2) {
10353 uint8_t id;
10354
10355 id = tvb_get_uint8(tvb, offset + 1);
10356 if (id == 0)
10357 proto_item_append_text(adv_item, ": ANQP");
10358 adv_tuple_tree = proto_tree_add_subtree_format(adv_tree, tvb, offset, 2, ett_adv_proto_tuple, &item,
10359 "Advertisement Protocol Tuple: %s",
10360 val_to_str(pinfo->pool, id, adv_proto_id_vals,
10361 "Unknown (%d)"));
10362
10363 proto_tree_add_item(adv_tuple_tree,
10364 hf_ieee80211_tag_adv_proto_resp_len_limit, tvb,
10365 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10366 proto_tree_add_item(adv_tuple_tree,
10367 hf_ieee80211_tag_adv_proto_pame_bi, tvb,
10368 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10369 offset += 1;
10370 left--;
10371 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_proto_id, tvb,
10372 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10373 offset += 1;
10374 left--;
10375
10376 if ((id == 0) && type)
10377 *type = ADV_PROTO_ID_ANQP0;
10378
10379 if (id == 221) {
10380 /* Vendor specific */
10381 uint8_t len = tvb_get_uint8(tvb, offset);
10382 unsigned oui;
10383 uint8_t wfa_subtype;
10384 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_tag_adv_vs_len, tvb, offset, 1, ENC_NA0x00000000);
10385 offset += 1;
10386 left -= 1;
10387 if (type)
10388 *type = ADV_PROTO_ID_VS221;
10389 if (len > left) {
10390 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length,
10391 "Vendor specific info length error");
10392 return 2 + tag_len;
10393 }
10394 proto_tree_add_item_ret_uint(adv_tuple_tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
10395 offset += 3;
10396 left -= 3;
10397 wfa_subtype = tvb_get_uint8(tvb, offset);
10398 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_anqp_wfa_subtype, tvb,
10399 offset, 1, ENC_NA0x00000000);
10400 offset += 1;
10401 left -= 1;
10402 if (oui == OUI_WFA0x506F9A) {
10403 proto_tree_add_item(adv_tuple_tree, hf_ieee80211_dpp_subtype, tvb, offset, 1, ENC_NA0x00000000);
10404 if (subtype && wfa_subtype == WFA_SUBTYPE_DPP26) {
10405 *subtype = WFA_SUBTYPE_DPP26;
10406 *subtype |= (tvb_get_uint8(tvb, offset) << 8);
10407 }
10408 offset++;
10409 left--;
10410 }
10411 }
10412 }
10413
10414 if (left) {
10415 expert_add_info(pinfo, item, &ei_ieee80211_extra_data);
10416 }
10417
10418 return 2 + tag_len;
10419}
10420
10421static int
10422dissect_advertisement_protocol(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
10423{
10424 return dissect_advertisement_protocol_common(pinfo, tree, tvb, 0, NULL((void*)0), NULL((void*)0));
10425}
10426
10427static void
10428dissect_anqp_query_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10429{
10430 while (offset + 2 <= end) {
10431 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_query_id,
10432 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10433 offset += 2;
10434 }
10435 if (offset != end) {
10436 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
10437 "Unexpected ANQP Query list format");
10438 }
10439}
10440
10441static void
10442dissect_hs20_anqp_hs_capability_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10443{
10444 while (offset < end) {
10445 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_hs_capability_list,
10446 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10447 offset++;
10448 }
10449}
10450
10451static void
10452dissect_anqp_capab_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10453{
10454 uint16_t id, len;
10455 proto_item *item;
10456 proto_tree *vtree;
10457 uint32_t oui;
10458 uint8_t subtype;
10459
10460 while (offset + 2 <= end) {
10461 id = tvb_get_letohs(tvb, offset);
10462 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_capability,
10463 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10464 offset += 2;
10465 if (id == ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797) {
10466 vtree = proto_item_add_subtree(item, ett_anqp_vendor_capab);
10467 len = tvb_get_letohs(tvb, offset);
10468 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vlen,
10469 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10470 offset += 2;
10471 if ((len < 3) || ((offset + len) > end)) {
10472 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_capability);
10473 return;
10474 }
10475 proto_tree_add_item_ret_uint(vtree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
10476 offset += 3;
10477 len -= 3;
10478
10479 switch (oui) {
10480 case OUI_WFA0x506F9A:
10481 if (len == 0)
10482 break;
10483 subtype = tvb_get_uint8(tvb, offset);
10484 proto_item_append_text(vtree, " - WFA - %s",
10485 val_to_str(pinfo->pool, subtype, wfa_anqp_subtype_vals,
10486 "Unknown (%u)"));
10487 proto_tree_add_item(vtree, hf_ieee80211_anqp_wfa_subtype,
10488 tvb, offset, 1, ENC_NA0x00000000);
10489 offset++;
10490 len--;
10491 switch (subtype) {
10492 case WFA_ANQP_SUBTYPE_HS2017:
10493 proto_tree_add_item(vtree, hf_ieee80211_hs20_anqp_subtype, tvb, offset, 1, ENC_NA0x00000000);
10494 proto_tree_add_item(vtree, hf_ieee80211_hs20_anqp_reserved, tvb, offset + 1, 1, ENC_NA0x00000000);
10495 offset += 2;
10496 len -= 2;
10497 dissect_hs20_anqp_hs_capability_list(vtree, tvb, offset, end);
10498 break;
10499 default:
10500 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
10501 tvb, offset, len, ENC_NA0x00000000);
10502 break;
10503 }
10504 break;
10505 default:
10506 proto_tree_add_item(vtree, hf_ieee80211_ff_anqp_capability_vendor,
10507 tvb, offset, len, ENC_NA0x00000000);
10508 break;
10509 }
10510
10511 offset += len;
10512 }
10513 }
10514 if (offset != end) {
10515 expert_add_info_format(pinfo, tree, &ei_ieee80211_ff_anqp_info_length,
10516 "Unexpected ANQP Capability list format");
10517 }
10518}
10519
10520static const value_string venue_group_vals[] = {
10521 { 0, "Unspecified" },
10522 { 1, "Assembly" },
10523 { 2, "Business" },
10524 { 3, "Educational" },
10525 { 4, "Factory and Industrial" },
10526 { 5, "Institutional" },
10527 { 6, "Mercantile" },
10528 { 7, "Residential" },
10529 { 8, "Storage" },
10530 { 9, "Utility and Miscellaneous" },
10531 { 10, "Vehicular" },
10532 { 11, "Outdoor" },
10533 { 0, NULL((void*)0) }
10534};
10535static 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) }
;
10536
10537static void
10538dissect_venue_info(proto_tree *tree, tvbuff_t *tvb, int offset)
10539{
10540 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_group,
10541 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10542 proto_tree_add_item(tree, hf_ieee80211_ff_venue_info_type,
10543 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
10544}
10545
10546static void
10547dissect_venue_name_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10548{
10549 proto_item *item;
10550
10551 dissect_venue_info(tree, tvb, offset);
10552 offset += 2;
10553 while (offset + 4 <= end) {
10554 uint8_t vlen = tvb_get_uint8(tvb, offset);
10555 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_length,
10556 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10557 offset += 1;
10558 if ((vlen > (end - offset)) || (vlen < 3)) {
10559 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_venue_length);
10560 break;
10561 }
10562 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_language,
10563 tvb, offset, 3, ENC_ASCII0x00000000);
10564 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_venue_name,
10565 tvb, offset + 3, vlen - 3, ENC_UTF_80x00000002);
10566 offset += vlen;
10567 }
10568}
10569
10570static const value_string nw_auth_type_vals[] = {
10571 { 0, "Acceptance of terms and conditions" },
10572 { 1, "On-line enrollment supported" },
10573 { 2, "http/https redirection" },
10574 { 3, "DNS redirection" },
10575 { 0, NULL((void*)0) }
10576};
10577
10578static void
10579dissect_network_auth_type(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10580{
10581 while (offset + 3 <= end) {
10582 uint16_t len;
10583 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_indicator,
10584 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10585 offset += 1;
10586 len = tvb_get_letohs(tvb, offset);
10587 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url_len,
10588 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10589 offset += 2;
10590 if (len)
10591 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_url,
10592 tvb, offset, len, ENC_ASCII0x00000000);
10593 offset += len;
10594 }
10595}
10596
10597static void
10598dissect_anqp_network_auth_type_timestamp(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10599{
10600 while (offset + 2 <= end) {
10601 uint8_t len;
10602 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator,
10603 tvb, offset, 1, ENC_NA0x00000000);
10604 len = tvb_get_uint8(tvb, offset + 1);
10605 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len,
10606 tvb, offset, 1, ENC_NA0x00000000);
10607 offset += 2;
10608 if(len)
10609 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_url,
10610 tvb, offset, len, ENC_ASCII0x00000000);
10611 offset += len;
10612 /* Optional Time Value - Either 0 or 10 octets */
10613 /* Format: Octet 0-1: Year (0-65534)
10614 Octet 2: Month (0-12)
10615 Octet 3: Day of month (0-31)
10616 Octet 4: Hours (0-23)
10617 Octet 5: Minutes (0-59)
10618 Octet 6: Seconds (0-59)
10619 Octet 7-8: Milliseconds (0-999)
10620 Octet 9: Reserved */
10621 if ((offset + 10) < end) {
10622 /* Enough bytes to dissect a timestamp */
10623 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_year,
10624 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10625 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_mon,
10626 tvb, offset, 1, ENC_NA0x00000000);
10627 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_day,
10628 tvb, offset, 1, ENC_NA0x00000000);
10629 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_hr,
10630 tvb, offset, 1, ENC_NA0x00000000);
10631 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_min,
10632 tvb, offset, 1, ENC_NA0x00000000);
10633 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_sec,
10634 tvb, offset, 1, ENC_NA0x00000000);
10635 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_msec,
10636 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10637 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd,
10638 tvb, offset, 1, ENC_NA0x00000000);
10639 offset += 10;
10640 } else {
10641 /* Not enough bytes to dissect a timestamp */
10642 }
10643 }
10644}
10645
10646static void
10647add_manuf(proto_item *item, tvbuff_t *tvb, int offset)
10648{
10649 const char *manuf_name;
10650
10651 manuf_name = tvb_get_manuf_name_if_known(tvb, offset);
10652 if (manuf_name == NULL((void*)0))
10653 return;
10654 proto_item_append_text(item, " - %s", manuf_name);
10655}
10656
10657static void
10658dissect_roaming_consortium_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
10659 int end)
10660{
10661 proto_item *item;
10662 uint8_t len;
10663
10664 while (offset < end) {
10665 len = tvb_get_uint8(tvb, offset);
10666 item = proto_tree_add_item(tree,
10667 hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
10668 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10669 offset += 1;
10670 if ((len > (end - offset)) || (len < 3)) {
10671 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_roaming_consortium_oi_len);
10672 break;
10673 }
10674 item = proto_tree_add_item(tree,
10675 hf_ieee80211_ff_anqp_roaming_consortium_oi,
10676 tvb, offset, len, ENC_NA0x00000000);
10677 add_manuf(item, tvb, offset);
10678 offset += len;
10679 }
10680}
10681
10682static const value_string ip_addr_avail_ipv6_vals[] = {
10683 { 0, "Address type not available" },
10684 { 1, "Address type available" },
10685 { 2, "Availability of the address type not known" },
10686 { 0, NULL((void*)0) }
10687};
10688
10689static const value_string ip_addr_avail_ipv4_vals[] = {
10690 { 0, "Address type not available" },
10691 { 1, "Public IPv4 address available" },
10692 { 2, "Port-restricted IPv4 address available" },
10693 { 3, "Single NATed private IPv4 address available" },
10694 { 4, "Double NATed private IPv4 address available" },
10695 { 5, "Port-restricted IPv4 address and single NATed IPv4 address available" },
10696 { 6, "Port-restricted IPv4 address and double NATed IPv4 address available" },
10697 { 7, "Availability of the address type is not known" },
10698 { 0, NULL((void*)0) }
10699};
10700
10701static void
10702dissect_ip_addr_type_availability_info(proto_tree *tree, tvbuff_t *tvb,
10703 int offset)
10704{
10705 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
10706 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10707 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
10708 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10709}
10710
10711static const value_string nai_realm_encoding_vals[] = {
10712 { 0, "Formatted in accordance with RFC 4282" },
10713 { 1, "UTF-8 formatted that is not formatted in accordance with RFC 4282" },
10714 { 0, NULL((void*)0) }
10715};
10716
10717static const range_string oper_class_rvals[] = {
10718 { 0, 0, "Unknown" }, /* 0 should not be used */
10719 { 1, 65, "Reserved" },
10720 { 66, 66, "0.863 GHz, 1 MHz Spacing" },
10721 { 67, 67, "0.863 GHz, 2 MHz Spacing" },
10722 { 68, 68, "0.902 GHz, 1 MHz Spacing" },
10723 { 69, 69, "0.902 GHz, 2 MHz Spacing" },
10724 { 70, 70, "0.902 GHz, 4 MHz Spacing" },
10725 { 71, 71, "0.902 GHz, 8 MHz Spacing" },
10726 { 72, 72, "0.902 GHz, 16 MHz Spacing" },
10727 { 73, 73, "0.9165 GHz, 1 MHz Spacing" },
10728 { 74, 74, "0.9175 GHz, 1 MHz Spacing" },
10729 { 75, 75, "0.9175 GHz, 2 MHz Spacing" },
10730 { 76, 76, "0.9175 GHz, 4 Spacing" },
10731 { 77, 77, "0.9014 GHz, 1 MHz Spacing" },
10732 { 78, 80, "Reserved" },
10733 { 81, 81, "2.407 GHz, Channels 1-13, 25 MHz Spacing" },
10734 { 82, 82, "2.414 GHz, Channel 14, 25 MHz Spacing" },
10735 { 83, 83, "2.407 GHz, Channels 1-9, 40 MHz Spacing" },
10736 { 84, 84, "2.407 GHz, Channels 5-13, 40 MHz Spacing" },
10737 { 85, 93, "Reserved" },
10738 { 94, 94, "3.0 GHz, Channels 133 and 137, 20 MHz Spacing" },
10739 { 95, 95, "3.0 GHz, Channels 132, 134, 136, and 138, 10 MHz Spacing" },
10740 { 96, 96, "3.0025 GHz, Channels 131-138, 5 MHz Spacing" },
10741 { 97, 100, "Reserved" },
10742 { 101, 101, "4.85 GHz, Channels 21 and 25, 20 MHz Spacing" },
10743 { 102, 102, "4.89 GHz, Channels 11, 13, 15, 17, and 19, 10 MHz Spacing" },
10744 { 103, 103, "4.9375 GHz, Channels 1-10, 5 MHz Spacing" },
10745 { 104, 104, "4.0 GHz, Channels 184 and 192, 40 MHz Spacing" },
10746 { 105, 105, "4.0 GHz, Channels 188 and 196, 40 MHz Spacing" },
10747 { 106, 106, "4.0 GHz, Channels 191 and 195, 20 MHz Spacing" },
10748 { 107, 107, "4.0 GHz, Channels 189, 191, 193, 195, and 197, 10 MHz Spacing" },
10749 { 108, 108, "4.0025 GHz, Channels 188-197, 5 MHz Spacing" },
10750 { 109, 109, "4.0 GHz, Channels 184, 188, 192, and 196, 20 MHz Spacing" },
10751 { 110, 110, "4.0 GHz, Channels 183-189, 10 MHz Spacing" },
10752 { 111, 111, "4.0025 GHz, Channels 182-189, 5 MHz Spacing" },
10753 { 112, 114, "Reserved" },
10754 { 115, 115, "5.0 GHz, Channels 36, 40, 44, and 48, 20 MHz Spacing" },
10755 { 116, 116, "5.0 GHz, Channels 36 and 44, 40 MHz Spacing" },
10756 { 117, 117, "5.0 GHz, Channels 40 and 48, 40 MHz Spacing" },
10757 { 118, 118, "5.0 GHz, Channels 52, 56, 60, and 64, 20 MHz Spacing" },
10758 { 119, 119, "5.0 GHz, Channels 52 and 60, 40 MHz Spacing" },
10759 { 120, 120, "5.0 GHz, Channels 56 and 64, 40 MHz Spacing" },
10760 { 121, 121, "5.0 GHz, Channels 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, and 140, 20 MHz Spacing" },
10761 { 122, 122, "5.0 GHz, Channels 100, 108, 116, 124, and 132, 40 MHz Spacing" },
10762 { 123, 123, "5.0 GHz, Channels 104, 112, 120, 128, and 136, 40 MHz Spacing" },
10763 { 124, 124, "5.0 GHz, Channels 149, 153, 157, and 161, 20 MHz Spacing" },
10764 { 125, 125, "5.0 GHz, Channels 149, 153, 157, 161, 165, and 169, 20 MHz Spacing" },
10765 { 126, 126, "5.0 GHz, Channels 149 and 157, 40 MHz Spacing" },
10766 { 127, 127, "5.0 GHz, Channels 153 and 161, 40 MHz Spacing" },
10767 { 128, 128, "5.0 GHz, Channel center frequency index 42, 58, 106, 122, 138 and 155, 80 MHz Spacing" },
10768 { 129, 129, "5.0 GHz, Channel center frequency index 50 and 114, 160 MHz Spacing" },
10769 { 130, 130, "5.0 GHz, Channel center frequency index 42, 58, 106, 122, 138 and 155, 80 MHz Spacing, 80+" },
10770 { 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" },
10771 { 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" },
10772 { 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" },
10773 { 134, 134, "5.950 GHz, Channel center frequency index 15, 47, 79, 111, 143, 175, and 207, 160 MHz Spacing" },
10774 { 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+" },
10775 { 136, 136, "5.925 GHz, Channel center frequency index 2, 20 MHz Spacing" },
10776 { 137, 137, "5.925 GHz, Channel center frequency index 31, 63, 95, 127, 159, and 191, 320 MHz Spacing" },
10777 { 138, 179, "Reserved" },
10778 { 180, 180, "56.16 GHz, Channels 1, 2, 3, 4, 5, and 6, 2160 MHz Spacing" },
10779 { 181, 181, "56.16 GHz, Channels 2 and 3, 2160 MHz Spacing" },
10780 { 182, 182, "56.70 GHz, Channels 35, 36, 37, and 38, 1080 MHz Spacing" },
10781 { 183, 183, "42.66 GHz, Channels 1, 2, 3, 4, 5, 6, 7, and 8, 540 MHz Spacing" },
10782 { 184, 184, "47.52 GHz, Channels 9 and 10, 540 MHz Spacing" },
10783 { 185, 185, "42.93 GHz, Channels 11, 12, 13, and 14, 1080 MHz Spacing" },
10784 { 186, 186, "47.79 GHz, Channel 15, 1080 MHz Spacing" },
10785 { 187, 191, "Reserved" },
10786 { 192, 254, "Vendor-Specific" },
10787
10788 { 255, 255, "Reserved" },
10789 { 0, 0, NULL((void*)0) }
10790};
10791
10792static const value_string nai_realm_auth_param_id_vals[] = {
10793 { 1, "Expanded EAP Method" },
10794 { 2, "Non-EAP Inner Authentication Type" },
10795 { 3, "Inner Authentication EAP Method Type" },
10796 { 4, "Expanded Inner EAP Method" },
10797 { 5, "Credential Type" },
10798 { 6, "Tunneled EAP Method Credential Type" },
10799 { 221, "Vendor Specific" },
10800 { 0, NULL((void*)0) }
10801};
10802
10803static void
10804dissect_nai_realm_list(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int end)
10805{
10806 uint16_t count, len;
10807 proto_item *item, *r_item;
10808 int f_end, eap_end;
10809 uint8_t nai_len, eap_count, eap_len, auth_param_count, auth_param_len;
10810 uint8_t auth_param_id;
10811 proto_tree *realm_tree, *eap_tree;
10812 const uint8_t *realm;
10813
10814 count = tvb_get_letohs(tvb, offset);
10815 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_nai_realm_count,
10816 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10817 offset += 2;
10818 while (count > 0) {
10819 len = tvb_get_letohs(tvb, offset);
10820 realm_tree = proto_tree_add_subtree(tree, tvb, offset, 2 + len, ett_nai_realm, &r_item, "NAI Realm Data");
10821
10822 item = proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_field_len,
10823 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
10824 offset += 2;
10825 if (offset + len > end) {
10826 expert_add_info_format(pinfo, item, &ei_ieee80211_ff_anqp_nai_field_len,
10827 "Invalid NAI Realm List");
10828 break;
10829 }
10830 f_end = offset + len;
10831 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_encoding,
10832 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10833 offset += 1;
10834 nai_len = tvb_get_uint8(tvb, offset);
10835 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_length,
10836 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10837 offset += 1;
10838 if (offset + nai_len > f_end) {
10839 expert_add_info_format(pinfo, r_item, &ei_ieee80211_ff_anqp_nai_field_len,
10840 "Invalid NAI Realm Data");
10841 break;
10842 }
10843 proto_tree_add_item_ret_string(realm_tree, hf_ieee80211_ff_anqp_nai_realm,
10844 tvb, offset, nai_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &realm);
10845 if (realm) {
10846 proto_item_append_text(r_item, " (%s)", realm);
10847 }
10848 offset += nai_len;
10849 eap_count = tvb_get_uint8(tvb, offset);
10850 proto_tree_add_item(realm_tree, hf_ieee80211_ff_anqp_nai_realm_eap_count,
10851 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10852 offset += 1;
10853
10854 while (eap_count > 0) {
10855 eap_len = tvb_get_uint8(tvb, offset);
10856 eap_end = offset + 1 + eap_len;
10857 eap_tree = proto_tree_add_subtree(realm_tree, tvb, offset, 1 + eap_len,
10858 ett_nai_realm_eap, NULL((void*)0), "EAP Method");
10859
10860 item = proto_tree_add_item(eap_tree,
10861 hf_ieee80211_ff_anqp_nai_realm_eap_len,
10862 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10863 offset += 1;
10864 if (offset + eap_len > f_end) {
10865 expert_add_info(pinfo, item, &ei_ieee80211_ff_anqp_nai_realm_eap_len);
10866 break;
10867 }
10868
10869 proto_item_append_text(eap_tree, ": %s",
10870 val_to_str_ext(pinfo->pool, tvb_get_uint8(tvb, offset),
10871 &eap_type_vals_ext, "Unknown (%d)"));
10872 proto_tree_add_item(eap_tree, hf_ieee80211_ff_anqp_nai_realm_eap_method,
10873 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10874 offset += 1;
10875 auth_param_count = tvb_get_uint8(tvb, offset);
10876 proto_tree_add_item(eap_tree,
10877 hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
10878 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10879 offset += 1;
10880
10881 while (auth_param_count > 0) {
10882 auth_param_id = tvb_get_uint8(tvb, offset);
10883 proto_tree_add_item(eap_tree,
10884 hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
10885 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10886 offset += 1;
10887 auth_param_len = tvb_get_uint8(tvb, offset);
10888 proto_tree_add_item(eap_tree,
10889 hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
10890 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10891 offset += 1;
10892 item = proto_tree_add_item(
10893 eap_tree, hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
10894 tvb, offset, auth_param_len, ENC_NA0x00000000);
10895 if ((auth_param_id == 3) && (auth_param_len == 1)) {
10896 uint8_t inner_method = tvb_get_uint8(tvb, offset);
10897 const char *str;
10898 str = val_to_str_ext(pinfo->pool, inner_method, &eap_type_vals_ext, "Unknown (%d)");
10899
10900 proto_item_append_text(eap_tree, " / %s", str);
10901 proto_item_append_text(item, " - %s", str);
10902 }
10903 offset += auth_param_len;
10904
10905 auth_param_count--;
10906 }
10907
10908 offset = eap_end;
10909 eap_count--;
10910 }
10911
10912 offset = f_end;
10913 count--;
10914 }
10915}
10916
10917static void
10918dissect_3gpp_cellular_network_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
10919{
10920 uint8_t iei, num, plmn_idx = 0;
10921 proto_item *item;
10922
10923 /* See Annex A of 3GPP TS 24.234 v8.1.0 for description */
10924 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_gud, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10925 offset += 1;
10926 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_udhl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10927 offset += 1;
10928 item = proto_tree_add_item_ret_uint8(tree, hf_ieee80211_3gpp_gc_iei, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &iei);
10929 if (iei == 0)
10930 proto_item_append_text(item, " (PLMN List)");
10931 else
10932 return;
10933 offset += 1;
10934 proto_tree_add_item(tree, hf_ieee80211_3gpp_gc_plmn_len, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10935 offset += 1;
10936 proto_tree_add_item_ret_uint8(tree, hf_ieee80211_3gpp_gc_num_plmns, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &num);
10937 offset += 1;
10938 while (num > 0) {
10939 proto_item *plmn_item = NULL((void*)0);
10940 proto_tree *plmn_tree = NULL((void*)0);
10941 unsigned plmn_val = 0;
10942
10943 if (tvb_reported_length_remaining(tvb, offset) < 3)
10944 break;
10945 plmn_val = tvb_get_letoh24(tvb, offset);
10946 plmn_item = proto_tree_add_uint_format(tree, hf_ieee80211_3gpp_gc_plmn,
10947 tvb, offset, 3, plmn_val, "PLMN %d (0x%x)",
10948 plmn_idx++, plmn_val);
10949 plmn_tree = proto_item_add_subtree(plmn_item, ett_ieee80211_3gpp_plmn);
10950 dissect_e212_mcc_mnc_wmem_packet_str(tvb, pinfo, plmn_tree, offset, E212_NONE, true1);
10951 num--;
10952 offset += 3;
10953 }
10954}
10955
10956static void
10957dissect_domain_name_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
10958{
10959 uint8_t len;
10960
10961 while (offset < end) {
10962 len = tvb_get_uint8(tvb, offset);
10963 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name_len,
10964 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
10965 offset += 1;
10966 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_domain_name,
10967 tvb, offset, len, ENC_ASCII0x00000000);
10968 offset += len;
10969 }
10970}
10971
10972static int
10973dissect_hs20_subscription_remediation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10974 proto_tree *tree, void *data _U___attribute__((unused)))
10975{
10976 int offset = 0;
10977 uint8_t url_len = tvb_get_uint8(tvb, offset);
10978 proto_item *pi = NULL((void*)0);
10979
10980 proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_url_len, tvb, offset,
10981 1, ENC_NA0x00000000);
10982 offset++;
10983 if (tvb_reported_length_remaining(tvb, offset) >= url_len) {
10984 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_server_url,
10985 tvb, offset, url_len, ENC_ASCII0x00000000);
10986 offset += url_len;
10987 proto_item_set_url(pi);
10988 proto_tree_add_item(tree, hf_ieee80211_hs20_subscription_remediation_server_method,
10989 tvb, offset, 1, ENC_NA0x00000000);
10990 offset++;
10991 }
10992
10993 return offset;
10994}
10995
10996static int
10997dissect_hs20_deauthentication_imminent(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
10998 proto_tree *tree, void *data _U___attribute__((unused)))
10999{
11000 int offset = 0;
11001 uint8_t url_len = 0;
11002 proto_item *pi = NULL((void*)0);
11003
11004 proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_reason_code, tvb, offset, 1, ENC_NA0x00000000);
11005 offset++;
11006
11007 proto_tree_add_item(tree, hf_ieee80211_hs20_reauth_delay, tvb, offset, 2,
11008 ENC_LITTLE_ENDIAN0x80000000);
11009 offset += 2;
11010
11011 url_len = tvb_get_uint8(tvb, offset);
11012 proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_reason_url_len, tvb, offset, 1,
11013 ENC_NA0x00000000);
11014 offset++;
11015
11016 if (tvb_reported_length_remaining(tvb, offset) >= url_len) {
11017 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_deauth_imminent_reason_url,
11018 tvb, offset, url_len, ENC_ASCII0x00000000);
11019 offset += url_len;
11020 proto_item_set_url(pi);
11021 }
11022 return offset;
11023}
11024
11025#define HS20_ANQP_HS_QUERY_LIST1 1
11026#define HS20_ANQP_HS_CAPABILITY_LIST2 2
11027#define HS20_ANQP_OPERATOR_FRIENDLY_NAME3 3
11028#define HS20_ANQP_WAN_METRICS4 4
11029#define HS20_ANQP_CONNECTION_CAPABILITY5 5
11030#define HS20_ANQP_NAI_HOME_REALM_QUERY6 6
11031#define HS20_ANQP_OPERATING_CLASS_INDICATION7 7
11032#define HS20_ANQP_OSU_PROVIDERS_LIST8 8
11033/* 9 is reserved */
11034#define HS20_ANQP_ICON_REQUEST10 10
11035#define HS20_ANQP_ICON_BINARY_FILE11 11
11036#define HS20_ANQP_OPERATOR_ICON_METADATA12 12
11037#define HS20_ANQP_ADVICE_OF_CHARGE13 13
11038
11039static const value_string hs20_anqp_subtype_vals[] = {
11040 { HS20_ANQP_HS_QUERY_LIST1, "HS Query list" },
11041 { HS20_ANQP_HS_CAPABILITY_LIST2, "HS Capability List" },
11042 { HS20_ANQP_OPERATOR_FRIENDLY_NAME3, "Operator Friendly Name" },
11043 { HS20_ANQP_WAN_METRICS4, "WAN Metrics" },
11044 { HS20_ANQP_CONNECTION_CAPABILITY5, "Connection Capability" },
11045 { HS20_ANQP_NAI_HOME_REALM_QUERY6, "NAI Home Realm Query" },
11046 { HS20_ANQP_OPERATING_CLASS_INDICATION7, "Operating Class Indication" },
11047 { HS20_ANQP_OSU_PROVIDERS_LIST8, "OSU Providers List" },
11048 { 9, "Reserved" },
11049 { HS20_ANQP_ICON_REQUEST10, "Icon Request" },
11050 { HS20_ANQP_ICON_BINARY_FILE11, "Icon Binary File" },
11051 { HS20_ANQP_OPERATOR_ICON_METADATA12, "Operator Icon Metadata" },
11052 { HS20_ANQP_ADVICE_OF_CHARGE13, "Advice of Charge" },
11053 { 0, NULL((void*)0) }
11054};
11055
11056static void
11057dissect_hs20_anqp_hs_query_list(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
11058{
11059 while (offset < end) {
11060 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_hs_query_list,
11061 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11062 offset++;
11063 }
11064}
11065
11066static void
11067dissect_hs20_anqp_operator_friendly_name(proto_tree *tree, tvbuff_t *tvb,
11068 packet_info *pinfo, int offset,
11069 int end, int hf_array[],
11070 int ett_val)
11071{
11072 int ofn_index = 0;
11073
11074 while (offset + 4 <= end) {
11075 uint8_t vlen = tvb_get_uint8(tvb, offset);
11076 proto_tree *ofn_tree = NULL((void*)0);
11077 proto_item *item = NULL((void*)0), *pi = NULL((void*)0);
11078 int start_offset = offset;
11079
11080 ofn_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_val,
11081 &pi, "Friendly Name [%d]", ofn_index + 1);
11082
11083 item = proto_tree_add_item(ofn_tree, hf_array[0],
11084 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11085 offset++;
11086 if (vlen > end - offset || vlen < 3) {
11087 expert_add_info(pinfo, item, &ei_hs20_anqp_ofn_length);
11088 break;
11089 }
11090 proto_tree_add_item(ofn_tree, hf_array[1],
11091 tvb, offset, 3, ENC_ASCII0x00000000|ENC_NA0x00000000);
11092 proto_tree_add_item(ofn_tree, hf_array[2],
11093 tvb, offset + 3, vlen - 3, ENC_UTF_80x00000002);
11094 offset += vlen;
11095
11096 proto_item_set_len(pi, offset - start_offset);
11097 ofn_index++;
11098 }
11099}
11100
11101static const value_string hs20_wm_link_status_vals[] = {
11102 { 0, "Reserved" },
11103 { 1, "Link up" },
11104 { 2, "Link down" },
11105 { 3, "Link in test state" },
11106 { 0, NULL((void*)0) }
11107};
11108
11109static void
11110dissect_hs20_anqp_wan_metrics(proto_tree *tree, tvbuff_t *tvb, int offset, bool_Bool request)
11111{
11112 if (request)
11113 return;
11114
11115 if(tvb_reported_length_remaining(tvb, offset) < 13)
11116 return;
11117
11118 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_link_status,
11119 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11120 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link,
11121 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11122 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_at_capacity,
11123 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11124 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_reserved,
11125 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11126 offset++;
11127
11128 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed,
11129 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11130 offset += 4;
11131
11132 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed,
11133 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
11134 offset += 4;
11135
11136 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_downlink_load,
11137 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11138 offset++;
11139
11140 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_uplink_load,
11141 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11142 offset++;
11143
11144 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_wan_metrics_lmd,
11145 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11146}
11147
11148static const value_string hs20_cc_proto_vals[] = {
11149 { 1, "ICMP" },
11150 { 6, "TCP" },
11151 { 17, "UDP" },
11152 { 50, "ESP" },
11153 { 0, NULL((void*)0) }
11154};
11155
11156static const value_string hs20_cc_port_vals[] = {
11157 { 0, "[Supported]" }, /* Used to indicate ICMP, ESP for IPSec VPN, or IKEv2 for IPSec VPN */
11158 { 20, "FTP" },
11159 { 22, "SSH" },
11160 { 80, "HTTP" },
11161 { 443, "HTTPS" },
11162 { 500, "IKEv2 for IPSec VPN" },
11163 { 1723, "PPTP for IPSec VPN" },
11164 { 4500, "[Optional] IKEv2 for IPSec VPN" },
11165 { 5060, "VOIP" },
11166 { 0, NULL((void*)0) },
11167};
11168
11169static const value_string hs20_cc_status_vals[] = {
11170 { 0, "Closed" },
11171 { 1, "Open" },
11172 { 2, "Unknown" },
11173 { 0, NULL((void*)0) }
11174};
11175
11176static void
11177dissect_hs20_anqp_connection_capability(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb,
11178 int offset, int end)
11179{
11180 proto_tree *tuple;
11181 while (offset + 4 <= end) {
11182 uint8_t ip_proto, status;
11183 uint16_t port_num;
11184
11185 ip_proto = tvb_get_uint8(tvb, offset);
11186 port_num = tvb_get_letohs(tvb, offset + 1);
11187 status = tvb_get_uint8(tvb, offset + 3);
11188
11189 tuple = proto_tree_add_subtree_format(tree, tvb, offset, 4, ett_hs20_cc_proto_port_tuple, NULL((void*)0),
11190 "ProtoPort Tuple - ip_proto=%s port_num=%s status=%s",
11191 val_to_str(pinfo->pool, ip_proto, hs20_cc_proto_vals, "Unknown (%u)"),
11192 val_to_str(pinfo->pool, port_num, hs20_cc_port_vals, "Unknown (%u)"),
11193 val_to_str(pinfo->pool, status, hs20_cc_status_vals, "Reserved (%u)"));
11194 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_ip_proto,
11195 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11196 offset++;
11197 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_port_num,
11198 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11199 offset += 2;
11200 proto_tree_add_item(tuple, hf_ieee80211_hs20_anqp_cc_proto_status,
11201 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11202 offset++;
11203 }
11204}
11205
11206static void
11207dissect_hs20_anqp_nai_home_realm_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
11208 int offset, int end)
11209{
11210 uint8_t len;
11211 proto_item *item;
11212
11213 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_count,
11214 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11215 offset++;
11216
11217 while (offset + 2 <= end) {
11218 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_encoding_type,
11219 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11220 offset++;
11221 len = tvb_get_uint8(tvb, offset);
11222 item = proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_length,
11223 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11224 offset++;
11225 if (offset + len > end) {
11226 expert_add_info(pinfo, item, &ei_hs20_anqp_nai_hrq_length);
11227 break;
11228 }
11229 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_nai_hrq_realm_name,
11230 tvb, offset, len, ENC_ASCII0x00000000);
11231 offset += len;
11232 }
11233}
11234
11235static void
11236dissect_hs20_anqp_oper_class_indic(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
11237{
11238 while (offset < end) {
11239 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_oper_class_indic,
11240 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
11241 offset++;
11242 }
11243}
11244
11245static int
11246dissect_hs20_osu_friendly_names(proto_tree *tree, tvbuff_t *tvb,
11247 packet_info *pinfo, int offset, int end _U___attribute__((unused)))
11248{
11249 int osu_fn_hf_array[3] = {hf_ieee80211_hs20_osu_friendly_name_length,
11250 hf_ieee80211_hs20_osu_friendly_name_language,
11251 hf_ieee80211_hs20_osu_friendly_name_name };
11252 uint16_t osu_fn_count = tvb_get_letohs(tvb, offset);
11253 proto_tree *fn_tree = NULL((void*)0);
11254
11255 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_friendly_names_len, tvb, offset, 2,
11256 ENC_LITTLE_ENDIAN0x80000000);
11257 offset += 2;
11258
11259 fn_tree = proto_tree_add_subtree(tree, tvb, offset, osu_fn_count,
11260 ett_hs20_friendly_names_list, NULL((void*)0),
11261 "Friendly Names List");
11262
11263 dissect_hs20_anqp_operator_friendly_name(fn_tree, tvb, pinfo, offset,
11264 offset + osu_fn_count,
11265 osu_fn_hf_array, ett_hs20_friendly_name_tree);
11266
11267 return offset + osu_fn_count;
11268}
11269
11270static int
11271dissect_hs20_osu_icon_available(proto_tree *tree, tvbuff_t *tvb,
11272 packet_info *pinfo _U___attribute__((unused)), int offset, int end _U___attribute__((unused)), uint16_t icon_index)
11273{
11274 proto_tree *icon_avail = NULL((void*)0);
11275 proto_item *pi = NULL((void*)0);
11276 int start_offset = offset;
11277 uint8_t icon_type_len = 0, icon_filename_len = 0;
11278
11279 icon_avail = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11280 ett_hs20_osu_icon_tree, &pi,
11281 "Icon Available %d", icon_index);
11282
11283 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_width, tvb, offset, 2,
11284 ENC_LITTLE_ENDIAN0x80000000);
11285 offset += 2;
11286
11287 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_height, tvb, offset, 2,
11288 ENC_LITTLE_ENDIAN0x80000000);
11289 offset += 2;
11290
11291 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_lang_code, tvb, offset, 3,
11292 ENC_ASCII0x00000000);
11293 offset += 3;
11294
11295 icon_type_len = tvb_get_uint8(tvb, offset);
11296 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_icon_type_len, tvb, offset,
11297 1, ENC_NA0x00000000);
11298 offset++;
11299
11300 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_icon_type, tvb, offset,
11301 icon_type_len, ENC_ASCII0x00000000);
11302 offset += icon_type_len;
11303
11304 icon_filename_len = tvb_get_uint8(tvb, offset);
11305 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_filename_len, tvb, offset,
11306 1, ENC_NA0x00000000);
11307 offset++;
11308
11309 proto_tree_add_item(icon_avail, hf_ieee80211_osu_icon_avail_filename, tvb, offset,
11310 icon_filename_len, ENC_ASCII0x00000000);
11311 offset += icon_filename_len;
11312
11313 proto_item_set_len(pi, offset - start_offset);
11314
11315 return offset;
11316}
11317
11318static const value_string osu_method_vals[] = {
11319 { 0, "OMA DM" },
11320 { 1, "SOAP XML SPP" },
11321 { 0, NULL((void*)0) },
11322};
11323
11324static int
11325dissect_hs20_osu_provider(proto_tree *tree, tvbuff_t *tvb,
11326 packet_info *pinfo, int offset, int end, uint8_t provider_index)
11327{
11328 proto_tree *prov_tree = NULL((void*)0);
11329 proto_item *osupi = NULL((void*)0), *uri_pi = NULL((void*)0);
11330 int start_offset = offset;
11331 uint8_t osu_server_uri_len = 0;
11332 uint8_t osu_method_list_len = 0;
11333 uint16_t icons_avail = 0, icons_index = 0;
11334 uint8_t osu_nai_len = 0;
11335 uint16_t osu_service_desc_len = 0;
11336
11337 prov_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11338 ett_hs20_osu_provider_tree, &osupi,
11339 "OSU Provider %d", provider_index);
11340
11341 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_prov_length, tvb, offset, 2,
11342 ENC_LITTLE_ENDIAN0x80000000);
11343 offset += 2;
11344
11345 offset = dissect_hs20_osu_friendly_names(prov_tree, tvb, pinfo, offset, end);
11346
11347 proto_item_set_len(osupi, offset - start_offset);
11348
11349 osu_server_uri_len = tvb_get_uint8(tvb, offset);
11350 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_server_uri_len, tvb, offset, 1,
11351 ENC_NA0x00000000);
11352 offset++;
11353
11354 uri_pi = proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_server_uri, tvb, offset,
11355 osu_server_uri_len, ENC_ASCII0x00000000);
11356 offset += osu_server_uri_len;
11357 proto_item_set_url(uri_pi);
11358
11359 osu_method_list_len = tvb_get_uint8(tvb, offset);
11360 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_method_list_len, tvb, offset, 1,
11361 ENC_NA0x00000000);
11362 offset++;
11363
11364 if (osu_method_list_len > 0) {
11365 proto_tree *osu_method_list = NULL((void*)0);
11366 uint8_t osu_method_list_index = 0;
11367
11368 osu_method_list = proto_tree_add_subtree(prov_tree, tvb, offset,
11369 osu_method_list_len,
11370 ett_hs20_osu_provider_method_list,
11371 NULL((void*)0), "OSU Method List");
11372 while (osu_method_list_len > osu_method_list_index) {
11373 proto_item *pi = NULL((void*)0);
11374 uint8_t method = tvb_get_uint8(tvb, offset);
11375
11376 pi = proto_tree_add_item(osu_method_list, hf_ieee80211_hs20_osu_method_val, tvb,
11377 offset, 1, ENC_NA0x00000000);
11378 proto_item_append_text(pi, ": %s",
11379 val_to_str_const(method, osu_method_vals,
11380 "Reserved"));
11381 offset++;
11382 osu_method_list_index++;
11383 }
11384 }
11385
11386 icons_avail = tvb_get_letohs(tvb, offset);
11387 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_icons_avail_len, tvb, offset, 2,
11388 ENC_LITTLE_ENDIAN0x80000000);
11389 offset += 2;
11390
11391 if (icons_avail > 0) {
11392 proto_tree *icon_list = NULL((void*)0);
11393 proto_item *pi = NULL((void*)0);
11394
11395 start_offset = offset;
11396
11397 icon_list = proto_tree_add_subtree(prov_tree, tvb, offset, -1,
11398 ett_osu_icons_avail_list, &pi,
11399 "Icons Available");
11400
11401 while ((offset - start_offset) < icons_avail) {
11402 offset = dissect_hs20_osu_icon_available(icon_list, tvb, pinfo, offset,
11403 end, icons_index);
11404 icons_index++;
11405 }
11406
11407 proto_item_set_len(pi, offset - start_offset);
11408 }
11409
11410 proto_tree_add_item_ret_uint8(prov_tree, hf_ieee80211_hs20_osu_nai_len, tvb, offset, 1, ENC_NA0x00000000, &osu_nai_len);
11411 offset++;
11412
11413 if (osu_nai_len > 0) {
11414 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_nai, tvb, offset,
11415 osu_nai_len, ENC_ASCII0x00000000);
11416 offset += osu_nai_len;
11417 }
11418
11419 osu_service_desc_len = tvb_get_letohs(tvb, offset);
11420 proto_tree_add_item(prov_tree, hf_ieee80211_hs20_osu_service_desc_len, tvb, offset, 2,
11421 ENC_LITTLE_ENDIAN0x80000000);
11422 offset += 2;
11423
11424 if (osu_service_desc_len > 0) {
11425 proto_tree *desc_tree = NULL((void*)0);
11426 proto_item *pi = NULL((void*)0);
11427 uint8_t service_desc_index = 0;
11428
11429 start_offset = offset;
11430 desc_tree = proto_tree_add_subtree(prov_tree, tvb, offset, -1,
11431 ett_hs20_osu_service_desc_list, &pi,
11432 "OSU Service Description List");
11433
11434 while ((offset - start_offset) < osu_service_desc_len) {
11435 proto_tree *desc_duple = NULL((void*)0);
11436 uint8_t serv_desc_len = tvb_get_uint8(tvb, offset);
11437
11438 desc_duple = proto_tree_add_subtree_format(desc_tree, tvb, offset,
11439 1 + serv_desc_len,
11440 ett_hs20_osu_service_desc_tree, NULL((void*)0),
11441 "OSU Service Description Duple %d",
11442 service_desc_index);
11443
11444 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc_duple_len, tvb,
11445 offset, 1, ENC_NA0x00000000);
11446 offset++;
11447
11448 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc_lang, tvb, offset,
11449 3, ENC_ASCII0x00000000);
11450 offset += 3;
11451
11452 proto_tree_add_item(desc_duple, hf_ieee80211_hs20_osu_service_desc, tvb, offset,
11453 serv_desc_len - 3, ENC_ASCII0x00000000);
11454 offset += serv_desc_len - 3;
11455
11456 service_desc_index++;
11457 }
11458
11459 proto_item_set_len(pi, offset - start_offset);
11460 }
11461
11462 return offset;
11463}
11464
11465static void
11466dissect_hs20_anqp_osu_providers_list(proto_tree *tree, tvbuff_t *tvb,
11467 packet_info *pinfo, int offset, int end)
11468{
11469 uint8_t ssid_len = tvb_get_uint8(tvb, offset);
11470 uint8_t osu_prov_count = 0, osu_prov_index = 0;
11471
11472 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_list_ssid_len, tvb, offset, 1,
11473 ENC_NA0x00000000);
11474 offset++;
11475
11476 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_ssid, tvb, offset, ssid_len,
11477 ENC_UTF_80x00000002);
11478 offset += ssid_len;
11479
11480 osu_prov_count = tvb_get_uint8(tvb, offset);
11481 proto_tree_add_item(tree, hf_ieee80211_hs20_osu_providers_count, tvb, offset, 1,
11482 ENC_NA0x00000000);
11483 offset++;
11484
11485 if (osu_prov_count > 0) {
11486 int start_offset = offset;
11487 proto_item *pi = NULL((void*)0);
11488 proto_tree *osu_prov_list = NULL((void*)0);
11489
11490 osu_prov_list = proto_tree_add_subtree(tree, tvb, offset, -1,
11491 ett_hs20_osu_providers_list, &pi,
11492 "OSU Providers List");
11493 while (offset < end && osu_prov_count > osu_prov_index) {
11494 offset = dissect_hs20_osu_provider(osu_prov_list, tvb, pinfo, offset, end,
11495 osu_prov_index);
11496 osu_prov_index++;
11497 }
11498
11499 proto_item_set_len(pi, offset - start_offset);
11500 }
11501}
11502
11503static void
11504dissect_hs20_anqp_icon_request(proto_tree *tree, tvbuff_t *tvb, int offset,
11505 int end)
11506{
11507 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_request_filename, tvb, offset,
11508 end - offset, ENC_UTF_80x00000002);
11509}
11510
11511static const value_string hs20_icon_download_status_vals[] = {
11512 { 0, "Success" },
11513 { 1, "File not found" },
11514 { 2, "Unspecified file error" },
11515 { 0, NULL((void*)0) }
11516};
11517
11518static void
11519dissect_hs20_anqp_icon_binary_file(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset,
11520 int end _U___attribute__((unused)))
11521{
11522 uint8_t icon_download_status = tvb_get_uint8(tvb, offset);
11523 proto_item *pi = NULL((void*)0);
11524 uint8_t icon_type_len = 0;
11525 uint16_t icon_binary_data_len = 0;
11526
11527 pi = proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_file_status, tvb, offset, 1,
11528 ENC_NA0x00000000);
11529 offset++;
11530 proto_item_append_text(pi, ": %s",
11531 val_to_str(pinfo->pool, icon_download_status,
11532 hs20_icon_download_status_vals,
11533 "Reserved (%u)"));
11534
11535 icon_type_len = tvb_get_uint8(tvb, offset);
11536 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_type_length, tvb, offset, 1, ENC_NA0x00000000);
11537 offset++;
11538
11539 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_type, tvb, offset, icon_type_len,
11540 ENC_UTF_80x00000002);
11541 offset += icon_type_len;
11542
11543 icon_binary_data_len = tvb_get_letohs(tvb, offset);
11544 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_data_len, tvb, offset, 2,
11545 ENC_BIG_ENDIAN0x00000000);
11546 offset += 2;
11547
11548 proto_tree_add_item(tree, hf_ieee80211_hs20_icon_binary_data, tvb, offset,
11549 icon_binary_data_len, ENC_NA0x00000000);
11550}
11551
11552static void
11553dissect_hs20_anqp_operator_icon_metadata(proto_tree *tree, tvbuff_t *tvb,
11554 int offset, int end _U___attribute__((unused)))
11555{
11556 proto_item *pi = NULL((void*)0);
11557 int start_offset = offset;
11558 uint8_t icon_type_len = 0, icon_filename_len = 0;
11559
11560 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_width, tvb, offset, 2,
11561 ENC_LITTLE_ENDIAN0x80000000);
11562 offset += 2;
11563
11564 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_height, tvb, offset, 2,
11565 ENC_LITTLE_ENDIAN0x80000000);
11566 offset += 2;
11567
11568 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_lang_code, tvb, offset, 3,
11569 ENC_ASCII0x00000000);
11570 offset += 3;
11571
11572 icon_type_len = tvb_get_uint8(tvb, offset);
11573 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_icon_type_len, tvb, offset,
11574 1, ENC_NA0x00000000);
11575 offset++;
11576
11577 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_icon_type, tvb, offset,
11578 icon_type_len, ENC_ASCII0x00000000);
11579 offset += icon_type_len;
11580
11581 icon_filename_len = tvb_get_uint8(tvb, offset);
11582 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_filename_len, tvb, offset,
11583 1, ENC_NA0x00000000);
11584 offset++;
11585
11586 proto_tree_add_item(tree, hf_ieee80211_osu_icon_avail_filename, tvb, offset,
11587 icon_filename_len, ENC_ASCII0x00000000);
11588 offset += icon_filename_len;
11589
11590 proto_item_set_len(pi, offset - start_offset);
11591}
11592
11593static void
11594dissect_anqp_venue_url(proto_tree *tree, tvbuff_t *tvb, int offset, int end)
11595{
11596 uint16_t url_duple_index = 0;
11597
11598 while (offset < end) {
11599 proto_tree *venue_url = NULL((void*)0);
11600 proto_item *url_pi = NULL((void*)0);
11601 uint8_t url_duple_len = tvb_get_uint8(tvb, offset);
11602
11603 venue_url = proto_tree_add_subtree_format(tree, tvb, offset,
11604 url_duple_len + 1, ett_hs20_venue_url, NULL((void*)0),
11605 "Venue URL Duple %d", url_duple_index);
11606
11607 proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_url_length, tvb, offset,
11608 1, ENC_NA0x00000000);
11609 offset++;
11610
11611 proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_number, tvb, offset, 1,
11612 ENC_NA0x00000000);
11613 offset++;
11614
11615 url_pi = proto_tree_add_item(venue_url, hf_ieee80211_hs20_anqp_venue_url, tvb, offset,
11616 url_duple_len -1, ENC_ASCII0x00000000);
11617 proto_item_set_url(url_pi);
11618
11619 offset += (url_duple_len - 1);
11620
11621 url_duple_index++;
11622 }
11623}
11624
11625static const value_string advice_of_charge_type_vals[] = {
11626 { 0, "Time-based" },
11627 { 1, "Data-volume-based" },
11628 { 2, "Time-and-data-volume-based" },
11629 { 3, "Unlimited" },
11630 { 0, NULL((void*)0) }
11631};
11632
11633static void
11634dissect_hs20_anqp_advice_of_charge(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset,
11635 int end _U___attribute__((unused)))
11636{
11637 uint16_t toc_index = 0;
11638
11639 while (offset < end) {
11640 uint16_t adv_charge_len = tvb_get_letohs(tvb, offset);
11641 proto_tree *aoc_tree = NULL((void*)0);
11642 proto_tree *plan_info_tree = NULL((void*)0);
11643 proto_item *pi = NULL((void*)0), *tpi = NULL((void*)0);
11644 int start_offset = offset;
11645 uint8_t aoc_type = 0, nai_realm_len = 0;
11646 uint8_t plan_index = 0;
11647 uint16_t plan_tot_len = 0;
11648 int plan_offset = 0;
11649
11650 aoc_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
11651 ett_hs20_advice_of_charge, &pi,
11652 "Advice of Charge Duple %d", toc_index);
11653 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_advice_of_charge_length, tvb,
11654 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11655 offset += 2;
11656
11657 aoc_type = tvb_get_uint8(tvb, offset);
11658 tpi = proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_advice_of_charge_type, tvb,
11659 offset, 1, ENC_NA0x00000000);
11660 offset++;
11661 proto_item_append_text(tpi, ": %s",
11662 val_to_str(pinfo->pool, aoc_type,
11663 advice_of_charge_type_vals,
11664 "Reserved (%u)"));
11665
11666 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding, tvb,
11667 offset, 1, ENC_NA0x00000000);
11668 offset++;
11669
11670 nai_realm_len = tvb_get_uint8(tvb, offset);
11671 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm_len, tvb, offset,
11672 1, ENC_NA0x00000000);
11673 offset++;
11674
11675 proto_tree_add_item(aoc_tree, hf_ieee80211_hs20_anqp_aoc_nai_realm, tvb, offset,
11676 nai_realm_len, ENC_UTF_80x00000002);
11677 offset += nai_realm_len;
11678
11679 plan_tot_len = adv_charge_len - 3 - nai_realm_len;
11680 plan_offset = offset;
11681
11682 while (offset < (plan_offset + plan_tot_len)) {
11683 uint16_t plan_len = tvb_get_letohs(tvb, offset);
11684
11685 plan_info_tree = proto_tree_add_subtree_format(aoc_tree, tvb, offset,
11686 plan_len + 2, ett_hs20_aoc_plan, NULL((void*)0),
11687 "Plan #%u", plan_index);
11688
11689 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_len, tvb,
11690 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11691 offset += 2;
11692
11693 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_lang, tvb,
11694 offset, 3, ENC_ASCII0x00000000);
11695 offset += 3;
11696
11697 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_curcy, tvb,
11698 offset, 3, ENC_ASCII0x00000000);
11699 offset += 3;
11700
11701 proto_tree_add_item(plan_info_tree, hf_ieee80211_hs20_anqp_aoc_plan_information,
11702 tvb, offset, plan_len - 6, ENC_UTF_80x00000002);
11703 offset += plan_len - 6;
11704
11705 plan_index++;
11706 }
11707
11708 proto_item_set_len(pi, offset - start_offset);
11709
11710 toc_index++;
11711 }
11712}
11713
11714static int
11715dissect_hs20_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11716{
11717 uint8_t subtype;
11718 int ofn_hf_array[3] = {hf_ieee80211_hs20_anqp_ofn_length,
11719 hf_ieee80211_hs20_anqp_ofn_language,
11720 hf_ieee80211_hs20_anqp_ofn_name };
11721
11722 int end = tvb_reported_length(tvb);
11723 int offset = 0;
11724 anqp_info_dissector_data_t* anqp_data = (anqp_info_dissector_data_t*)data;
11725
11726 DISSECTOR_ASSERT(anqp_data)((void) ((anqp_data) ? (void)0 : (proto_report_dissector_bug(
"%s:%u: failed assertion \"%s\"", "epan/dissectors/packet-ieee80211.c"
, 11726, "anqp_data"))))
;
11727
11728 subtype = tvb_get_uint8(tvb, offset);
11729 proto_item_append_text(tree, " - HS 2.0 %s",
11730 val_to_str(pinfo->pool, subtype, hs20_anqp_subtype_vals,
11731 "Reserved (%u)"));
11732 if (anqp_data->idx == 0) {
11733 col_append_fstr(pinfo->cinfo, COL_INFO, " HS 2.0 %s",
11734 val_to_str(pinfo->pool, subtype, hs20_anqp_subtype_vals,
11735 "Reserved (%u)"));
11736 } else if (anqp_data->idx == 1) {
11737 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
11738 }
11739 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_subtype, tvb, offset, 1,
11740 ENC_LITTLE_ENDIAN0x80000000);
11741 offset++;
11742
11743 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_reserved, tvb, offset, 1,
11744 ENC_LITTLE_ENDIAN0x80000000);
11745 offset++;
11746
11747 switch (subtype) {
11748 case HS20_ANQP_HS_QUERY_LIST1:
11749 dissect_hs20_anqp_hs_query_list(tree, tvb, offset, end);
11750 break;
11751 case HS20_ANQP_HS_CAPABILITY_LIST2:
11752 dissect_hs20_anqp_hs_capability_list(tree, tvb, offset, end);
11753 break;
11754 case HS20_ANQP_OPERATOR_FRIENDLY_NAME3:
11755 dissect_hs20_anqp_operator_friendly_name(tree, tvb, pinfo, offset, end,
11756 ofn_hf_array, ett_hs20_ofn_tree);
11757 break;
11758 case HS20_ANQP_WAN_METRICS4:
11759 dissect_hs20_anqp_wan_metrics(tree, tvb, offset, anqp_data->request);
11760 break;
11761 case HS20_ANQP_CONNECTION_CAPABILITY5:
11762 dissect_hs20_anqp_connection_capability(tree, pinfo, tvb, offset, end);
11763 break;
11764 case HS20_ANQP_NAI_HOME_REALM_QUERY6:
11765 dissect_hs20_anqp_nai_home_realm_query(tree, tvb, pinfo, offset, end);
11766 break;
11767 case HS20_ANQP_OPERATING_CLASS_INDICATION7:
11768 dissect_hs20_anqp_oper_class_indic(tree, tvb, offset, end);
11769 break;
11770 case HS20_ANQP_OSU_PROVIDERS_LIST8:
11771 dissect_hs20_anqp_osu_providers_list(tree, tvb, pinfo, offset, end);
11772 break;
11773 case HS20_ANQP_ICON_REQUEST10:
11774 dissect_hs20_anqp_icon_request(tree, tvb, offset, end);
11775 break;
11776 case HS20_ANQP_ICON_BINARY_FILE11:
11777 dissect_hs20_anqp_icon_binary_file(tree, pinfo, tvb, offset, end);
11778 break;
11779 case HS20_ANQP_OPERATOR_ICON_METADATA12:
11780 dissect_hs20_anqp_operator_icon_metadata(tree, tvb, offset, end);
11781 break;
11782 case HS20_ANQP_ADVICE_OF_CHARGE13:
11783 dissect_hs20_anqp_advice_of_charge(tree, pinfo, tvb, offset, end);
11784 break;
11785 default:
11786 if (offset == end)
11787 break;
11788 proto_tree_add_item(tree, hf_ieee80211_hs20_anqp_payload, tvb, offset,
11789 end - offset, ENC_NA0x00000000);
11790 break;
11791 }
11792
11793 return tvb_captured_length(tvb);
11794}
11795
11796// MBO ANQP element subtypes
11797#define MBO_ANQP_QUERY_LIST1 1
11798#define MBO_ANQP_CELLULAR_DATA_PREFERENCE2 2
11799
11800static const value_string mbo_anqp_subtype_vals[] = {
11801 { MBO_ANQP_QUERY_LIST1, "MBO Query List" },
11802 { MBO_ANQP_CELLULAR_DATA_PREFERENCE2, "Cellular Data Connection Preference" },
11803 { 0, NULL((void*)0) }
11804};
11805
11806static int
11807dissect_mbo_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
11808{
11809 uint8_t subtype;
11810 int len = tvb_reported_length(tvb);
11811 int offset = 0;
11812
11813 if (len < 2) {
11814 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
11815 return offset;
11816 }
11817
11818 proto_tree_add_item_ret_uint8(tree, hf_ieee80211_wfa_anqp_mbo_subtype, tvb, offset, 1, ENC_NA0x00000000, &subtype);
11819 offset++;
11820 len--;
11821
11822 switch (subtype) {
11823 case MBO_ANQP_QUERY_LIST1:
11824 while (len > 0) {
11825 proto_tree_add_item(tree, hf_ieee80211_wfa_anqp_mbo_query, tvb, offset, 1, ENC_NA0x00000000);
11826 offset++;
11827 len--;
11828 }
11829 break;
11830 case MBO_ANQP_CELLULAR_DATA_PREFERENCE2:
11831 proto_tree_add_item(tree, hf_ieee80211_wfa_anqp_mbo_cellular_pref, tvb, offset,
11832 1, ENC_NA0x00000000);
11833 offset++;
11834 len--;
11835 break;
11836 default:
11837 break;
11838 }
11839
11840 return offset;
11841}
11842
11843static int
11844dissect_vendor_wifi_alliance_anqp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11845{
11846 uint8_t subtype;
11847 int offset = 0;
11848 tvbuff_t *subtvb;
11849
11850 proto_tree_add_item_ret_uint8(tree, hf_ieee80211_anqp_wfa_subtype, tvb, offset, 1, ENC_NA0x00000000, &subtype);
11851 offset += 1;
11852
11853 subtvb = tvb_new_subset_remaining(tvb, offset);
11854 if (!dissector_try_uint_with_data(wifi_alliance_anqp_info_table, subtype, subtvb, pinfo, tree, false0, data))
11855 call_data_dissector(subtvb, pinfo, tree);
11856
11857 return tvb_captured_length(tvb);
11858}
11859
11860
11861static int
11862dissect_neighbor_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data);
11863
11864static int
11865dissect_anqp_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
11866 bool_Bool request, int idx)
11867{
11868 uint16_t id, len;
11869 uint32_t oui;
11870 proto_item *item;
11871 tvbuff_t *vendor_tvb;
11872 anqp_info_dissector_data_t anqp_info;
11873
11874 item = proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_id,
11875 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11876 id = tvb_get_letohs(tvb, offset);
11877 if (id != ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797) {
11878 if (idx == 0) {
11879 proto_item_append_text(tree, " - %s",
11880 val_to_str_ext(pinfo->pool, id, &anqp_info_id_vals_ext, "Unknown (%u)"));
11881 col_append_fstr(pinfo->cinfo, COL_INFO, " %s",
11882 val_to_str_ext(pinfo->pool, id, &anqp_info_id_vals_ext, "Unknown (%u)"));
11883 } else if (idx == 1) {
11884 proto_item_append_text(tree, ", ..");
11885 col_append_str(pinfo->cinfo, COL_INFO, ", ..");
11886 }
11887 }
11888 tree = proto_item_add_subtree(item, ett_gas_anqp);
11889 offset += 2;
11890 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info_length,
11891 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
11892 len = tvb_get_letohs(tvb, offset);
11893 offset += 2;
11894 if (tvb_reported_length_remaining(tvb, offset) < len) {
11895 expert_add_info(pinfo, tree, &ei_ieee80211_ff_anqp_info_length);
11896 return 4 + len;
11897 }
11898 switch (id)
11899 {
11900 case ANQP_INFO_ANQP_QUERY_LIST256:
11901 dissect_anqp_query_list(tree, tvb, pinfo, offset, offset + len);
11902 break;
11903 case ANQP_INFO_ANQP_CAPAB_LIST257:
11904 dissect_anqp_capab_list(tree, tvb, pinfo, offset, offset + len);
11905 break;
11906 case ANQP_INFO_VENUE_NAME_INFO258:
11907 dissect_venue_name_info(tree, tvb, pinfo, offset, offset + len);
11908 break;
11909 case ANQP_INFO_NETWORK_AUTH_TYPE_INFO260:
11910 dissect_network_auth_type(tree, tvb, offset, offset + len);
11911 break;
11912 case ANQP_INFO_ROAMING_CONSORTIUM_LIST261:
11913 dissect_roaming_consortium_list(tree, tvb, pinfo, offset, offset + len);
11914 break;
11915 case ANQP_INFO_IP_ADDR_TYPE_AVAILABILITY_INFO262:
11916 dissect_ip_addr_type_availability_info(tree, tvb, offset);
11917 break;
11918 case ANQP_INFO_NAI_REALM_LIST263:
11919 dissect_nai_realm_list(tree, tvb, pinfo, offset, offset + len);
11920 break;
11921 case ANQP_INFO_3GPP_CELLULAR_NETWORK_INFO264:
11922 dissect_3gpp_cellular_network_info(tree, tvb, pinfo, offset);
11923 break;
11924 case ANQP_INFO_DOMAIN_NAME_LIST268:
11925 dissect_domain_name_list(tree, tvb, offset, offset + len);
11926 break;
11927 case ANQP_INFO_NEIGHBOR_REPORT272:
11928 {
11929 tvbuff_t *report_tvb;
11930 static const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52 };
11931
11932 report_tvb = tvb_new_subset_length(tvb, offset, len);
11933 int report_offset = 0;
11934 /* Cf. IEEE 802.11-2020 9.4.5.19 Neighbor Report ANQP-element with
11935 * IEEE 802.11-2016 9.4.5.19 and IEEE 802.11-2012 8.4.4.19.
11936 * The line "The Element ID and the Length fields of the Neighbor Report
11937 * element... are not included" was removed as it made it impossible
11938 * to include more than one Neighbor Element (using the overall ANQP
11939 * Info length could not distinguish between extra length due to a second
11940 * Neighbor Report and extra length due to optional subelements.)
11941 * The headerless version was apparently never deployed so use the new
11942 * specification (though we could test to see if the next octet is
11943 * TAG_NEIGHBOR_REPORT and dissect with the older method if not.)
11944 */
11945 while (tvb_reported_length_remaining(report_tvb, report_offset)) {
11946 report_offset += add_tagged_field(pinfo, tree, report_tvb, report_offset, 0,
11947 ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
11948 }
11949 }
11950 break;
11951 case ANQP_INFO_ANQP_VENDOR_SPECIFIC_LIST56797:
11952 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
11953 offset += 3;
11954 vendor_tvb = tvb_new_subset_length(tvb, offset, len - 3);
11955
11956 anqp_info.request = request;
11957 anqp_info.idx = idx;
11958 if (!dissector_try_uint_with_data(vendor_specific_anqp_info_table, oui, vendor_tvb, pinfo, tree, false0, &anqp_info))
11959 {
11960 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info, tvb, offset, len, ENC_NA0x00000000);
11961 }
11962 break;
11963 case ANQP_INFO_VENUE_URL277:
11964 dissect_anqp_venue_url(tree, tvb, offset, offset + len);
11965 break;
11966 case ANQP_INFO_ADVICE_OF_CHARGE278:
11967 dissect_hs20_anqp_advice_of_charge(tree, pinfo, tvb, offset, offset + len);
11968 break;
11969 case ANQP_INFO_NETWORK_AUTH_TYPE_TIMESTAMP280:
11970 dissect_anqp_network_auth_type_timestamp(tree, tvb, offset, offset + len);
11971 break;
11972 default:
11973 proto_tree_add_item(tree, hf_ieee80211_ff_anqp_info,
11974 tvb, offset, len, ENC_NA0x00000000);
11975 break;
11976 }
11977
11978 return 4 + len;
11979}
11980
11981static void
11982dissect_anqp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, bool_Bool request)
11983{
11984 int idx = 0;
11985
11986 proto_item_append_text(tree, ": ANQP ");
11987 proto_item_append_text(tree, request ? "Request" : "Response");
11988 if (tvb_reported_length_remaining(tvb, offset) < 4) {
11989 expert_add_info(pinfo, tree, &ei_ieee80211_not_enough_room_for_anqp_header);
11990 return;
11991 }
11992 col_append_fstr(pinfo->cinfo, COL_INFO, ", ANQP %s",
11993 request ? "Req" : "Resp");
11994 while (tvb_reported_length_remaining(tvb, offset) > 0) {
11995 offset += dissect_anqp_info(tree, tvb, pinfo, offset, request, idx);
11996 idx += 1;
11997 }
11998}
11999
12000static unsigned
12001dissect_gas_initial_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
12002 unsigned type, unsigned subtype)
12003{
12004 unsigned req_len;
12005 int start = offset;
12006 proto_item *item;
12007 proto_tree *query;
12008
12009 /* Query Request Length (2 octets) */
12010 req_len = tvb_get_letohs(tvb, offset);
12011
12012 query = proto_tree_add_subtree(tree, tvb, offset, 2 + req_len, ett_gas_query, &item, "Query Request");
12013 if (tvb_reported_length_remaining(tvb, offset) < 2 + req_len) {
12014 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_request_length);
12015 return tvb_reported_length_remaining(tvb, offset);
12016 }
12017
12018 proto_tree_add_item(query, hf_ieee80211_ff_query_request_length,
12019 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12020 offset += 2;
12021 /*
12022 * Query Request (GAS query; formatted per protocol specified in the
12023 * Advertisement Protocol IE)
12024 */
12025 switch (type) {
12026 case ADV_PROTO_ID_ANQP0:
12027 dissect_anqp(query, tvb, pinfo, offset, true1);
12028 break;
12029 case ADV_PROTO_ID_VS221:
12030 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) | WFA_SUBTYPE_DPP26)) {
12031 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
12032 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals, "Unknown (%u)"));
12033 dissect_wifi_dpp_config_proto(pinfo, query, tvb, offset);
12034 }
12035 break;
12036 default:
12037 proto_tree_add_item(query, hf_ieee80211_ff_query_request,
12038 tvb, offset, req_len, ENC_NA0x00000000);
12039 }
12040 offset += req_len;
12041
12042 return offset - start;
12043}
12044
12045static unsigned
12046dissect_gas_initial_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
12047 unsigned type, unsigned subtype)
12048{
12049 unsigned resp_len;
12050 int start = offset;
12051 proto_item *item;
12052 proto_tree *query;
12053
12054 /* Query Response Length (2 octets) */
12055 resp_len = tvb_get_letohs(tvb, offset);
12056
12057 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
12058 ett_gas_query, &item, "Query Response");
12059 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
12060 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
12061 return tvb_reported_length_remaining(tvb, offset);
12062 }
12063
12064 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
12065 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12066 offset += 2;
12067 /* Query Response (optional) */
12068 if (resp_len) {
12069 switch (type) {
12070 case ADV_PROTO_ID_ANQP0:
12071 dissect_anqp(query, tvb, pinfo, offset, false0);
12072 break;
12073 case ADV_PROTO_ID_VS221:
12074 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) | WFA_SUBTYPE_DPP26)) {
12075 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
12076 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals, "Unknown (%u)"));
12077 dissect_wifi_dpp_config_proto(pinfo, query, tvb, offset);
12078 }
12079 break;
12080 default:
12081 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
12082 tvb, offset, resp_len, ENC_NA0x00000000);
12083 }
12084 offset += resp_len;
12085 }
12086
12087 return offset - start;
12088}
12089
12090static reassembly_table gas_reassembly_table;
12091
12092static int ett_gas_resp_fragment;
12093static int ett_gas_resp_fragments;
12094
12095static int hf_ieee80211_gas_resp_fragments;
12096static int hf_ieee80211_gas_resp_fragment;
12097static int hf_ieee80211_gas_resp_fragment_overlap;
12098static int hf_ieee80211_gas_resp_fragment_overlap_conflict;
12099static int hf_ieee80211_gas_resp_fragment_multiple_tails;
12100static int hf_ieee80211_gas_resp_fragment_too_long_fragment;
12101static int hf_ieee80211_gas_resp_fragment_error;
12102static int hf_ieee80211_gas_resp_fragment_count;
12103static int hf_ieee80211_gas_resp_reassembled_in;
12104static int hf_ieee80211_gas_resp_reassembled_length;
12105
12106static const fragment_items gas_resp_frag_items = {
12107 &ett_gas_resp_fragment,
12108 &ett_gas_resp_fragments,
12109 &hf_ieee80211_gas_resp_fragments,
12110 &hf_ieee80211_gas_resp_fragment,
12111 &hf_ieee80211_gas_resp_fragment_overlap,
12112 &hf_ieee80211_gas_resp_fragment_overlap_conflict,
12113 &hf_ieee80211_gas_resp_fragment_multiple_tails,
12114 &hf_ieee80211_gas_resp_fragment_too_long_fragment,
12115 &hf_ieee80211_gas_resp_fragment_error,
12116 &hf_ieee80211_gas_resp_fragment_count,
12117 &hf_ieee80211_gas_resp_reassembled_in,
12118 &hf_ieee80211_gas_resp_reassembled_length,
12119 /* Reassembled data field */
12120 NULL((void*)0),
12121 "GAS Response fragments"
12122};
12123
12124static unsigned
12125dissect_gas_comeback_response(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
12126 unsigned type, unsigned subtype _U___attribute__((unused)), uint8_t frag, bool_Bool more,
12127 uint8_t dialog_token)
12128{
12129 unsigned resp_len;
12130 int start = offset;
12131 proto_item *item;
12132 proto_tree *query;
12133
12134 /* Query Response Length (2 octets) */
12135 resp_len = tvb_get_letohs(tvb, offset);
12136
12137 query = proto_tree_add_subtree(tree, tvb, offset, 2 + resp_len,
12138 ett_gas_query, &item, "Query Response");
12139 if (tvb_reported_length_remaining(tvb, offset) < 2 + resp_len) {
12140 expert_add_info(pinfo, item, &ei_ieee80211_ff_query_response_length);
12141 return tvb_reported_length_remaining(tvb, offset);
12142 }
12143
12144 proto_tree_add_item(query, hf_ieee80211_ff_query_response_length,
12145 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
12146 offset += 2;
12147 /* Query Response (optional) */
12148 if (resp_len) {
12149 if (type == ADV_PROTO_ID_ANQP0 && (frag == 0) && !more)
12150 dissect_anqp(query, tvb, pinfo, offset, false0);
12151 else {
12152 fragment_head *frag_msg;
12153 bool_Bool save_fragmented;
12154 tvbuff_t *new_tvb;
12155
12156 save_fragmented = pinfo->fragmented;
12157 pinfo->fragmented = true1;
12158 frag_msg = fragment_add_seq_check(&gas_reassembly_table, tvb, offset,
12159 pinfo, dialog_token, NULL((void*)0),
12160 frag, resp_len, more);
12161 new_tvb = process_reassembled_data(tvb, offset, pinfo,
12162 "Reassembled GAS Query Response",
12163 frag_msg, &gas_resp_frag_items,
12164 NULL((void*)0), tree);
12165 if (new_tvb) {
12166 switch (type) {
12167 case ADV_PROTO_ID_ANQP0:
12168 dissect_anqp(query, new_tvb, pinfo, 0, false0);
12169 break;
12170 case ADV_PROTO_ID_VS221:
12171 if (subtype == ((DPP_CONFIGURATION_PROTOCOL0x01 << 8) |
12172 WFA_SUBTYPE_DPP26)) {
12173 col_append_fstr(pinfo->cinfo, COL_INFO, ", DPP - %s",
12174 val_to_str(pinfo->pool, subtype >> 8, dpp_subtype_vals,
12175 "Unknown (%u)"));
12176 dissect_wifi_dpp_config_proto(pinfo, query, new_tvb, 0);
12177 } else {
12178 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
12179 new_tvb, 0,
12180 tvb_reported_length_remaining(new_tvb, 0),
12181 ENC_NA0x00000000);
12182 }
12183 break;
12184 default:
12185 proto_tree_add_item(query, hf_ieee80211_ff_query_response,
12186 new_tvb, 0,
12187 tvb_reported_length_remaining(new_tvb, 0),
12188 ENC_NA0x00000000);
12189 }
12190 }
12191
12192 /* The old tvb cannot be used anymore */
12193 ieee80211_tvb_invalid = true1;
12194
12195 pinfo->fragmented = save_fragmented;
12196 }
12197 offset += resp_len;
12198 }
12199
12200 return offset - start;
12201}
12202
12203/* ************************************************************************* */
12204/* Dissect and add fixed mgmt fields to protocol tree */
12205/* ************************************************************************* */
12206
12207static uint64_t last_timestamp;
12208
12209static unsigned
12210add_ff_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12211{
12212 last_timestamp = tvb_get_letoh64(tvb, offset);
12213 proto_tree_add_item(tree, hf_ieee80211_ff_timestamp, tvb, offset, 8,
12214 ENC_LITTLE_ENDIAN0x80000000);
12215 return 8;
12216}
12217
12218static unsigned
12219add_ff_beacon_interval(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
12220{
12221 proto_tree_add_item(tree, hf_ieee80211_ff_beacon_interval, tvb, offset, 2,
12222 ENC_LITTLE_ENDIAN0x80000000);
12223 col_append_fstr(pinfo->cinfo, COL_INFO, ", BI=%d",
12224 tvb_get_letohs(tvb, offset));
12225 return 2;
12226}
12227
12228static unsigned
12229add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset);
12230
12231static unsigned
12232add_ff_cap_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12233{
12234 static int * const ieee80211_cap_info_fields[] = {
12235 &hf_ieee80211_ff_cf_ess,
12236 &hf_ieee80211_ff_cf_ibss,
12237 &hf_ieee80211_ff_cf_reserved1,
12238 &hf_ieee80211_ff_cf_reserved2,
12239 &hf_ieee80211_ff_cf_privacy,
12240 &hf_ieee80211_ff_cf_preamble,
12241 &hf_ieee80211_ff_cf_critical_update_flag,
12242 &hf_ieee80211_ff_cf_nontran_bss_critical_update_flag,
12243 &hf_ieee80211_ff_cf_spec_man,
12244 &hf_ieee80211_ff_cf_qos,
12245 &hf_ieee80211_ff_cf_short_slot_time,
12246 &hf_ieee80211_ff_cf_apsd,
12247 &hf_ieee80211_ff_cf_radio_measurement,
12248 &hf_ieee80211_ff_cf_epd,
12249 &hf_ieee80211_ff_cf_reserved5,
12250 &hf_ieee80211_ff_cf_reserved6,
12251 NULL((void*)0)
12252 };
12253
12254 /* The capability information includes DMG parameters whenever it is transmitted by
12255 a DMG STA/AP (802.11ad-2012, 8.4.1.4) */
12256
12257 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)))
;
12258
12259 if (isDMG) {
12260 proto_item *cap_item;
12261 proto_tree *cap_tree;
12262 cap_item = proto_tree_add_item(tree, hf_ieee80211_ff_capture, tvb, offset, 2,
12263 ENC_LITTLE_ENDIAN0x80000000);
12264 cap_tree = proto_item_add_subtree(cap_item, ett_cap_tree);
12265 add_ff_dmg_params(cap_tree, tvb, pinfo, offset);
12266 } else {
12267 /*
12268 * We can only interpret the ESS and IBSS fields to be an AP if the
12269 * frame is a BEACON or PROBE_RESPONSE
12270 */
12271 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)))
12272 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
12273 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
12274 if (((tvb_get_letohs(tvb, offset) & 0x0003) == 0x1 &&
12275 (l_frame_type == MGT_BEACON0x08 || l_frame_type == MGT_PROBE_RESP0x05)) ||
12276 l_frame_type == MGT_ASSOC_RESP0x01 || l_frame_type == MGT_REASSOC_RESP0x03) {
12277 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_AP_KEY, GINT_TO_POINTER(true)((gpointer) (glong) (1)));
12278 }
12279
12280 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
12281 hf_ieee80211_ff_capture,
12282 ett_cap_tree, ieee80211_cap_info_fields,
12283 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12284 }
12285 return 2;
12286}
12287
12288static unsigned
12289add_ff_auth_alg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12290{
12291 proto_tree_add_item(tree, hf_ieee80211_ff_auth_alg, tvb, offset, 2,
12292 ENC_LITTLE_ENDIAN0x80000000);
12293 return 2;
12294}
12295
12296static unsigned
12297add_ff_auth_trans_seq(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12298{
12299 proto_tree_add_item(tree, hf_ieee80211_ff_auth_seq, tvb, offset, 2,
12300 ENC_LITTLE_ENDIAN0x80000000);
12301 return 2;
12302}
12303
12304static unsigned
12305add_ff_current_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12306{
12307 proto_tree_add_item(tree, hf_ieee80211_ff_current_ap, tvb, offset, 6,
12308 ENC_NA0x00000000);
12309 return 6;
12310}
12311
12312static unsigned
12313add_ff_listen_ival(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12314{
12315 proto_tree_add_item(tree, hf_ieee80211_ff_listen_ival, tvb, offset, 2,
12316 ENC_LITTLE_ENDIAN0x80000000);
12317 return 2;
12318}
12319
12320static unsigned
12321add_ff_reason_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12322{
12323 proto_tree_add_item(tree, hf_ieee80211_ff_reason, tvb, offset, 2,
12324 ENC_LITTLE_ENDIAN0x80000000);
12325 return 2;
12326}
12327
12328static unsigned
12329add_ff_assoc_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12330{
12331 proto_tree_add_item(tree, hf_ieee80211_ff_assoc_id, tvb, offset, 2,
12332 ENC_LITTLE_ENDIAN0x80000000);
12333 return 2;
12334}
12335
12336static unsigned
12337add_ff_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12338{
12339 proto_tree_add_item(tree, hf_ieee80211_ff_status_code, tvb, offset, 2,
12340 ENC_LITTLE_ENDIAN0x80000000);
12341 return 2;
12342}
12343
12344static unsigned
12345add_ff_category_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12346{
12347 proto_tree_add_item(tree, hf_ieee80211_ff_category_code, tvb, offset, 1,
12348 ENC_LITTLE_ENDIAN0x80000000);
12349 return 1;
12350}
12351
12352static unsigned
12353add_ff_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12354{
12355 proto_tree_add_item(tree, hf_ieee80211_ff_action_code, tvb, offset, 1,
12356 ENC_LITTLE_ENDIAN0x80000000);
12357 return 1;
12358}
12359
12360static unsigned
12361add_ff_trigger(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12362{
12363 uint8_t trigger = tvb_get_uint8(tvb, offset);
12364 col_append_fstr(pinfo->cinfo, COL_INFO, ", Trigger=%d (%s)", trigger,
12365 val_to_str_const(trigger, ftm_trigger_vals, "Unknown"));
12366 proto_tree_add_item(tree, hf_ieee80211_ff_trigger, tvb, offset, 1,
12367 ENC_LITTLE_ENDIAN0x80000000);
12368 return 1;
12369}
12370
12371static unsigned
12372add_ff_ftm_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12373{
12374 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_tod, tvb, offset, 6,
12375 ENC_LITTLE_ENDIAN0x80000000);
12376 return 6;
12377}
12378
12379static unsigned
12380add_ff_ftm_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12381{
12382 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_toa, tvb, offset, 6,
12383 ENC_LITTLE_ENDIAN0x80000000);
12384 return 6;
12385}
12386
12387static unsigned
12388add_ff_ftm_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12389{
12390 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_tod_err, tvb, offset, 2,
12391 ENC_LITTLE_ENDIAN0x80000000);
12392 return 2;
12393}
12394
12395static unsigned
12396add_ff_ftm_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12397{
12398 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_toa_err, tvb, offset, 2,
12399 ENC_LITTLE_ENDIAN0x80000000);
12400 return 2;
12401}
12402
12403static unsigned
12404add_ff_ftm_tod_err1(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12405{
12406 static int * const fields[] = {
12407 &hf_ieee80211_ff_ftm_max_tod_error_exponent,
12408 &hf_ieee80211_ff_ftm_tod_err_reserved,
12409 &hf_ieee80211_ff_ftm_tod_not_continuous,
12410 NULL((void*)0)
12411 };
12412
12413 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ftm_tod_err1,
12414 ett_ff_ftm_tod_err1, fields,
12415 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12416 return 1;
12417}
12418
12419static unsigned
12420add_ff_ftm_toa_err1(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12421{
12422 static int * const fields[] = {
12423 &hf_ieee80211_ff_ftm_max_toa_error_exponent,
12424 &hf_ieee80211_ff_ftm_toa_err_reserved,
12425 &hf_ieee80211_ff_ftm_invalid_measurement,
12426 &hf_ieee80211_ff_ftm_toa_type,
12427 NULL((void*)0)
12428 };
12429
12430 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ftm_toa_err1,
12431 ett_ff_ftm_toa_err1, fields,
12432 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12433 return 1;
12434}
12435
12436static unsigned
12437add_ff_ftm_cfo_parameter(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12438{
12439 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_cfo, tvb, offset, 2,
12440 ENC_LITTLE_ENDIAN0x80000000);
12441 return 2;
12442}
12443
12444static unsigned
12445add_ff_ftm_r2i_ndp_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12446{
12447 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_r2i_ndp_tx_power, tvb, offset, 1,
12448 ENC_LITTLE_ENDIAN0x80000000);
12449 return 1;
12450}
12451
12452static unsigned
12453add_ff_ftm_i2r_ndp_target_rssi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12454{
12455 proto_tree_add_item(tree, hf_ieee80211_ff_ftm_i2r_ndp_target_rssi, tvb, offset, 1,
12456 ENC_LITTLE_ENDIAN0x80000000);
12457 return 1;
12458}
12459
12460static int
12461dissect_ftm_params(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
12462{
12463 int offset = 0;
12464 int len = 0;
12465 proto_tree *ftm_param_tree = tree;
12466 static int * const ieee80211_ftm_params_fields1[] = {
12467 &hf_ieee80211_ff_ftm_param_status_indication,
12468 &hf_ieee80211_ff_ftm_param_value,
12469 &hf_ieee80211_ff_ftm_param_reserved1,
12470 &hf_ieee80211_ff_ftm_param_burst_exponent,
12471 &hf_ieee80211_ff_ftm_param_burst_duration,
12472 NULL((void*)0)};
12473
12474 static int * const ieee80211_ftm_params_fields2[] = {
12475 &hf_ieee80211_ff_ftm_param_min_delta_ftm,
12476 &hf_ieee80211_ff_ftm_param_partial_tsf_timer,
12477 &hf_ieee80211_ff_ftm_param_partial_tsf_no_pref,
12478 &hf_ieee80211_ff_ftm_param_asap_capable,
12479 &hf_ieee80211_ff_ftm_param_asap,
12480 &hf_ieee80211_ff_ftm_param_ftm_per_burst,
12481 NULL((void*)0)};
12482
12483 static int * const ieee80211_ftm_params_fields3[] = {
12484 &hf_ieee80211_ff_ftm_param_reserved2,
12485 &hf_ieee80211_ff_ftm_param_format_and_bw,
12486 &hf_ieee80211_ff_ftm_param_burst_period,
12487 NULL((void*)0)};
12488
12489 len = tvb_captured_length(tvb);
12490 if (len != 9)
12491 return 0;
12492
12493 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim1,
12494 ett_ff_ftm_param_delim1, ieee80211_ftm_params_fields1,
12495 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12496 offset += 2;
12497 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim2,
12498 ett_ff_ftm_param_delim2, ieee80211_ftm_params_fields2,
12499 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12500 offset += 4;
12501 proto_tree_add_bitmask_with_flags(ftm_param_tree, tvb, offset, hf_ieee80211_ff_ftm_param_delim3,
12502 ett_ff_ftm_param_delim3, ieee80211_ftm_params_fields3,
12503 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12504 offset += 3;
12505
12506 return offset;
12507}
12508
12509static unsigned
12510add_ff_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12511{
12512 uint8_t value = tvb_get_uint8(tvb, offset);
12513 col_append_fstr(pinfo->cinfo, COL_INFO, ", Dialog Token=%d", value);
12514 proto_tree_add_item(tree, hf_ieee80211_ff_dialog_token, tvb, offset, 1,
12515 ENC_LITTLE_ENDIAN0x80000000);
12516 return 1;
12517}
12518
12519static unsigned
12520add_ff_followup_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12521{
12522 proto_tree_add_item(tree, hf_ieee80211_ff_followup_dialog_token, tvb, offset, 1,
12523 ENC_LITTLE_ENDIAN0x80000000);
12524 return 1;
12525}
12526
12527static unsigned
12528add_ff_wme_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12529{
12530 proto_tree_add_item(tree, hf_ieee80211_ff_wme_action_code, tvb, offset, 1,
12531 ENC_LITTLE_ENDIAN0x80000000);
12532 return 1;
12533}
12534
12535static unsigned
12536add_ff_wme_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12537{
12538 proto_tree_add_item(tree, hf_ieee80211_ff_wme_status_code, tvb, offset, 1,
12539 ENC_LITTLE_ENDIAN0x80000000);
12540 return 1;
12541}
12542
12543static unsigned
12544add_ff_qos_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12545{
12546 proto_tree_add_item(tree, hf_ieee80211_ff_qos_action_code, tvb, offset, 1,
12547 ENC_LITTLE_ENDIAN0x80000000);
12548 return 1;
12549}
12550
12551static unsigned
12552add_ff_block_ack_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12553{
12554 proto_tree_add_item(tree, hf_ieee80211_ff_ba_action, tvb, offset, 1,
12555 ENC_LITTLE_ENDIAN0x80000000);
12556 return 1;
12557}
12558
12559static unsigned
12560add_ff_block_ack_param(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12561{
12562 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_params,
12563 ett_ff_ba_param_tree,
12564 ieee80211_ff_block_ack_params_fields,
12565 ENC_LITTLE_ENDIAN0x80000000);
12566 return 2;
12567}
12568
12569static unsigned
12570add_ff_block_ack_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12571{
12572 proto_tree_add_item(tree, hf_ieee80211_ff_block_ack_timeout, tvb, offset, 2,
12573 ENC_LITTLE_ENDIAN0x80000000);
12574 return 2;
12575}
12576
12577static unsigned
12578add_ff_block_ack_ssc(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12579{
12580 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_block_ack_ssc,
12581 ett_ff_ba_ssc_tree, ieee80211_ff_block_ack_ssc_fields,
12582 ENC_LITTLE_ENDIAN0x80000000);
12583 return 2;
12584}
12585
12586static unsigned
12587add_ff_qos_ts_info(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_tsinfo,
12590 ett_tsinfo_tree, ieee80211_tsinfo_fields,
12591 ENC_LITTLE_ENDIAN0x80000000);
12592 return 3;
12593}
12594
12595static unsigned
12596add_ff_mesh_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12597{
12598 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_action, tvb, offset, 1,
12599 ENC_LITTLE_ENDIAN0x80000000);
12600 return 1;
12601}
12602
12603static unsigned
12604add_ff_multihop_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12605{
12606 proto_tree_add_item(tree, hf_ieee80211_ff_multihop_action, tvb, offset, 1,
12607 ENC_LITTLE_ENDIAN0x80000000);
12608 return 1;
12609}
12610
12611static unsigned
12612add_ff_mesh_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12613{
12614 int start = offset;
12615 uint8_t flags;
12616
12617 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_flags, tvb, offset, 1,
12618 ENC_LITTLE_ENDIAN0x80000000);
12619 flags = tvb_get_uint8(tvb, offset);
12620 offset += 1;
12621 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_ttl, tvb, offset, 1,
12622 ENC_LITTLE_ENDIAN0x80000000);
12623 offset += 1;
12624 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_sequence, tvb, offset, 4,
12625 ENC_LITTLE_ENDIAN0x80000000);
12626 offset += 4;
12627
12628 switch (flags & 0x03) {
12629 case 1:
12630 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr4, tvb, offset, 6,
12631 ENC_NA0x00000000);
12632 offset += 6;
12633 break;
12634 case 2:
12635 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr5, tvb, offset, 6,
12636 ENC_NA0x00000000);
12637 offset += 6;
12638 proto_tree_add_item(tree, hf_ieee80211_ff_mesh_addr6, tvb, offset, 6,
12639 ENC_NA0x00000000);
12640 offset += 6;
12641 break;
12642 case 3:
12643 proto_item_append_text(tree, " Unknown Address Extension Mode");
12644 break;
12645 default:
12646 /* no default action */
12647 break;
12648 }
12649
12650 return offset - start;
12651}
12652
12653static unsigned
12654add_ff_selfprot_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12655{
12656 proto_tree_add_item(tree, hf_ieee80211_ff_selfprot_action, tvb, offset, 1,
12657 ENC_LITTLE_ENDIAN0x80000000);
12658 return 1;
12659}
12660
12661static unsigned
12662add_ff_dls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12663{
12664 proto_tree_add_item(tree, hf_ieee80211_ff_dls_action_code, tvb, offset, 1,
12665 ENC_LITTLE_ENDIAN0x80000000);
12666 return 1;
12667}
12668
12669static unsigned
12670add_ff_dst_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12671{
12672 proto_tree_add_item(tree, hf_ieee80211_ff_dst_mac_addr, tvb, offset, 6,
12673 ENC_NA0x00000000);
12674 return 6;
12675}
12676
12677static unsigned
12678add_ff_src_mac_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12679{
12680 proto_tree_add_item(tree, hf_ieee80211_ff_src_mac_addr, tvb, offset, 6,
12681 ENC_NA0x00000000);
12682 return 6;
12683}
12684
12685static unsigned
12686add_ff_req_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12687{
12688 proto_tree_add_item(tree, hf_ieee80211_ff_req_ap_addr, tvb, offset, 6,
12689 ENC_NA0x00000000);
12690 return 6;
12691}
12692
12693static unsigned
12694add_ff_res_ap_addr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12695{
12696 proto_tree_add_item(tree, hf_ieee80211_ff_res_ap_addr, tvb, offset, 6,
12697 ENC_NA0x00000000);
12698 return 6;
12699}
12700
12701static unsigned
12702add_ff_check_beacon(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12703{
12704 proto_tree_add_item(tree, hf_ieee80211_ff_check_beacon, tvb, offset, 1,
12705 ENC_NA0x00000000);
12706 return 1;
12707}
12708
12709static unsigned
12710add_ff_tod(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12711{
12712 proto_tree_add_item(tree, hf_ieee80211_ff_tod, tvb, offset, 4,
12713 ENC_LITTLE_ENDIAN0x80000000);
12714 return 4;
12715}
12716
12717static unsigned
12718add_ff_toa(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12719{
12720 proto_tree_add_item(tree, hf_ieee80211_ff_toa, tvb, offset, 4,
12721 ENC_LITTLE_ENDIAN0x80000000);
12722 return 4;
12723}
12724
12725static unsigned
12726add_ff_max_tod_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12727{
12728 proto_tree_add_item(tree, hf_ieee80211_ff_max_tod_err, tvb, offset, 1,
12729 ENC_NA0x00000000);
12730 return 1;
12731}
12732
12733static unsigned
12734add_ff_max_toa_err(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12735{
12736 proto_tree_add_item(tree, hf_ieee80211_ff_max_toa_err, tvb, offset, 1,
12737 ENC_NA0x00000000);
12738 return 1;
12739}
12740
12741static unsigned
12742add_ff_dls_timeout(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12743{
12744 proto_tree_add_item(tree, hf_ieee80211_ff_dls_timeout, tvb, offset, 2,
12745 ENC_LITTLE_ENDIAN0x80000000);
12746 return 2;
12747}
12748
12749static unsigned
12750add_ff_delba_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12751{
12752 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_delba_param,
12753 ett_ff_ba_param_tree, ieee80211_ff_delba_param_fields,
12754 ENC_LITTLE_ENDIAN0x80000000);
12755 return 2;
12756}
12757
12758static unsigned
12759add_ff_max_reg_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12760{
12761 proto_tree_add_item(tree, hf_ieee80211_ff_max_reg_pwr, tvb, offset, 2,
12762 ENC_LITTLE_ENDIAN0x80000000);
12763 return 2;
12764}
12765
12766static unsigned
12767add_ff_measurement_pilot_int(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12768{
12769 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
12770 1, ENC_NA0x00000000);
12771 return 1;
12772}
12773
12774static unsigned
12775add_ff_country_str(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12776{
12777 proto_tree_add_item(tree, hf_ieee80211_ff_country_str, tvb, offset, 2,
12778 ENC_ASCII0x00000000);
12779 offset += 2;
12780
12781 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
12782 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12783 return 3;
12784}
12785
12786static unsigned
12787add_ff_max_tx_pwr(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12788{
12789 proto_tree_add_item(tree, hf_ieee80211_ff_max_tx_pwr, tvb, offset, 1,
12790 ENC_LITTLE_ENDIAN0x80000000);
12791 return 1;
12792}
12793
12794static unsigned
12795add_ff_tx_pwr_used(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12796{
12797 proto_tree_add_item(tree, hf_ieee80211_ff_tx_pwr_used, tvb, offset, 1,
12798 ENC_LITTLE_ENDIAN0x80000000);
12799 return 1;
12800}
12801
12802static unsigned
12803add_ff_transceiver_noise_floor(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12804{
12805 proto_tree_add_item(tree, hf_ieee80211_ff_transceiver_noise_floor, tvb,
12806 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
12807 return 1;
12808}
12809
12810static unsigned
12811add_ff_channel_width(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12812{
12813 proto_tree_add_item(tree, hf_ieee80211_ff_channel_width, tvb, offset, 1,
12814 ENC_LITTLE_ENDIAN0x80000000);
12815 return 1;
12816}
12817
12818/* QoS Info: 802.11-2012 8.4.1.17 */
12819static unsigned
12820add_ff_qos_info_ap(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12821{
12822 /* From AP so decode as AP: Figure 8-51-QoS Info field when sent by a AP */
12823 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
12824 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
12825 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12826 return 1;
12827}
12828
12829
12830/* QoS Info: 802.11-2012 8.4.1.17 */
12831static unsigned
12832add_ff_qos_info_sta(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12833{
12834 /* To AP so decode as STA: Figure 8-52-QoS Info field when set by a non-AP STA */
12835 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_sta,
12836 ett_ff_qos_info, ieee80211_ff_qos_info_sta_fields,
12837 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
12838 return 1;
12839}
12840
12841static unsigned
12842add_ff_sm_pwr_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12843{
12844 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_sm_pwr_save,
12845 ett_ff_sm_pwr_save, ieee80211_ff_sw_pwr_save_fields,
12846 ENC_LITTLE_ENDIAN0x80000000);
12847 return 1;
12848}
12849
12850static unsigned
12851add_ff_pco_phase_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12852{
12853 proto_tree_add_item(tree, hf_ieee80211_ff_pco_phase_cntrl, tvb, offset, 1,
12854 ENC_LITTLE_ENDIAN0x80000000);
12855 return 1;
12856}
12857
12858static unsigned
12859add_ff_psmp_param_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12860{
12861 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_psmp_param_set,
12862 ett_ff_psmp_param_set,
12863 ieee80211_ff_psmp_param_set_fields,
12864 ENC_LITTLE_ENDIAN0x80000000);
12865 return 2;
12866}
12867
12868static unsigned
12869add_ff_mimo_cntrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12870{
12871 proto_item *mimo_item;
12872 proto_tree *mimo_tree;
12873 static int * const ieee80211_mimo_fields[] = {
12874 &hf_ieee80211_ff_mimo_cntrl_nc_index,
12875 &hf_ieee80211_ff_mimo_cntrl_nr_index,
12876 &hf_ieee80211_ff_mimo_cntrl_channel_width,
12877 &hf_ieee80211_ff_mimo_cntrl_grouping,
12878 &hf_ieee80211_ff_mimo_cntrl_coefficient_size,
12879 &hf_ieee80211_ff_mimo_cntrl_codebook_info,
12880 &hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
12881 &hf_ieee80211_ff_mimo_cntrl_reserved,
12882 NULL((void*)0)
12883 };
12884
12885 mimo_item = proto_tree_add_item(tree, hf_ieee80211_ff_mimo_cntrl, tvb,
12886 offset, 6, ENC_NA0x00000000);
12887 mimo_tree = proto_item_add_subtree(mimo_item, ett_ff_mimo_cntrl);
12888
12889 proto_tree_add_bitmask_list(mimo_tree, tvb, offset, 2, ieee80211_mimo_fields, ENC_LITTLE_ENDIAN0x80000000);
12890 offset += 2;
12891 proto_tree_add_item(mimo_tree, hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
12892 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
12893
12894 return 6;
12895}
12896
12897static unsigned
12898add_ff_ant_selection(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12899{
12900 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ant_selection,
12901 ett_ff_ant_sel, ieee80211_ff_ant_selection_fields,
12902 ENC_LITTLE_ENDIAN0x80000000);
12903 return 1;
12904}
12905
12906static unsigned
12907add_ff_extended_channel_switch_announcement(proto_tree *tree, tvbuff_t *tvb,
12908 packet_info *pinfo _U___attribute__((unused)), int offset)
12909{
12910 proto_tree_add_bitmask(tree, tvb, offset,
12911 hf_ieee80211_ff_ext_channel_switch_announcement,
12912 ett_ff_chan_switch_announce,
12913 ieee80211_ff_ext_channel_switch_announcement_fields,
12914 ENC_LITTLE_ENDIAN0x80000000);
12915 return 4;
12916}
12917
12918static unsigned
12919add_ff_ht_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12920{
12921 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_ht_info,
12922 ett_ff_ht_info, ieee80211_ff_ht_info_fields,
12923 ENC_LITTLE_ENDIAN0x80000000);
12924 return 1;
12925}
12926static unsigned
12927add_ff_lmr_report(proto_tree *tree, tvbuff_t *tvb,
12928 packet_info *pinfo _U___attribute__((unused)), int offset)
12929{
12930 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
12931 offset += add_ff_ftm_tod(tree, tvb, pinfo, offset);
12932 offset += add_ff_ftm_toa(tree, tvb, pinfo, offset);
12933 offset += add_ff_ftm_tod_err1(tree, tvb, pinfo, offset);
12934 offset += add_ff_ftm_toa_err1(tree, tvb, pinfo, offset);
12935 offset += add_ff_ftm_cfo_parameter(tree, tvb, pinfo, offset);
12936 offset += add_ff_ftm_r2i_ndp_tx_power(tree, tvb, pinfo, offset);
12937 offset += add_ff_ftm_i2r_ndp_target_rssi(tree, tvb, pinfo, offset);
12938 /* Secure LTF parameters (optional) */
12939 /* AOA feedback (optional) */
12940 return offset;
12941}
12942
12943static unsigned
12944add_ff_ftm_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12945{
12946 return add_ff_trigger(tree, tvb, pinfo, offset);
12947}
12948
12949static unsigned
12950add_ff_ftm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12951{
12952 unsigned start = offset;
12953 uint8_t dialog_token = tvb_get_uint8(tvb, offset);
12954 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
12955 if (dialog_token == 0) {
12956 col_append_str(pinfo->cinfo, COL_INFO, " (Termination)");
12957 }
12958 offset += add_ff_followup_dialog_token(tree, tvb, pinfo, offset);
12959 offset += add_ff_ftm_tod(tree, tvb, pinfo, offset);
12960 offset += add_ff_ftm_toa(tree, tvb, pinfo, offset);
12961 offset += add_ff_ftm_tod_err(tree, tvb, pinfo, offset);
12962 offset += add_ff_ftm_toa_err(tree, tvb, pinfo, offset);
12963 return offset - start;
12964}
12965
12966static unsigned
12967add_ff_ht_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12968{
12969 proto_tree_add_item(tree, hf_ieee80211_ff_ht_action, tvb, offset, 1,
12970 ENC_LITTLE_ENDIAN0x80000000);
12971 return 1;
12972}
12973
12974static unsigned
12975add_ff_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12976{
12977 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_action_code, tvb, offset, 1,
12978 ENC_LITTLE_ENDIAN0x80000000);
12979 return 1;
12980}
12981
12982static unsigned
12983add_ff_dmg_pwr_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12984{
12985 proto_tree_add_item(tree, hf_ieee80211_ff_dmg_pwr_mgmt, tvb, offset, 1,
12986 ENC_LITTLE_ENDIAN0x80000000);
12987 return 1;
12988}
12989
12990static unsigned
12991add_ff_psmp_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
12992{
12993 proto_item *psmp_item;
12994 proto_tree *psmp_tree;
12995
12996 psmp_item = proto_tree_add_item(tree, hf_ieee80211_ff_psmp_sta_info, tvb,
12997 offset, 8, ENC_LITTLE_ENDIAN0x80000000);
12998 psmp_tree = proto_item_add_subtree(psmp_item, ett_ff_psmp_sta_info);
12999
13000 proto_tree_add_item(psmp_item, hf_ieee80211_ff_psmp_sta_info_type, tvb,
13001 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13002
13003 switch (tvb_get_letohl(tvb, offset) & PSMP_STA_INFO_FLAG_TYPE0x00000003) {
13004 case PSMP_STA_INFO_BROADCAST0:
13005 proto_tree_add_item(psmp_tree,
13006 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
13007 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13008 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
13009 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13010 /* Missing 64 bit bitmask... */
13011 proto_tree_add_uint64(psmp_tree,
13012 hf_ieee80211_ff_psmp_sta_info_reserved_large,
13013 tvb, offset, 8,
13014 (tvb_get_letoh64(tvb, offset) &
13015 UINT64_C(0xFFFFFFFFFFE00000)0xFFFFFFFFFFE00000UL) >> 21);
13016 break;
13017 case PSMP_STA_INFO_MULTICAST1:
13018 proto_tree_add_item(psmp_tree,
13019 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
13020 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13021 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
13022 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13023 /* Missing 64 bit bitmask... */
13024 proto_tree_add_uint64(psmp_tree,
13025 hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
13026 tvb, offset, 6,
13027 (tvb_get_letoh64(tvb, offset) &
13028 UINT64_C(0xFFFFFFFFFFE00000)0xFFFFFFFFFFE00000UL) >> 21);
13029 break;
13030 case PSMP_STA_INFO_INDIVIDUALLY_ADDRESSED2:
13031 proto_tree_add_item(psmp_tree,
13032 hf_ieee80211_ff_psmp_sta_info_dtt_start_offset, tvb,
13033 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13034 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_dtt_duration,
13035 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13036 offset += 2;
13037 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_sta_id, tvb,
13038 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13039 offset += 2;
13040
13041 proto_tree_add_item(psmp_tree,
13042 hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
13043 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13044 proto_tree_add_item(psmp_tree, hf_ieee80211_ff_psmp_sta_info_utt_duration,
13045 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13046 proto_tree_add_item(psmp_tree,
13047 hf_ieee80211_ff_psmp_sta_info_reserved_small, tvb,
13048 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13049 break;
13050 }
13051
13052 return 8;
13053}
13054
13055static unsigned
13056add_ff_schedule_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13057{
13058 static int * const ieee80211_schedule_info_fields1[] = {
13059 &hf_ieee80211_sched_info_agg,
13060 NULL((void*)0)
13061 };
13062 static int * const ieee80211_schedule_info_fields2[] = {
13063 &hf_ieee80211_sched_info_agg,
13064 &hf_ieee80211_sched_info_tsid,
13065 &hf_ieee80211_sched_info_dir,
13066 NULL((void*)0)
13067 };
13068
13069 if (tvb_get_letohs(tvb, offset) & 0x0001) {
13070 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_sched_info,
13071 ett_sched_tree, ieee80211_schedule_info_fields2,
13072 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
13073 } else {
13074 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_sched_info,
13075 ett_sched_tree, ieee80211_schedule_info_fields1,
13076 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
13077 }
13078
13079 return 2;
13080}
13081
13082static unsigned
13083add_ff_pa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13084{
13085 proto_tree_add_item(tree, hf_ieee80211_ff_public_action, tvb, offset, 1,
13086 ENC_LITTLE_ENDIAN0x80000000);
13087 return 1;
13088}
13089
13090static unsigned
13091add_ff_ppa_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13092{
13093 proto_tree_add_item(tree, hf_ieee80211_ff_protected_public_action, tvb, offset, 1,
13094 ENC_LITTLE_ENDIAN0x80000000);
13095 return 1;
13096}
13097
13098static unsigned
13099add_ff_ft_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13100{
13101 proto_tree_add_item(tree, hf_ieee80211_ff_ft_action_code, tvb, offset, 1,
13102 ENC_LITTLE_ENDIAN0x80000000);
13103 return 1;
13104}
13105
13106static unsigned
13107add_ff_sta_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13108{
13109 proto_tree_add_item(tree, hf_ieee80211_ff_sta_address, tvb, offset, 6,
13110 ENC_NA0x00000000);
13111 return 6;
13112}
13113
13114static unsigned
13115add_ff_target_ap_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13116{
13117 proto_tree_add_item(tree, hf_ieee80211_ff_target_ap_address, tvb, offset, 6,
13118 ENC_NA0x00000000);
13119 return 6;
13120}
13121
13122static unsigned
13123add_ff_gas_comeback_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13124{
13125 proto_tree_add_item(tree, hf_ieee80211_ff_gas_comeback_delay, tvb, offset, 2,
13126 ENC_LITTLE_ENDIAN0x80000000);
13127 return 2;
13128}
13129
13130static unsigned
13131add_ff_gas_fragment_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13132{
13133 proto_tree_add_item(tree, hf_ieee80211_ff_gas_fragment_id, tvb, offset, 1,
13134 ENC_LITTLE_ENDIAN0x80000000);
13135 proto_tree_add_item(tree, hf_ieee80211_ff_more_gas_fragments, tvb, offset, 1,
13136 ENC_LITTLE_ENDIAN0x80000000);
13137 return 1;
13138}
13139
13140static unsigned
13141add_ff_sa_query_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13142{
13143 proto_tree_add_item(tree, hf_ieee80211_ff_sa_query_action_code, tvb, offset,
13144 1, ENC_LITTLE_ENDIAN0x80000000);
13145 return 1;
13146}
13147
13148static unsigned
13149add_ff_transaction_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13150{
13151 proto_tree_add_item(tree, hf_ieee80211_ff_transaction_id, tvb, offset, 2,
13152 ENC_LITTLE_ENDIAN0x80000000);
13153 return 2;
13154}
13155
13156static unsigned
13157add_ff_tdls_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13158{
13159 uint8_t code;
13160 code = tvb_get_uint8(tvb, offset);
13161 col_set_str(pinfo->cinfo, COL_INFO,
13162 val_to_str_ext_const(code, &tdls_action_codes_ext,
13163 "Unknown TDLS Action"));
13164 proto_tree_add_item(tree, hf_ieee80211_ff_tdls_action_code, tvb, offset, 1,
13165 ENC_LITTLE_ENDIAN0x80000000);
13166 return 1;
13167}
13168
13169static unsigned
13170add_ff_target_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13171{
13172 proto_tree_add_item(tree, hf_ieee80211_ff_target_channel, tvb, offset, 1,
13173 ENC_LITTLE_ENDIAN0x80000000);
13174 return 1;
13175}
13176
13177static unsigned
13178add_ff_operating_class(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13179{
13180 proto_tree_add_item(tree, hf_ieee80211_ff_operating_class, tvb, offset, 1,
13181 ENC_LITTLE_ENDIAN0x80000000);
13182 return 1;
13183}
13184
13185static unsigned
13186add_ff_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13187{
13188 proto_tree_add_item(tree, hf_ieee80211_ff_channel, tvb, offset, 1,
13189 ENC_LITTLE_ENDIAN0x80000000);
13190 return 1;
13191}
13192
13193static unsigned
13194add_ff_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13195{
13196 uint8_t code;
13197
13198 code = tvb_get_uint8(tvb, offset);
13199 col_set_str(pinfo->cinfo, COL_INFO,
13200 val_to_str_ext_const(code, &wnm_action_codes_ext, "Unknown WNM Action"));
13201 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13202 return 1;
13203}
13204
13205static unsigned
13206add_ff_unprotected_wnm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13207{
13208 uint8_t code;
13209
13210 code = tvb_get_uint8(tvb, offset);
13211 col_set_str(pinfo->cinfo, COL_INFO,
13212 val_to_str_ext_const(code, &unprotected_wnm_action_codes_ext, "Unknown Unprotected WNM Action"));
13213 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_wnm_action_code, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13214 return 1;
13215}
13216
13217static unsigned
13218add_ff_unprotected_dmg_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13219{
13220 proto_tree_add_item(tree, hf_ieee80211_ff_unprotected_dmg_action_code, tvb, offset, 1, ENC_NA0x00000000);
13221 return 1;
13222}
13223
13224static unsigned
13225add_ff_key_data_length(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13226{
13227 proto_tree_add_item(tree, hf_ieee80211_ff_key_data_length, tvb, offset, 2,
13228 ENC_LITTLE_ENDIAN0x80000000);
13229 return 2;
13230}
13231
13232static unsigned
13233add_ff_wnm_notification_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13234{
13235 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_type,
13236 tvb, offset, 1, ENC_NA0x00000000);
13237 return 1;
13238}
13239
13240/* Action frame: Radio Measurement actions */
13241static unsigned
13242add_ff_rm_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13243{
13244 proto_tree_add_item(tree, hf_ieee80211_ff_rm_action_code, tvb, offset, 1, ENC_NA0x00000000);
13245 return 1;
13246}
13247
13248static unsigned
13249add_ff_rm_dialog_token(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13250{
13251 proto_tree_add_item(tree, hf_ieee80211_ff_rm_dialog_token, tvb, offset, 1, ENC_NA0x00000000);
13252 return 1;
13253}
13254
13255/* Radio Measurement Request frame, Action fields */
13256static unsigned
13257add_ff_rm_repetitions(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13258{
13259 /* Note: 65535 means repeated until cancelled or superseded */
13260 proto_tree_add_item(tree, hf_ieee80211_ff_rm_repetitions, tvb, offset, 2,
13261 ENC_BIG_ENDIAN0x00000000);
13262 return 2;
13263}
13264
13265/* Link Measurement Request frame, Action fields*/
13266static unsigned
13267add_ff_rm_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13268{
13269 /* In dBm, see 8.4.1.20 */
13270 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_power, tvb, offset, 1, ENC_NA0x00000000);
13271 return 1;
13272}
13273
13274static unsigned
13275add_ff_rm_max_tx_power(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13276{
13277 /* In dBm, see 8.4.1.19 */
13278 proto_tree_add_item(tree, hf_ieee80211_ff_rm_max_tx_power, tvb, offset, 1, ENC_NA0x00000000);
13279 return 1;
13280}
13281
13282/* Link Measurement Report frame, Action fields */
13283static unsigned
13284add_ff_rm_tpc_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13285{
13286 proto_tree *tpc_tree;
13287 proto_item *tpc_item;
13288
13289 /* 8.4.2.19 TPC Report element */
13290 /* XXX - The TPC Report element is exactly the same as that dissected
13291 * by ieee80211_tag_tpc_report(), so some of these fixed fields duplicate
13292 * tagged fields.
13293 */
13294 tpc_item = proto_tree_add_item(tree, hf_ieee80211_ff_tpc, tvb, offset, 4, ENC_NA0x00000000);
13295 tpc_tree = proto_item_add_subtree(tpc_item, ett_tpc);
13296 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_element_id, tvb, offset, 1, ENC_NA0x00000000);
13297 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_length, tvb, offset + 1, 1, ENC_NA0x00000000);
13298 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_tx_power, tvb, offset + 2, 1, ENC_NA0x00000000);
13299 proto_tree_add_item(tpc_tree, hf_ieee80211_ff_tpc_link_margin, tvb, offset + 3, 1, ENC_NA0x00000000);
13300 return 4;
13301}
13302
13303static unsigned
13304add_ff_rm_rx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13305{
13306 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
13307 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rx_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
13308 return 1;
13309}
13310
13311static unsigned
13312add_ff_rm_tx_antenna_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13313{
13314 /* 8.4.2.42: 0 means unknown, 1-254 is valid, 255 means multiple antennas */
13315 proto_tree_add_item(tree, hf_ieee80211_ff_rm_tx_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
13316 return 1;
13317}
13318
13319static unsigned
13320add_ff_rm_rcpi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13321{
13322 /* 8.4.2.40: RCPI as specified for certain PHYs */
13323 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rcpi, tvb, offset, 1, ENC_NA0x00000000);
13324 return 1;
13325}
13326
13327static unsigned
13328add_ff_rm_rsni(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13329{
13330 /* 8.4.2.43: RSNI in steps of 0.5 dB, calculated as:
13331 * RSNI = (10 * log10((RCPI_{power} - ANPI_{power}) / ANPI_{power}) + 20)*2 */
13332 proto_tree_add_item(tree, hf_ieee80211_ff_rm_rsni, tvb, offset, 1, ENC_NA0x00000000);
13333 return 1;
13334}
13335
13336static unsigned
13337add_ff_bss_transition_status_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13338{
13339 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_status_code, tvb, offset, 1,
13340 ENC_LITTLE_ENDIAN0x80000000);
13341 return 1;
13342}
13343
13344static unsigned
13345add_ff_bss_termination_delay(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13346{
13347 proto_tree_add_item(tree, hf_ieee80211_ff_bss_termination_delay, tvb, offset, 1,
13348 ENC_LITTLE_ENDIAN0x80000000);
13349 return 1;
13350}
13351
13352static unsigned
13353add_ff_fils_discovery(proto_tree *tree, tvbuff_t *tvb,
13354 packet_info *pinfo _U___attribute__((unused)), int offset)
13355{
13356
13357 uint16_t fc, ssid_length;
13358 static int * const ieee80211_ff_fils_discovery_frame_control[] = {
13359 &hf_ieee80211_ff_fils_discovery_frame_control_ssid_length,
13360 &hf_ieee80211_ff_fils_discovery_frame_control_capability,
13361 &hf_ieee80211_ff_fils_discovery_frame_control_short_ssid,
13362 &hf_ieee80211_ff_fils_discovery_frame_control_ap_csn,
13363 &hf_ieee80211_ff_fils_discovery_frame_control_ano,
13364 &hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency,
13365 &hf_ieee80211_ff_fils_discovery_frame_control_primary_channel,
13366 &hf_ieee80211_ff_fils_discovery_frame_control_rsn_info,
13367 &hf_ieee80211_ff_fils_discovery_frame_control_length,
13368 &hf_ieee80211_ff_fils_discovery_frame_control_md,
13369 &hf_ieee80211_ff_fils_discovery_frame_control_reserved,
13370 NULL((void*)0)
13371 };
13372
13373 proto_tree_add_bitmask(tree, tvb, offset,
13374 hf_ieee80211_ff_fils_discovery_frame_control,
13375 ett_ff_fils_discovery_frame_control,
13376 ieee80211_ff_fils_discovery_frame_control,
13377 ENC_LITTLE_ENDIAN0x80000000);
13378 fc = tvb_get_letohs(tvb, offset);
13379 offset += 2;
13380
13381 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
13382
13383 offset += add_ff_beacon_interval(tree, tvb, pinfo, offset);
13384
13385 if(fc & PA_FILS_FC_SHORT_SSID0x0040) {
13386 /* Always 4 bytes for Short SSID */
13387 /* TODO add check of SSID Length */
13388 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
13389 offset += 4;
13390 } else {
13391 ssid_length = (fc & PA_FILS_FC_SSID_LENGTH0x001F) + 1;
13392 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ssid, tvb, offset, ssid_length, ENC_ASCII0x00000000);
13393 offset += ssid_length;
13394 }
13395
13396 if(fc & PA_FILS_FC_LENGTH0x1000){
13397 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_length, tvb, offset, 1, ENC_NA0x00000000);
13398 offset += 1;
13399 }
13400
13401 if(fc & PA_FILS_FC_CAPABILITY0x0020) {
13402 proto_tree *fdc_tree;
13403 proto_item *fdc_item;
13404 uint32_t fdc;
13405 fdc_item = proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_fils_discovery_capability, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &fdc);
13406 fdc_tree = proto_item_add_subtree(fdc_item, ett_ff_fils_discovery_capability);
13407 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_ess, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13408 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_privacy, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13409 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13410 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13411 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13412 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_multiple_bssid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13413 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_phy_index, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13414 switch((fdc & 0x1C00) >> 10){
13415 case 0:
13416 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13417 break;
13418 case 1:
13419 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13420 break;
13421 case 2:
13422 case 3:
13423 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13424 break;
13425 case 4:
13426 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13427 break;
13428 default:
13429 proto_tree_add_item(fdc_tree, hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
13430 break;
13431 }
13432 offset += 2;
13433 }
13434
13435 if(fc & PA_FILS_FC_PC0x0400) {
13436 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_operating_class, tvb, offset, 1, ENC_NA0x00000000);
13437 offset += 1;
13438 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_primary_channel, tvb, offset, 1, ENC_NA0x00000000);
13439 offset += 1;
13440 }
13441
13442 if(fc & PA_FILS_FC_AP_CSN0x0080) {
13443 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ap_csn, tvb, offset, 1, ENC_NA0x00000000);
13444 offset += 1;
13445 }
13446
13447 if(fc & PA_FILS_FC_ANO0x0100) {
13448 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ano, tvb, offset, 1, ENC_NA0x00000000);
13449 offset += 1;
13450 }
13451
13452 if(fc & PA_FILS_FC_RSN_INFO0x0800) {
13453 /*TODO Dissect RSN info */
13454 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_rsn_info, tvb, offset, 5, ENC_NA0x00000000);
13455 offset += 5;
13456 }
13457
13458 if(fc & PA_FILS_FC_CCFS10x0200){
13459 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_ccfs1, tvb, offset, 1, ENC_NA0x00000000);
13460 offset += 1;
13461 }
13462
13463 if(fc & PA_FILS_FC_MD0x2000) {
13464 /*TODO Dissect Mobility Domain */
13465 proto_tree_add_item(tree, hf_ieee80211_ff_fils_discovery_md, tvb, offset, 3, ENC_NA0x00000000);
13466 offset += 3;
13467 }
13468
13469 return offset;
13470}
13471
13472
13473static unsigned
13474add_ff_action_spectrum_mgmt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13475{
13476 switch (tvb_get_uint8(tvb, offset + 1)) {
13477 case SM_ACTION_MEASUREMENT_REQUEST0:
13478 case SM_ACTION_MEASUREMENT_REPORT1:
13479 case SM_ACTION_TPC_REQUEST2:
13480 case SM_ACTION_TPC_REPORT3:
13481 add_ff_category_code(tree, tvb, pinfo, offset);
13482 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13483 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13484 return 3;
13485 case SM_ACTION_CHAN_SWITCH_ANNC4:
13486 case SM_ACTION_EXT_CHAN_SWITCH_ANNC5:
13487 add_ff_category_code(tree, tvb, pinfo, offset);
13488 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13489 return 2;
13490 default:
13491 add_ff_category_code(tree, tvb, pinfo, offset);
13492 add_ff_action_code(tree, tvb, pinfo, offset + 1);
13493 return 2;
13494 }
13495}
13496
13497static unsigned
13498add_ff_action_qos(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13499{
13500 switch (tvb_get_uint8(tvb, offset + 1)) {
13501 case QOS_ACTION_ADDTS_REQUEST0:
13502 add_ff_category_code(tree, tvb, pinfo, offset);
13503 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13504 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13505 return 3;
13506 case QOS_ACTION_ADDTS_RESPONSE1:
13507 add_ff_category_code(tree, tvb, pinfo, offset);
13508 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13509 add_ff_dialog_token(tree, tvb, pinfo, offset + 2);
13510 add_ff_status_code(tree, tvb, pinfo, offset + 3);
13511 return 5;
13512 case QOS_ACTION_DELTS2:
13513 add_ff_category_code(tree, tvb, pinfo, offset);
13514 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13515 add_ff_qos_ts_info(tree, tvb, pinfo, offset + 2);
13516 add_ff_reason_code(tree, tvb, pinfo, offset + 5);
13517 return 7;
13518 case QOS_ACTION_SCHEDULE3:
13519 add_ff_category_code(tree, tvb, pinfo, offset);
13520 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13521 return 2;
13522 case QOS_ACTION_MAP_CONFIGURE4:
13523 add_ff_category_code(tree, tvb, pinfo, offset);
13524 add_ff_qos_action_code(tree, tvb, pinfo, offset + 1);
13525 return 2;
13526 default:
13527 add_ff_category_code(tree, tvb, pinfo, offset);
13528 return 2;
13529 }
13530}
13531
13532static unsigned
13533add_ff_action_dls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13534{
13535 switch (tvb_get_uint8(tvb, offset + 1)) {
13536 case DLS_ACTION_REQUEST0:
13537 add_ff_category_code(tree, tvb, pinfo, offset);
13538 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13539 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
13540 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
13541 add_ff_cap_info(tree, tvb, pinfo, offset + 14);
13542 add_ff_dls_timeout(tree, tvb, pinfo, offset + 16);
13543 return 18;
13544 case DLS_ACTION_RESPONSE1:
13545 add_ff_category_code(tree, tvb, pinfo, offset);
13546 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13547 add_ff_status_code(tree, tvb, pinfo, offset + 2);
13548 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 4);
13549 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 10);
13550 if (!hf_ieee80211_ff_status_code) {
13551 add_ff_cap_info(tree, tvb, pinfo, offset + 16);
13552 }
13553 return 16;
13554 case DLS_ACTION_TEARDOWN2:
13555 add_ff_category_code(tree, tvb, pinfo, offset);
13556 add_ff_dls_action_code(tree, tvb, pinfo, offset + 1);
13557 add_ff_dst_mac_addr(tree, tvb, pinfo, offset + 2);
13558 add_ff_src_mac_addr(tree, tvb, pinfo, offset + 8);
13559 add_ff_reason_code(tree, tvb, pinfo, offset + 14);
13560 return 16;
13561 default:
13562 add_ff_category_code(tree, tvb, pinfo, offset);
13563 return 2;
13564 }
13565}
13566
13567static unsigned
13568add_ff_action_block_ack(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13569{
13570 unsigned start = offset;
13571
13572 switch (tvb_get_uint8(tvb, offset + 1)) {
13573 case BA_ADD_BLOCK_ACK_REQUEST0:
13574 case BA_NDP_ADD_BLOCK_ACK_REQUEST128:
13575 case BA_BAT_ADD_BLOCK_ACK_REQUEST132:
13576 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13577 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13578 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13579 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
13580 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
13581 offset += add_ff_block_ack_ssc(tree, tvb, pinfo, offset);
13582 break;
13583 case BA_ADD_BLOCK_ACK_RESPONSE1:
13584 case BA_NDP_ADD_BLOCK_ACK_RESPONSE129:
13585 case BA_BAT_ADD_BLOCK_ACK_RESPONSE133:
13586 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13587 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13588 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13589 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13590 offset += add_ff_block_ack_param(tree, tvb, pinfo, offset);
13591 offset += add_ff_block_ack_timeout(tree, tvb, pinfo, offset);
13592 break;
13593 case BA_DELETE_BLOCK_ACK2:
13594 case BA_NDP_DELETE_BLOCK_ACK130:
13595 case BA_BAT_DELETE_BLOCK_ACK134:
13596 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13597 offset += add_ff_block_ack_action_code(tree, tvb, pinfo, offset);
13598 offset += add_ff_delba_param_set(tree, tvb, pinfo, offset);
13599 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
13600 break;
13601 }
13602
13603 return offset - start; /* Size of fixed fields */
13604}
13605
13606unsigned
13607add_ff_action_public_fields(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, uint8_t code)
13608{
13609 uint32_t oui;
13610 unsigned type;
13611 unsigned subtype;
13612 uint8_t dialog_token;
13613 uint8_t frag;
13614 bool_Bool more;
13615 tvbuff_t *vendor_tvb;
13616 int dissected;
13617
13618 unsigned start = offset;
13619
13620 switch (code) {
13621 case PA_EXT_CHANNEL_SWITCH_ANNOUNCEMENT4:
13622 offset += add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
13623 break;
13624 case PA_VENDOR_SPECIFIC9:
13625 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
13626 offset += 3;
13627 switch (oui) {
13628 case OUI_WFA0x506F9A:
13629 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui_wfa_subtype, tvb, offset, 1, ENC_NA0x00000000, &subtype);
13630 offset += 1;
13631 vendor_tvb = tvb_new_subset_remaining(tvb, offset);
13632 dissected = dissector_try_uint_with_data(wifi_alliance_public_action_table, subtype, vendor_tvb, pinfo, tree, false0, NULL((void*)0));
13633 offset += dissected;
13634 break;
13635 default:
13636 /* Don't know how to handle this vendor */
13637 break;
13638 }
13639 break;
13640 case PA_GAS_INITIAL_REQUEST10:
13641 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13642 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13643 &type, &subtype);
13644 offset += dissect_gas_initial_request(tree, tvb, pinfo, offset, type,
13645 subtype);
13646 break;
13647 case PA_GAS_INITIAL_RESPONSE11:
13648 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13649 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13650 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
13651 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13652 &type, &subtype);
13653 offset += dissect_gas_initial_response(tree, tvb, pinfo, offset, type,
13654 subtype);
13655 break;
13656 case PA_GAS_COMEBACK_REQUEST12:
13657 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13658 break;
13659 case PA_GAS_COMEBACK_RESPONSE13:
13660 dialog_token = tvb_get_uint8(tvb, offset);
13661 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13662 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13663 frag = tvb_get_uint8(tvb, offset) & 0x7f;
13664 more = (tvb_get_uint8(tvb, offset) & 0x80) != 0;
13665 offset += add_ff_gas_fragment_id(tree, tvb, pinfo, offset);
13666 offset += add_ff_gas_comeback_delay(tree, tvb, pinfo, offset);
13667 offset += dissect_advertisement_protocol_common(pinfo, tree, tvb, offset,
13668 &type, &subtype);
13669 offset += dissect_gas_comeback_response(tree, tvb, pinfo, offset, type,
13670 subtype, frag, more, dialog_token);
13671 break;
13672 case PA_TDLS_DISCOVERY_RESPONSE14:
13673 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
13674 col_set_str(pinfo->cinfo, COL_INFO, "TDLS Discovery Response");
13675 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13676 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13677 break;
13678 case PA_QAB_REQUEST16:
13679 case PA_QAB_RESPONSE17:
13680 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
13681 offset += add_ff_req_ap_addr(tree, tvb, pinfo, offset);
13682 offset += add_ff_res_ap_addr(tree, tvb, pinfo, offset);
13683 break;
13684 case PA_FTM_REQUEST32:
13685 col_set_str(pinfo->cinfo, COL_INFO, "FTM Request");
13686 offset += add_ff_ftm_request(tree, tvb, pinfo, offset);
13687 break;
13688 case PA_FTM33:
13689 col_set_str(pinfo->cinfo, COL_INFO, "FTM");
13690 offset += add_ff_ftm(tree, tvb, pinfo, offset);
13691 break;
13692 case PA_FILS_DISCOVERY34:
13693 col_set_str(pinfo->cinfo, COL_INFO, "FILS Discovery");
13694 offset = add_ff_fils_discovery(tree, tvb, pinfo, offset);
13695 break;
13696 case PA_LOCATION_MEASUREMENT_REPORT47:
13697 col_set_str(pinfo->cinfo, COL_INFO, "Location Measurement Report");
13698 offset = add_ff_lmr_report(tree, tvb, pinfo, offset);
13699 break;
13700 }
13701
13702 return offset - start; /* Size of fixed fields */
13703}
13704
13705static unsigned
13706add_ff_action_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13707{
13708 uint8_t code;
13709 unsigned start = offset;
13710 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13711 code = tvb_get_uint8(tvb, offset);
13712 offset += add_ff_pa_action_code(tree, tvb, pinfo, offset);
13713 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
13714 return offset - start;
13715}
13716
13717static unsigned
13718add_ff_action_protected_public(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13719{
13720 uint8_t code;
13721 unsigned start = offset;
13722 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13723 code = tvb_get_uint8(tvb, offset);
13724 offset += add_ff_ppa_action_code(tree, tvb, pinfo, offset);
13725 offset += add_ff_action_public_fields(tree, tvb, pinfo, offset, code);
13726 return offset - start;
13727}
13728
13729static unsigned
13730add_ff_action_radio_measurement(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13731{
13732 unsigned start = offset;
13733 uint8_t code;
13734
13735 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13736 code = tvb_get_uint8(tvb, offset);
13737 offset += add_ff_rm_action_code(tree, tvb, pinfo, offset);
13738
13739 switch (code) {
13740 case RM_ACTION_RADIO_MEASUREMENT_REQUEST0:
13741 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13742 offset += add_ff_rm_repetitions(tree, tvb, pinfo, offset);
13743 /* Followed by Measurement Request Elements */
13744 break;
13745 case RM_ACTION_RADIO_MEASUREMENT_REPORT1:
13746 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13747 /* Followed by Measurement Report Elements */
13748 break;
13749 case RM_ACTION_LINK_MEASUREMENT_REQUEST2:
13750 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13751 offset += add_ff_rm_tx_power(tree, tvb, pinfo, offset);
13752 offset += add_ff_rm_max_tx_power(tree, tvb, pinfo, offset);
13753 /* Followed by Optional Subelements */
13754 break;
13755 case RM_ACTION_LINK_MEASUREMENT_REPORT3:
13756 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13757 offset += add_ff_rm_tpc_report(tree, tvb, pinfo, offset);
13758 offset += add_ff_rm_rx_antenna_id(tree, tvb, pinfo, offset);
13759 offset += add_ff_rm_tx_antenna_id(tree, tvb, pinfo, offset);
13760 offset += add_ff_rm_rcpi(tree, tvb, pinfo, offset);
13761 offset += add_ff_rm_rsni(tree, tvb, pinfo, offset);
13762 /* Followed by Optional Subelements */
13763 break;
13764 case RM_ACTION_NEIGHBOR_REPORT_REQUEST4:
13765 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13766 /* Followed by Optional Subelements */
13767 break;
13768 case RM_ACTION_NEIGHBOR_REPORT_RESPONSE5:
13769 offset += add_ff_rm_dialog_token(tree, tvb, pinfo, offset);
13770 /* Followed by Neighbor Report Elements */
13771 break;
13772 }
13773
13774 return offset - start; /* Size of fixed fields */
13775}
13776
13777static unsigned
13778add_ff_action_fast_bss_transition(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13779{
13780 unsigned start = offset;
13781 uint8_t code;
13782
13783 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13784 code = tvb_get_uint8(tvb, offset);
13785 offset += add_ff_ft_action_code(tree, tvb, pinfo, offset);
13786
13787 switch (code) {
13788 case FT_ACTION_REQUEST1:
13789 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13790 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13791 /* Followed by FT Request frame body (IEs) */
13792 break;
13793 case FT_ACTION_RESPONSE2:
13794 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13795 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13796 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13797 /* Followed by FT Response frame body (IEs) */
13798 break;
13799 case FT_ACTION_CONFIRM3:
13800 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13801 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13802 /* Followed by FT Confirm frame body (IEs) */
13803 break;
13804 case FT_ACTION_ACK4:
13805 offset += add_ff_sta_address(tree, tvb, pinfo, offset);
13806 offset += add_ff_target_ap_address(tree, tvb, pinfo, offset);
13807 offset += add_ff_status_code(tree, tvb, pinfo, offset);
13808 /* Followed by FT Ack frame body (IEs) */
13809 break;
13810 }
13811
13812 return offset - start; /* Size of fixed fields */
13813}
13814
13815static unsigned
13816add_ff_action_sa_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13817{
13818 unsigned start = offset;
13819 uint8_t code;
13820
13821 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13822 code = tvb_get_uint8(tvb, offset);
13823 offset += add_ff_sa_query_action_code(tree, tvb, pinfo, offset);
13824
13825 switch (code) {
13826 case SA_QUERY_REQUEST0:
13827 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
13828 break;
13829 case SA_QUERY_RESPONSE1:
13830 offset += add_ff_transaction_id(tree, tvb, pinfo, offset);
13831 break;
13832 }
13833
13834 return offset - start; /* Size of fixed fields */
13835}
13836
13837static unsigned
13838add_ff_action_mesh(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13839{
13840 unsigned length;
13841
13842 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13843 offset += add_ff_mesh_action(tree, tvb, pinfo, offset);
13844 /* The only fixed fields are the category and mesh action. The rest are IEs.
13845 */
13846 length = 2;
13847 if (tvb_get_uint8(tvb, 1) == MESH_ACTION_TBTT_ADJ_RESPONSE10) {
13848 /* ..except for the TBTT Adjustment Response, which has a status code field
13849 */
13850 length += add_ff_status_code(tree, tvb, pinfo, offset);
13851 }
13852 return length;
13853}
13854
13855static unsigned
13856add_ff_action_multihop(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
13857{
13858 unsigned start = offset;
13859
13860 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13861 offset += add_ff_multihop_action(tree, tvb, pinfo, offset);
13862 offset += add_ff_mesh_control(tree, tvb, pinfo, offset);
13863 return offset - start;
13864}
13865
13866static unsigned
13867add_ff_action_self_protected(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
13868 association_sanity_check_t *association_sanity_check)
13869{
13870 unsigned start = offset;
13871 uint8_t self_protected_action = tvb_get_uint8(tvb, start + 1);
13872
13873 offset += add_ff_category_code(tree, tvb, pinfo, offset);
13874 offset += add_ff_selfprot_action(tree, tvb, pinfo, offset);
13875
13876 switch (self_protected_action) {
13877 case SELFPROT_ACTION_MESH_PEERING_OPEN1:
13878 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13879 if (association_sanity_check)
13880 association_sanity_check->ampe_frame = self_protected_action;
13881 break;
13882 case SELFPROT_ACTION_MESH_PEERING_CONFIRM2:
13883 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
13884 offset += add_ff_assoc_id(tree, tvb, pinfo, offset);
13885 if (association_sanity_check)
13886 association_sanity_check->ampe_frame = self_protected_action;
13887 break;
13888 case SELFPROT_ACTION_MESH_PEERING_CLOSE3:
13889 if (association_sanity_check)
13890 association_sanity_check->ampe_frame = self_protected_action;
13891 break;
13892 }
13893
13894 return offset - start;
13895}
13896
13897static unsigned
13898add_ff_vht_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13899{
13900 proto_tree_add_item(tree, hf_ieee80211_ff_vht_action, tvb, offset, 1,
13901 ENC_LITTLE_ENDIAN0x80000000);
13902 return 1;
13903}
13904
13905static unsigned
13906add_ff_s1g_timestamp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13907{
13908 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_timestamp, tvb, offset,
13909 4, ENC_LITTLE_ENDIAN0x80000000);
13910 return 4;
13911}
13912
13913static unsigned
13914add_ff_change_sequence(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13915{
13916 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_change_sequence, tvb, offset,
13917 1, ENC_NA0x00000000);
13918 return 1;
13919}
13920
13921static unsigned
13922add_ff_next_tbtt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13923{
13924 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_next_tbtt, tvb, offset,
13925 3, ENC_LITTLE_ENDIAN0x80000000);
13926 return 3;
13927}
13928
13929static unsigned
13930add_ff_compressed_ssid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13931{
13932 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_compressed_ssid, tvb, offset,
13933 4, ENC_LITTLE_ENDIAN0x80000000);
13934 return 4;
13935}
13936
13937/* This should not be S1G specific because 802.11-2016 defines it as well. */
13938static unsigned
13939add_ff_access_network_options(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13940{
13941 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_access_network_options, tvb,
13942 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
13943 return 1;
13944}
13945
13946static unsigned
13947add_ff_s1g_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13948{
13949 proto_tree_add_item(tree, hf_ieee80211_ff_s1g_action, tvb, offset, 1,
13950 ENC_LITTLE_ENDIAN0x80000000);
13951 return 1;
13952}
13953
13954static unsigned
13955add_ff_prot_s1g_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
13956{
13957 proto_tree_add_item(tree, hf_ieee80211_ff_prot_s1g_action, tvb, offset, 1,
13958 ENC_LITTLE_ENDIAN0x80000000);
13959 return 1;
13960}
13961
13962static unsigned get_group_element_len(unsigned group) {
13963 switch (group) {
13964 /* Diffie-Hellman groups */
13965 case 1:
13966 return 96;
13967 case 2:
13968 case 22:
13969 return 128;
13970 case 5:
13971 return 192;
13972 case 14:
13973 case 23:
13974 case 24:
13975 return 256;
13976 case 15:
13977 return 384;
13978 case 16:
13979 return 512;
13980 case 17:
13981 return 768;
13982 case 18:
13983 return 1024;
13984 /* ECC groups */
13985 case 19:
13986 case 28:
13987 return 64;
13988 case 20:
13989 case 29:
13990 return 96;
13991 case 21:
13992 return 132;
13993 case 25:
13994 return 48;
13995 case 26:
13996 return 56;
13997 case 30:
13998 return 128;
13999 default:
14000 return 0;
14001 }
14002}
14003
14004static unsigned get_scalar_len(unsigned group) {
14005 switch (group) {
14006 /* Diffie-Hellman groups */
14007 case 1:
14008 return 96;
14009 case 2:
14010 return 128;
14011 case 5:
14012 return 192;
14013 case 14:
14014 return 256;
14015 case 15:
14016 return 384;
14017 case 16:
14018 return 512;
14019 case 17:
14020 return 768;
14021 case 18:
14022 return 1024;
14023 case 22:
14024 return 20;
14025 case 23:
14026 return 28;
14027 case 24:
14028 return 32;
14029 /* ECC groups */
14030 case 19:
14031 case 28:
14032 return 32;
14033 case 20:
14034 case 29:
14035 return 48;
14036 case 21:
14037 return 66;
14038 case 25:
14039 return 24;
14040 case 26:
14041 return 28;
14042 case 30:
14043 return 64;
14044 default:
14045 return 0;
14046 }
14047}
14048
14049static unsigned
14050find_fixed_field_len(tvbuff_t *tvb, unsigned offset)
14051{
14052 unsigned start_offset = offset;
14053 unsigned len = tvb_reported_length(tvb);
14054
14055 if (offset >= len) {
14056 return 0;
14057 }
14058
14059 while (offset < len) {
14060 if (tvb_get_uint8(tvb, offset) == 0xFF) {
14061 /*
14062 * Check if we have a len followed by either ETAG_REJECTED_GROUPS
14063 * or ETAG_PASSWORD_IDENTIFIER or ETAG_ANTI_CLOGGING_TOKEN
14064 */
14065 /* The length of SAE Confirm or Scalar Fixed parameter >= 32 */
14066 if ((offset < len - 3) && (offset - start_offset >= 32)) {
14067 uint8_t etag_len = tvb_get_uint8(tvb, offset + 1);
14068 uint8_t check_byte = tvb_get_uint8(tvb, offset + 2);
14069 if (check_byte == ETAG_REJECTED_GROUPS92 ||
14070 check_byte == ETAG_PASSWORD_IDENTIFIER33 ||
14071 check_byte == ETAG_ANTI_CLOGGING_TOKEN93 ||
14072 check_byte == ETAG_MULTI_LINK107 ||
14073 check_byte == ETAG_AKM_SUITE_SELECTOR114) {
14074 /* Add length check to avoid false detection */
14075 if (offset + etag_len + 2 <= len) {
14076 break;
14077 }
14078 }
14079 }
14080 }
14081 offset++;
14082 }
14083
14084 return offset - start_offset;
14085}
14086
14087static const value_string ff_sae_message_type_vals[] = {
14088 {1, "Commit" },
14089 {2, "Confirm" },
14090 {0, NULL((void*)0) }
14091};
14092
14093/*
14094 * We have to deal with the issue that an anti-clogging token may be in this
14095 * thing.
14096 */
14097static unsigned
14098add_ff_auth_sae(proto_tree *tree, tvbuff_t *tvb,
14099 packet_info *pinfo _U___attribute__((unused)), unsigned offset)
14100{
14101 unsigned alg, seq, status_code, len;
14102 alg = tvb_get_letohs(tvb, 0);
14103
14104 if (alg != AUTH_ALG_SAE3)
14105 return offset;
14106
14107 seq = tvb_get_letohs(tvb, 2);
14108 status_code = tvb_get_letohs(tvb, 4);
14109
14110 proto_tree_add_uint(tree, hf_ieee80211_ff_sae_message_type, tvb, 2, 2, seq);
14111
14112 if (seq == 1)
14113 {
14114 uint16_t group;
14115 unsigned sc_len, elt_len;
14116
14117 /*
14118 * Order is: Status code,
14119 * Finite Cyclic Group,
14120 * Anti-Clogging Token in some cases
14121 * Send-Confirm in some cases
14122 * Scalar in some cases
14123 * FFE in some cases
14124 * Confirm in some cases
14125 * Challenge Text in some cases
14126 * RSNE in some cases.
14127 * MDE in some cases.
14128 * Fast BSS TRansition ... in some cases.
14129 */
14130
14131 /* 76: Authentication is rejected because an Anti-Clogging Token is required (cf ieee80211_status_code) */
14132 /* These are present if status code is 0, 76, 77 or 126 */
14133 if (status_code == 0 || status_code == 76 || status_code == 77 ||
14134 status_code == 126)
14135 {
14136 group = tvb_get_letohs(tvb, offset);
14137 proto_tree_add_item(tree, hf_ieee80211_ff_finite_cyclic_group, tvb,
14138 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14139 offset += 2;
14140
14141
14142 /*
14143 * Now, get the fixed field length remaining. It will be divided up into
14144 * Anti-Clogging token, Scalar, FFE and some IEs.
14145 */
14146 len = find_fixed_field_len(tvb, offset);
14147 sc_len = get_scalar_len(group);
14148 elt_len = get_group_element_len(group);
14149
14150 /*
14151 * The first conditional captures the case where we have an error and
14152 * an anti-clogging token with Scalar Field and FFE.
14153 * The second handles the case where we have an error with only an
14154 * anti-clogging token.
14155 * The third conditional below is a way to avoid keeping state about
14156 * what was in a previous response!
14157 */
14158 if (((status_code == 76 || status_code == 126) &&
14159 ((len > (sc_len + elt_len)))) ||
14160 ((status_code == 76) && (len > 0) && (len < (sc_len + elt_len))) ||
14161 ((status_code == 0) && (len > (sc_len + elt_len)))) {
14162 unsigned anti_clogging_len;
14163 /*
14164 * Handle the anti-clogging field. There is an anti-clogging token
14165 * before the other two.
14166 */
14167 if (len > (sc_len + elt_len))
14168 anti_clogging_len = len - (sc_len + elt_len);
14169 else
14170 anti_clogging_len = len;
14171
14172 proto_tree_add_item(tree, hf_ieee80211_ff_sae_anti_clogging_token, tvb,
14173 offset, anti_clogging_len, ENC_NA0x00000000);
14174 offset += anti_clogging_len;
14175 }
14176
14177 if (sc_len == 0) {
14178 /* assume no anti-clogging token */
14179 if (!(len % 3))
14180 {
14181 sc_len = len / 3;
14182 }
14183 else
14184 {
14185 sc_len = len / 2;
14186 }
14187 elt_len = len - sc_len;
14188 }
14189
14190 /* Only present if status = 0 or 126 */
14191 if (status_code == 0 || status_code == 126) {
14192 proto_tree_add_item(tree, hf_ieee80211_ff_scalar, tvb, offset,
14193 sc_len, ENC_NA0x00000000);
14194 offset += sc_len;
14195
14196 proto_tree_add_item(tree, hf_ieee80211_ff_finite_field_element, tvb,
14197 offset, elt_len, ENC_NA0x00000000);
14198 offset += elt_len;
14199 }
14200 }
14201 }
14202 else if ((seq == 2) && (status_code == 0))
14203 {
14204 proto_tree_add_item(tree, hf_ieee80211_ff_send_confirm, tvb, 6, 2,
14205 ENC_LITTLE_ENDIAN0x80000000);
14206 offset += 2;
14207
14208 /* Check if there are additional elements */
14209 len = find_fixed_field_len(tvb, offset);
14210 proto_tree_add_item(tree, hf_ieee80211_ff_confirm, tvb, offset, len,
14211 ENC_NA0x00000000);
14212 offset += len;
14213 }
14214
14215 return offset;
14216}
14217
14218static unsigned
14219add_ff_auth_fils(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14220 unsigned offset)
14221{
14222 unsigned alg, seq, status_code;
14223 alg = tvb_get_letohs(tvb, 0);
14224
14225 if ((alg != AUTH_ALG_FILS_SK_WITH_PFS5) && (alg != AUTH_ALG_FILS_PK6))
14226 return offset;
14227
14228 seq = tvb_get_letohs(tvb, 2);
14229 status_code = tvb_get_letohs(tvb, 4);
14230
14231 if ((seq == 1) || (seq == 2 && status_code == 0)) {
14232 unsigned group = tvb_get_letohs(tvb, 6);
14233 unsigned elt_len;
14234 proto_tree_add_item(tree, hf_ieee80211_ff_finite_cyclic_group, tvb, 6, 2,
14235 ENC_LITTLE_ENDIAN0x80000000);
14236 offset = 8;
14237 elt_len = get_group_element_len(group);
14238
14239 proto_tree_add_item(tree, hf_ieee80211_ff_finite_field_element, tvb, offset,
14240 elt_len, ENC_NA0x00000000);
14241
14242 offset += elt_len;
14243 }
14244
14245 /* What about the other FILS case? */
14246
14247 return offset;
14248}
14249
14250/*
14251 * We handle different elements depending on whether the sequence number is
14252 * 1, 2 or 3.
14253 */
14254typedef struct ieee80211_pasn_data {
14255 unsigned pasn_seq;
14256 unsigned pasn_status_code;
14257} ieee80211_pasn_data_t;
14258
14259static ieee80211_pasn_data_t*
14260create_pasn_data(packet_info *pinfo, unsigned seq, unsigned status)
14261{
14262 ieee80211_pasn_data_t *pasn_data = NULL((void*)0);
14263
14264 pasn_data = wmem_new(pinfo->pool, ieee80211_pasn_data_t)((ieee80211_pasn_data_t*)wmem_alloc((pinfo->pool), sizeof(
ieee80211_pasn_data_t)))
;
14265
14266 if(pasn_data) {
14267 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, PASN_DATA_KEY, pasn_data);
14268 pasn_data->pasn_seq = seq;
14269 pasn_data->pasn_status_code = status;
14270 }
14271
14272 return pasn_data;
14273}
14274
14275static unsigned
14276add_ff_auth_pasn(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14277 unsigned offset)
14278{
14279 unsigned seq, status_code;
14280 ieee80211_pasn_data_t *pasn_data = NULL((void*)0);
14281
14282 seq = tvb_get_letohs(tvb, 2);
14283 status_code = tvb_get_letohs(tvb, 4);
14284
14285 pasn_data = create_pasn_data(pinfo, seq, status_code);
14286 if (!pasn_data) {
14287 /* Leave it undissected if we cannot get memory. */
14288 return offset + tvb_captured_length_remaining(tvb, offset);
14289 }
14290
14291 if (seq == 1) {
14292 /*
14293 * Contains RSN Info,
14294 * PASN field,
14295 * Wrapped Data may be present if the PASN element says so,
14296 * RSNXE may be present
14297 * Timeout Interval element may be present
14298 * Fragment element may be present if it was fragmented.
14299 */
14300 while (tvb_captured_length_remaining(tvb, offset)) {
14301 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14302 }
14303 } else if (seq == 2) {
14304 /* This test might not be needed */
14305 if (status_code != 0) {
14306 offset += tvb_captured_length_remaining(tvb, offset);
14307 return offset;
14308 }
14309 /*
14310 * RSN element is present.
14311 * PASN element is present if status == 0.
14312 * Wrapped Data element present if the PASN element says so.
14313 * ...
14314 */
14315 while (tvb_captured_length_remaining(tvb, offset)) {
14316 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14317 }
14318 } else if (seq == 3) {
14319 /*
14320 * Contains PASN element if status == 0
14321 * Contains Wrapped Data element if PASN element says so and status is 0.
14322 * Contains MC element
14323 * May contain fragment elements.
14324 */
14325 while (tvb_captured_length_remaining(tvb, offset)) {
14326 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
14327 }
14328 }
14329
14330 offset += tvb_captured_length_remaining(tvb, offset);
14331
14332 return offset;
14333}
14334
14335/*
14336 * Handle an Auth Frame. We need to be able to call this from several places.
14337 *
14338 * We should also handle the different auth types more correctly.
14339 */
14340static int
14341dissect_auth_frame(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb)
14342{
14343 int offset = 0;
14344 uint16_t auth_algorithm = tvb_get_letohs(tvb, offset);
14345
14346 add_ff_auth_alg(tree, tvb, pinfo, offset);
14347 offset += 2;
14348
14349 add_ff_auth_trans_seq(tree, tvb, pinfo, offset);
14350 offset += 2;
14351
14352 add_ff_status_code(tree, tvb, pinfo, offset);
14353 offset += 2;
14354
14355 switch (auth_algorithm) {
14356 case AUTH_ALG_SAE3:
14357 offset = add_ff_auth_sae(tree, tvb, pinfo, offset);
14358 break;
14359 case AUTH_ALG_FILS_PK6:
14360 case AUTH_ALG_FILS_SK_WITH_PFS5:
14361 offset = add_ff_auth_fils(tree, tvb, pinfo, offset);
14362 break;
14363 case AUTH_ALG_PASN7:
14364 case AUTH_ALG_EPPKE9:
14365 offset = add_ff_auth_pasn(tree, tvb, pinfo, offset);
14366 break;
14367 }
14368
14369 return offset;
14370}
14371
14372/*
14373 * If it is PASN wrapped data, handle it correctly, else defer to fils
14374 * wrapped data.
14375 */
14376static void
14377dissect_wrapped_data(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb,
14378 int offset, uint8_t ext_tag_len _U___attribute__((unused)))
14379{
14380 ieee80211_pasn_data_t *pasn_data =
14381 (ieee80211_pasn_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan,
14382 PASN_DATA_KEY);
14383
14384 if (pasn_data) {
14385 proto_tree *auth_tree = NULL((void*)0);
14386 proto_item *ai = NULL((void*)0);
14387 uint16_t frame_len = 0;
14388 tvbuff_t *new_tvb = NULL((void*)0);
14389
14390 switch (pasn_data->pasn_seq) {
14391 case 1:
14392 auth_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
14393 ett_pasn_auth_frame, &ai,
14394 "Authentication Frame");
14395 new_tvb = tvb_new_subset_remaining(tvb, offset);
14396 offset = dissect_auth_frame(auth_tree, pinfo, new_tvb);
14397 proto_item_set_len(ai, offset); /* This is correct */
14398 break;
14399
14400 case 2:
14401 /* This has two auth frames in it. */
14402 frame_len = tvb_get_letohs(tvb, offset);
14403 proto_tree_add_item(tree, hf_ieee80211_pasn_auth1_frame_len, tvb, offset,
14404 2, ENC_LITTLE_ENDIAN0x80000000);
14405 offset += 2;
14406 auth_tree = proto_tree_add_subtree(tree, tvb, offset, frame_len,
14407 ett_pasn_auth_frame, NULL((void*)0),
14408 "Authentication Frame 1");
14409 new_tvb = tvb_new_subset_length(tvb, offset, frame_len);
14410 offset += dissect_auth_frame(auth_tree, pinfo, new_tvb);
14411
14412 /* Second frame */
14413 frame_len = tvb_get_letohs(tvb, offset);
14414 proto_tree_add_item(tree, hf_ieee80211_pasn_auth2_frame_len, tvb, offset,
14415 2, ENC_LITTLE_ENDIAN0x80000000);
14416 offset += 2;
14417 auth_tree = proto_tree_add_subtree(tree, tvb, offset, frame_len,
14418 ett_pasn_auth_frame, NULL((void*)0),
14419 "Authentication Frame 2");
14420 new_tvb = tvb_new_subset_length(tvb, offset, frame_len);
14421 dissect_auth_frame(auth_tree, pinfo, new_tvb);
14422 break;
14423
14424 case 3:
14425 auth_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
14426 ett_pasn_auth_frame, &ai,
14427 "Authentication Frame");
14428 new_tvb = tvb_new_subset_remaining(tvb, offset);
14429 offset = dissect_auth_frame(auth_tree, pinfo, new_tvb);
14430 proto_item_set_len(ai, offset);
14431 break;
14432 }
14433 }
14434}
14435
14436#define FILS_REQ_PARAMS_FILS_CRITERIA0x01 0x01
14437#define FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02 0x02
14438#define FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04 0x04
14439#define FILS_REQ_PARAMS_RCPI_LIMIT0x08 0x08
14440#define FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10 0x10
14441#define FILS_REQ_PARAMS_RESERVED0xE0 0xE0
14442
14443#define FILS_REQ_PARAMS_FILS_CRITERIA_BSS_DELAY0x07 0x07
14444#define FILS_REQ_PARAMS_FILS_CRITERIA_PHY_SUPPORT0x38 0x38
14445#define FILS_REQ_PARAMS_FILS_CRITERIA_RESERVED0xC0 0xC0
14446
14447static void
14448dissect_fils_req_params(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)), tvbuff_t *tvb,
14449 int offset, uint8_t ext_tag_len _U___attribute__((unused)))
14450{
14451 uint8_t bitmap;
14452
14453 static int * const ieee80211_fils_req_params_paramter_control_bitmap[] = {
14454 &hf_ieee80211_fils_req_params_fils_criteria_present,
14455 &hf_ieee80211_fils_req_params_max_delay_limit_present,
14456 &hf_ieee80211_fils_req_params_minimum_data_rate_present,
14457 &hf_ieee80211_fils_req_params_rcpi_limit_present,
14458 &hf_ieee80211_fils_req_params_oui_response_criteria_present,
14459 &hf_ieee80211_fils_req_params_reserved,
14460 NULL((void*)0)
14461 };
14462
14463 static int * const ieee80211_fils_req_params_fils_criteria[] = {
14464 &hf_ieee80211_fils_req_params_fils_criteria_bss_delay,
14465 &hf_ieee80211_fils_req_params_fils_criteria_phy_support,
14466 &hf_ieee80211_fils_req_params_fils_criteria_reserved,
14467 NULL((void*)0)
14468 };
14469
14470 bitmap = tvb_get_uint8(tvb, offset);
14471 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_fils_req_params_parameter_control_bitmap,
14472 ett_ff_fils_req_params, ieee80211_fils_req_params_paramter_control_bitmap, ENC_LITTLE_ENDIAN0x80000000);
14473 offset += 1;
14474
14475 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_max_channel_time,
14476 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14477 offset +=1;
14478
14479 if(bitmap & FILS_REQ_PARAMS_FILS_CRITERIA0x01) {
14480 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_fils_req_params_fils_criteria,
14481 ett_ff_fils_req_params_fils_criteria, ieee80211_fils_req_params_fils_criteria, ENC_LITTLE_ENDIAN0x80000000);
14482 offset += 1;
14483 }
14484
14485 if(bitmap & FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02) {
14486 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_max_delay_limit,
14487 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14488 offset += 1;
14489 }
14490
14491 if(bitmap & FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04) {
14492 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_minimum_data_rate,
14493 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
14494 offset += 3;
14495 }
14496
14497 if(bitmap & FILS_REQ_PARAMS_RCPI_LIMIT0x08) {
14498 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_rcpi_limit,
14499 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
14500 offset += 1;
14501 }
14502
14503 if(bitmap & FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10) {
14504 proto_tree_add_item(tree, hf_ieee80211_fils_req_params_oui_response_criteria,
14505 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14506 //offset += 2;
14507 }
14508
14509}
14510
14511static unsigned
14512wnm_bss_trans_mgmt_query(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14513{
14514 int start = offset;
14515 int left;
14516 int tmp_sublen;
14517 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52 };
14518
14519
14520 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14521
14522 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_query_reason, tvb, offset, 1,
14523 ENC_NA0x00000000);
14524 offset += 1;
14525
14526 left = tvb_reported_length_remaining(tvb, offset);
14527 if (left > 0) {
14528 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14529 tvb, offset, left, ENC_NA0x00000000);
14530
14531 while (left > 0){
14532 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14533 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14534 break;
14535 }
14536 left -= (tmp_sublen + 2);
14537 offset += (tmp_sublen + 2);
14538 }
14539 }
14540
14541 return offset - start;
14542}
14543
14544
14545static unsigned
14546wnm_bss_trans_mgmt_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14547{
14548 int start = offset;
14549 uint8_t mode;
14550 int left = tvb_reported_length_remaining(tvb, offset);
14551 int tmp_sublen;
14552 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52, TAG_VENDOR_SPECIFIC_IE221};
14553
14554 static int * const ieee80211_ff_request_flags[] = {
14555 &hf_ieee80211_ff_request_mode_pref_cand,
14556 &hf_ieee80211_ff_request_mode_abridged,
14557 &hf_ieee80211_ff_request_mode_disassoc_imminent,
14558 &hf_ieee80211_ff_request_mode_bss_term_included,
14559 &hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
14560 &hf_ieee80211_ff_request_mode_link_removal_imminent,
14561 &hf_ieee80211_ff_request_mode_reserved,
14562 NULL((void*)0)
14563 };
14564
14565 if (left < 5) {
14566 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14567 return offset - start;
14568 }
14569
14570 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14571
14572 mode = tvb_get_uint8(tvb, offset);
14573 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_ff_request_flags, ENC_LITTLE_ENDIAN0x80000000);
14574 offset += 1;
14575
14576 proto_tree_add_item(tree, hf_ieee80211_ff_disassoc_timer, tvb, offset, 2,
14577 ENC_LITTLE_ENDIAN0x80000000);
14578 offset += 2;
14579
14580 proto_tree_add_item(tree, hf_ieee80211_ff_validity_interval, tvb, offset, 1,
14581 ENC_LITTLE_ENDIAN0x80000000);
14582 offset += 1;
14583 left -= 5;
14584
14585 if (mode & 0x08) {
14586 proto_item *item;
14587 proto_tree *sub_tree;
14588 uint8_t sub_id, sub_len;
14589
14590 // BSS termination Duration sub element is the same as the neighbor report sub element
14591 if (left < 12) {
14592 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14593 return offset - start;
14594 }
14595
14596 sub_tree = proto_tree_add_subtree(tree, tvb, offset, 12, ett_tag_neighbor_report_subelement_tree,
14597 NULL((void*)0), "BSS Termination Duration");
14598
14599 sub_id = tvb_get_uint8(tvb, offset);
14600 item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_id,
14601 tvb, offset, 1, ENC_NA0x00000000);
14602 offset += 1;
14603 if (sub_id != NR_SUB_ID_BSS_TER_DUR4) {
14604 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
14605 "Incorrect BSS Termination Duration subelement ID");
14606 }
14607
14608 sub_len = tvb_get_uint8(tvb, offset);
14609 item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_length,
14610 tvb, offset, 1, ENC_NA0x00000000);
14611 offset += 1;
14612 if (sub_len != 10) {
14613 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
14614 "Incorrect BSS Termination Duration subelement length");
14615 }
14616
14617 proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf,
14618 tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
14619 offset += 8;
14620 proto_tree_add_item(sub_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_dur,
14621 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
14622 offset += 2;
14623 left -= 12;
14624 }
14625
14626 if (mode & 0x10) {
14627 uint8_t url_len;
14628
14629 url_len = tvb_get_uint8(tvb, offset);
14630 if (left < url_len) {
14631 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
14632 return offset - start;
14633 }
14634
14635 proto_tree_add_item(tree, hf_ieee80211_ff_url_len, tvb, offset, 1,
14636 ENC_LITTLE_ENDIAN0x80000000);
14637 offset += 1;
14638 proto_tree_add_item(tree, hf_ieee80211_ff_url, tvb, offset, url_len,
14639 ENC_ASCII0x00000000);
14640 offset += url_len;
14641 left -= url_len + 1;
14642 }
14643
14644 if (left > 0) {
14645 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14646 tvb, offset, left, ENC_NA0x00000000);
14647
14648 while (left > 0){
14649 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14650 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14651 break;
14652 }
14653 left -= (tmp_sublen + 2);
14654 offset += (tmp_sublen + 2);
14655 }
14656 }
14657
14658 return offset - start;
14659}
14660
14661
14662static unsigned
14663wnm_bss_trans_mgmt_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14664{
14665 int start = offset;
14666 uint8_t code;
14667 int left;
14668 int tmp_sublen;
14669 const uint8_t ids[] = { TAG_NEIGHBOR_REPORT52, TAG_VENDOR_SPECIFIC_IE221 };
14670
14671 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14672 code = tvb_get_uint8(tvb, offset);
14673 offset += add_ff_bss_transition_status_code(tree, tvb, pinfo, offset);
14674 offset += add_ff_bss_termination_delay(tree, tvb, pinfo, offset);
14675 if (!code) {
14676 proto_tree_add_item(tree, hf_ieee80211_ff_target_bss,
14677 tvb, offset, 6, ENC_NA0x00000000);
14678 offset += 6;
14679 }
14680 left = tvb_reported_length_remaining(tvb, offset);
14681 if (left > 0) {
14682 proto_tree_add_item(tree, hf_ieee80211_ff_bss_transition_candidate_list_entries,
14683 tvb, offset, left, ENC_NA0x00000000);
14684 while (left > 0){
14685 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
14686 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
14687 break;
14688 }
14689 left -= (tmp_sublen + 2);
14690 offset += (tmp_sublen + 2);
14691 }
14692 }
14693
14694 return offset - start;
14695}
14696
14697static unsigned
14698wnm_sleep_mode_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14699{
14700 int start = offset;
14701 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14702 return offset - start;
14703}
14704
14705static unsigned
14706wnm_sleep_mode_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14707{
14708 int start = offset;
14709 uint16_t key_data_len;
14710 int left;
14711
14712 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14713 key_data_len = tvb_get_letohs(tvb, offset);
14714 offset += add_ff_key_data_length(tree, tvb, pinfo, offset);
14715 left = tvb_reported_length_remaining(tvb, offset);
14716 if (left < key_data_len) {
14717 expert_add_info(pinfo, tree, &ei_ieee80211_tag_wnm_sleep_mode_no_key_data);
14718 return offset - start;
14719 }
14720 proto_tree_add_item(tree, hf_ieee80211_ff_key_data, tvb, offset,
14721 key_data_len, ENC_NA0x00000000);
14722 offset += key_data_len;
14723 return offset - start;
14724}
14725
14726static unsigned
14727wnm_tfs_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14728{
14729 int start = offset;
14730 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14731 return offset - start;
14732}
14733
14734static unsigned
14735wnm_tfs_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14736{
14737 int start = offset;
14738 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14739 return offset - start;
14740}
14741
14742#define AP_DESCRIPTOR0 0
14743#define FIRMWARE_VERSION_CURRENT1 1
14744#define FIRMWARE_VERSION_NEW2 2
14745
14746static unsigned
14747dissect_wnm_subelements(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
14748 int offset) {
14749 unsigned sub_elt_id = tvb_get_uint8(tvb, offset);
14750 unsigned sub_elt_len = tvb_get_uint8(tvb, offset + 1);
14751
14752 proto_tree_add_item(tree, hf_ieee80211_wnm_sub_elt_id, tvb, offset, 1, ENC_NA0x00000000);
14753 offset++;
14754
14755 proto_tree_add_item(tree, hf_ieee80211_wnm_sub_elt_len, tvb, offset, 1, ENC_NA0x00000000);
14756 offset++;
14757
14758 switch (sub_elt_id) {
14759 case AP_DESCRIPTOR0:
14760
14761 break;
14762
14763 case FIRMWARE_VERSION_CURRENT1:
14764
14765 break;
14766
14767 case FIRMWARE_VERSION_NEW2:
14768
14769 break;
14770 }
14771
14772 offset += sub_elt_len;
14773 return offset;
14774}
14775
14776static unsigned
14777wnm_channel_usage_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14778{
14779 int start = offset;
14780
14781 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14782
14783 return offset - start;
14784}
14785
14786static unsigned
14787wnm_channel_usage_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14788{
14789 int start = offset, i;
14790 uint8_t id, len;
14791 proto_tree *subtree;
14792
14793 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14794
14795 /* Parse multiple chan usage elements */
14796 id = tvb_get_uint8(tvb, offset);
14797 while (id == TAG_CHANNEL_USAGE97){
14798 len = tvb_get_uint8(tvb, offset + 1);
14799 subtree = proto_tree_add_subtree(tree, tvb, offset, len + 2,
14800 ett_chan_usage,
14801 NULL((void*)0), "Channel Usage");
14802 proto_tree_add_item(subtree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_NA0x00000000);
14803 offset += 1;
14804 proto_tree_add_item(subtree, hf_ieee80211_tag_length, tvb, offset, 1, ENC_NA0x00000000);
14805 offset += 1;
14806 proto_tree_add_item(subtree, hf_ieee80211_tag_channel_usage_mode, tvb, offset, 1, ENC_NA0x00000000);
14807 offset += 1;
14808 len -= 1;
14809
14810 for (i = 0; i < (len / 2); i++) {
14811 offset += add_ff_operating_class(subtree, tvb, pinfo, offset);
14812 offset += add_ff_channel(subtree, tvb, pinfo, offset);
14813 }
14814 id = tvb_get_uint8(tvb, offset);
14815 }
14816 offset += add_ff_country_str(tree, tvb, pinfo, offset);
14817
14818 return offset - start;
14819}
14820
14821static unsigned
14822wnm_notification_req(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14823{
14824 int start = offset;
14825 int len = 0;
14826 uint8_t wnm_type = 0;
14827 uint8_t wnm_sub_elt = 0;
14828
14829 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14830 wnm_type = tvb_get_uint8(tvb, offset);
14831 offset += add_ff_wnm_notification_type(tree, tvb, pinfo, offset);
14832 len = tvb_reported_length_remaining(tvb, offset);
14833
14834 if (wnm_type == 0) {
14835 int offset_end = offset + len;
14836 while (offset < offset_end) {
14837 int start_offset = offset;
14838 proto_tree *wnm_list = NULL((void*)0);
14839 proto_item *wnm_item = NULL((void*)0);
14840 wnm_list = proto_tree_add_subtree_format(tree, tvb, offset, -1,
14841 ett_wnm_notif_subelt,
14842 &wnm_item, "WNM Subelement %d", wnm_sub_elt);
14843 offset = dissect_wnm_subelements(wnm_list, tvb, pinfo, offset);
14844 proto_item_set_len(wnm_item, offset - start_offset);
14845 }
14846 }
14847 return offset - start;
14848}
14849
14850static unsigned
14851wnm_notification_resp(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14852{
14853 int start = offset;
14854
14855 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14856 proto_tree_add_item(tree, hf_ieee80211_ff_wnm_notification_response_status,
14857 tvb, offset, 1, ENC_NA0x00000000);
14858 offset += 1;
14859
14860 return offset - start;
14861}
14862
14863static unsigned
14864add_ff_action_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14865{
14866 uint8_t code;
14867 unsigned start = offset;
14868
14869 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14870 code = tvb_get_uint8(tvb, offset);
14871 offset += add_ff_wnm_action_code(tree, tvb, pinfo, offset);
14872 switch (code) {
14873 case WNM_EVENT_REQ:
14874 case WNM_EVENT_REPORT:
14875 case WNM_DIAGNOSTIC_REQ:
14876 case WNM_DIAGNOSTIC_REPORT:
14877 case WNM_LOCATION_CFG_REQ:
14878 case WNM_LOCATION_CFG_RESP:
14879 case WNM_FMS_REQ:
14880 case WNM_FMS_RESP:
14881 case WNM_DMS_REQ:
14882 case WNM_DMS_RESP:
14883 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14884 break;
14885 case WNM_BSS_TRANS_MGMT_QUERY:
14886 offset += wnm_bss_trans_mgmt_query(tree, tvb, pinfo, offset);
14887 break;
14888 case WNM_BSS_TRANS_MGMT_REQ:
14889 offset += wnm_bss_trans_mgmt_req(tree, tvb, pinfo, offset);
14890 break;
14891 case WNM_BSS_TRANS_MGMT_RESP:
14892 offset += wnm_bss_trans_mgmt_resp(tree, tvb, pinfo, offset);
14893 break;
14894 case WNM_TFS_REQ:
14895 offset += wnm_tfs_req(tree, tvb, pinfo, offset);
14896 break;
14897 case WNM_TFS_RESP:
14898 offset += wnm_tfs_resp(tree, tvb, pinfo, offset);
14899 break;
14900 case WNM_SLEEP_MODE_REQ:
14901 offset += wnm_sleep_mode_req(tree, tvb, pinfo, offset);
14902 break;
14903 case WNM_SLEEP_MODE_RESP:
14904 offset += wnm_sleep_mode_resp(tree, tvb, pinfo, offset);
14905 break;
14906 case WNM_CHANNEL_USAGE_REQ:
14907 offset += wnm_channel_usage_req(tree, tvb, pinfo, offset);
14908 break;
14909 case WNM_CHANNEL_USAGE_RESP:
14910 offset += wnm_channel_usage_resp(tree, tvb, pinfo, offset);
14911 break;
14912 case WNM_NOTIFICATION_REQ:
14913 offset += wnm_notification_req(tree, tvb, pinfo, offset);
14914 break;
14915 case WNM_NOTIFICATION_RESP:
14916 offset += wnm_notification_resp(tree, tvb, pinfo, offset);
14917 break;
14918 }
14919
14920 return offset - start; /* Size of fixed fields */
14921}
14922
14923static unsigned
14924add_ff_action_unprotected_wnm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14925{
14926 uint8_t code;
14927 unsigned start = offset;
14928
14929 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14930 code = tvb_get_uint8(tvb, offset);
14931 offset += add_ff_unprotected_wnm_action_code(tree, tvb, pinfo, offset);
14932
14933 switch (code) {
14934 case UNPROTECTED_WNM_TIM:
14935 offset += add_ff_check_beacon(tree, tvb, pinfo, offset);
14936 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
14937 offset += add_ff_tod(tree, tvb, pinfo, offset);
14938 offset += add_ff_toa(tree, tvb, pinfo, offset);
14939 offset += add_ff_max_tod_err(tree, tvb, pinfo, offset);
14940 offset += add_ff_max_toa_err(tree, tvb, pinfo, offset);
14941 break;
14942 case UNPROTECTED_WNM_TIMING_MEASUREMENT:
14943 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14944 offset += add_ff_followup_dialog_token(tree, tvb, pinfo, offset);
14945 break;
14946 }
14947
14948 return offset - start; /* Size of fixed fields */
14949}
14950
14951static unsigned
14952add_ff_action_tdls(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
14953{
14954 uint8_t code;
14955 uint16_t status;
14956 unsigned start = offset;
14957
14958 offset += add_ff_category_code(tree, tvb, pinfo, offset);
14959 code = tvb_get_uint8(tvb, offset);
14960
14961 /* Extract keys for dot11decrypt engine */
14962 try_scan_tdls_keys(tvb, pinfo, offset);
14963
14964 offset += add_ff_tdls_action_code(tree, tvb, pinfo, offset);
14965 switch (code) {
14966 case TDLS_SETUP_REQUEST0:
14967 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14968 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
14969 break;
14970 case TDLS_SETUP_RESPONSE1:
14971 status = tvb_get_letohs(tvb, offset);
14972 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14973 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14974 if (tvb_reported_length_remaining(tvb, offset) < 2) {
14975 if (status == 0) {
14976 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_response_malformed);
14977 }
14978 break;
14979 }
14980 offset += add_ff_cap_info(tree, tvb, pinfo, offset);
14981 break;
14982 case TDLS_SETUP_CONFIRM2:
14983 status = tvb_get_letohs(tvb, offset);
14984 offset += add_ff_status_code(tree, tvb, pinfo, offset);
14985 if (tvb_reported_length_remaining(tvb, offset) < 1) {
14986 if (status == 0) {
14987 expert_add_info(pinfo, tree, &ei_ieee80211_tdls_setup_confirm_malformed);
14988 }
14989 break;
14990 }
14991 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14992 break;
14993 case TDLS_TEARDOWN3:
14994 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
14995 break;
14996 case TDLS_PEER_TRAFFIC_INDICATION4:
14997 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
14998 break;
14999 case TDLS_CHANNEL_SWITCH_REQUEST5:
15000 offset += add_ff_target_channel(tree, tvb, pinfo, offset);
15001 offset += add_ff_operating_class(tree, tvb, pinfo, offset);
15002 break;
15003 case TDLS_CHANNEL_SWITCH_RESPONSE6:
15004 offset += add_ff_status_code(tree, tvb, pinfo, offset);
15005 break;
15006 case TDLS_PEER_PSM_REQUEST7:
15007 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
15008 break;
15009 case TDLS_PEER_PSM_RESPONSE8:
15010 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
15011 offset += add_ff_status_code(tree, tvb, pinfo, offset);
15012 break;
15013 case TDLS_PEER_TRAFFIC_RESPONSE9:
15014 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
15015 break;
15016 case TDLS_DISCOVERY_REQUEST10:
15017 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
15018 break;
15019 }
15020
15021 return offset - start; /* Size of fixed fields */
15022}
15023
15024static unsigned
15025add_ff_action_mgmt_notification(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
15026{
15027 unsigned start = offset;
15028
15029 offset += add_ff_category_code(tree, tvb, pinfo, offset);
15030 offset += add_ff_wme_action_code(tree, tvb, pinfo, offset);
15031 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
15032 offset += add_ff_wme_status_code(tree, tvb, pinfo, offset);
15033
15034 return offset - start; /* Size of fixed fields */
15035}
15036
15037static unsigned
15038add_ff_action_vendor_specific(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
15039{
15040 unsigned start = offset;
15041 uint32_t oui;
15042 tvbuff_t *vendor_tvb;
15043 int dissected;
15044
15045 offset += add_ff_category_code(tree, tvb, pinfo, offset);
15046 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
15047 offset += 3;
15048
15049 vendor_tvb = tvb_new_subset_remaining(tvb, offset);
15050 dissected = dissector_try_uint_with_data(vendor_specific_action_table, oui, vendor_tvb, pinfo, tree, false0, NULL((void*)0));
15051 if (dissected <= 0)
15052 {
15053 call_data_dissector(vendor_tvb, pinfo, tree);
15054 /* Skip the whole TVB because we don't know its format */
15055 dissected = tvb_reported_length_remaining(vendor_tvb, 0);
15056 }
15057
15058 offset += dissected;
15059
15060 return offset - start; /* Size of fixed fields */
15061}
15062
15063static unsigned
15064add_ff_action_ht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
15065{
15066 unsigned start = offset;
15067 uint8_t n_sta, i;
15068 mimo_control_t mimo_cntrl;
15069
15070 offset += add_ff_category_code(tree, tvb, pinfo, offset);
15071 offset += add_ff_ht_action_code(tree, tvb, pinfo, offset);
15072
15073 switch (tvb_get_uint8(tvb, offset - 1)) {
15074 case HT_ACTION_NOTIFY_CHAN_WIDTH0:
15075 offset += add_ff_channel_width(tree, tvb, pinfo, offset);
15076 break;
15077 case HT_ACTION_SM_PWR_SAVE1:
15078 offset += add_ff_sm_pwr_cntrl(tree, tvb, pinfo, offset);
15079 break;
15080 case HT_ACTION_PSMP_ACTION2:
15081 n_sta = tvb_get_uint8(tvb, offset);
15082 offset += add_ff_psmp_param_set(tree, tvb, pinfo, offset);
15083 for (i = 0; i < (n_sta & 0x0F); i++) {
15084 offset += add_ff_psmp_sta_info(tree, tvb, pinfo, offset);
15085 }
15086 break;
15087 case HT_ACTION_SET_PCO_PHASE3:
15088 offset += add_ff_pco_phase_cntrl(tree, tvb, pinfo, offset);
15089 break;
15090 case HT_ACTION_MIMO_CSI4:
15091 mimo_cntrl = get_mimo_control(tvb, offset);
15092 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
15093 offset += add_mimo_csi_matrices_report(tree, tvb, offset, mimo_cntrl);
15094 break;
15095 case HT_ACTION_MIMO_BEAMFORMING5:
15096 mimo_cntrl = get_mimo_control(tvb, offset);
15097 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
15098 offset += add_mimo_beamforming_feedback_report(tree, tvb, offset,
15099 mimo_cntrl);
15100 break;
15101 case HT_ACTION_MIMO_COMPRESSED_BEAMFORMING6:
15102 mimo_cntrl = get_mimo_control(tvb, offset);
15103 offset += add_ff_mimo_cntrl(tree, tvb, pinfo, offset);
15104 offset += add_mimo_compressed_beamforming_feedback_report(tree, tvb,
15105 offset,
15106 mimo_cntrl);
15107 break;
15108 case HT_ACTION_ANT_SEL_FEEDBACK7:
15109 offset += add_ff_ant_selection(tree, tvb, pinfo, offset);
15110 break;
15111 case HT_ACTION_HT_INFO_EXCHANGE8:
15112 offset += add_ff_ht_information(tree, tvb, pinfo, offset);
15113 break;
15114 }
15115
15116 return offset - start;
15117}
15118
15119static unsigned
15120add_ff_beacon_interval_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15121{
15122 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bic,
15123 ett_bic_tree, ieee80211_ff_bic_fields,
15124 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15125
15126 return 6;
15127}
15128
15129static unsigned
15130add_ff_beamforming_ctrl(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset, bool_Bool isGrant)
15131{
15132 uint16_t bf_field = tvb_get_letohs(tvb, offset);
15133 bool_Bool isInit = (bf_field & 0x2) >> 1;
15134 bool_Bool isResp = (bf_field & 0x4) >> 2;
15135 static int * const ieee80211_ff_beamforming_ctrl[] = {
15136 &hf_ieee80211_ff_bf_train,
15137 &hf_ieee80211_ff_bf_is_init,
15138 &hf_ieee80211_ff_bf_is_resp,
15139 &hf_ieee80211_ff_bf_rxss_len,
15140 &hf_ieee80211_ff_bf_rxss_rate,
15141 &hf_ieee80211_ff_bf_b10b15,
15142 NULL((void*)0)
15143 };
15144
15145 static int * const ieee80211_ff_beamforming_ctrl_grant[] = {
15146 &hf_ieee80211_ff_bf_train,
15147 &hf_ieee80211_ff_bf_is_init,
15148 &hf_ieee80211_ff_bf_is_resp,
15149 &hf_ieee80211_ff_bf_num_sectors,
15150 &hf_ieee80211_ff_bf_num_rx_dmg_ants,
15151 &hf_ieee80211_ff_bf_b12b15,
15152 NULL((void*)0)
15153 };
15154
15155 if((isInit==true1) && (isResp==true1) && isGrant) {
15156 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bf,
15157 ett_bf_tree, ieee80211_ff_beamforming_ctrl_grant,
15158 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15159 } else {
15160 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_bf,
15161 ett_bf_tree, ieee80211_ff_beamforming_ctrl,
15162 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15163 }
15164 return 2;
15165}
15166
15167static unsigned
15168add_ff_dynamic_allocation(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15169{
15170 static int * const ieee80211_ff_dynamic_allocation[] = {
15171 &hf_ieee80211_ff_TID,
15172 &hf_ieee80211_ff_alloc_type,
15173 &hf_ieee80211_ff_src_aid,
15174 &hf_ieee80211_ff_dest_aid,
15175 &hf_ieee80211_ff_alloc_duration,
15176 &hf_ieee80211_ff_b39,
15177 NULL((void*)0)
15178 };
15179
15180 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_dynamic_allocation,
15181 ett_dynamic_alloc_tree, ieee80211_ff_dynamic_allocation,
15182 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15183
15184 return 5;
15185}
15186
15187static unsigned
15188add_ff_beamformed_link(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15189{
15190 static int * const ieee80211_ff_beamformed_link[] = {
15191 &hf_ieee80211_ff_blm_unit_index,
15192 &hf_ieee80211_ff_blm_maint_value,
15193 &hf_ieee80211_ff_blm_is_master,
15194 NULL((void*)0)
15195 };
15196
15197 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_blm,
15198 ett_blm_tree, ieee80211_ff_beamformed_link,
15199 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15200 return 1;
15201}
15202
15203static unsigned
15204add_ff_BRP_request(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15205{
15206 static int * const ieee80211_ff_BRP_request[] = {
15207 &hf_ieee80211_ff_brp_L_RX,
15208 &hf_ieee80211_ff_brp_TX_TRN_REQ,
15209 &hf_ieee80211_ff_brp_MID_REQ,
15210 &hf_ieee80211_ff_brp_BC_REQ,
15211 &hf_ieee80211_ff_brp_MID_GRANT,
15212 &hf_ieee80211_ff_brp_BC_GRANT,
15213 &hf_ieee80211_ff_brp_chan_FBCK_CAP,
15214 &hf_ieee80211_ff_brp_tx_sector,
15215 &hf_ieee80211_ff_brp_other_aid,
15216 &hf_ieee80211_ff_brp_tx_antenna,
15217 &hf_ieee80211_ff_brp_reserved,
15218 NULL((void*)0)
15219 };
15220
15221 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_brp,
15222 ett_brp_tree, ieee80211_ff_BRP_request,
15223 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15224 return 4;
15225}
15226
15227static unsigned
15228add_ff_sector_sweep_feedback_from_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15229{
15230 static int * const ieee80211_ff_sector_sweep_feedback_from_iss[] = {
15231 &hf_ieee80211_ff_sswf_total_sectors,
15232 &hf_ieee80211_ff_sswf_num_rx_dmg_ants,
15233 &hf_ieee80211_ff_sswf_reserved1,
15234 &hf_ieee80211_ff_sswf_poll_required,
15235 &hf_ieee80211_ff_sswf_reserved2,
15236 NULL((void*)0)
15237 };
15238
15239 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_sswf,
15240 ett_sswf_tree, ieee80211_ff_sector_sweep_feedback_from_iss,
15241 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15242 return 3;
15243}
15244
15245static unsigned
15246add_ff_sector_sweep_feedback_to_iss(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15247{
15248 static int * const ieee80211_ff_sector_sweep_feedback_to_iss[] = {
15249 &hf_ieee80211_ff_sswf_sector_select,
15250 &hf_ieee80211_ff_sswf_dmg_antenna_select,
15251 &hf_ieee80211_ff_sswf_snr_report,
15252 &hf_ieee80211_ff_sswf_poll_required,
15253 &hf_ieee80211_ff_sswf_reserved2,
15254 NULL((void*)0)
15255 };
15256
15257 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_sswf,
15258 ett_sswf_tree, ieee80211_ff_sector_sweep_feedback_to_iss,
15259 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15260 return 3;
15261}
15262
15263static unsigned
15264add_ff_sector_sweep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15265{
15266 static int * const ieee80211_ff_sector_sweep[] = {
15267 &hf_ieee80211_ff_ssw_direction,
15268 &hf_ieee80211_ff_ssw_cdown,
15269 &hf_ieee80211_ff_ssw_sector_id,
15270 &hf_ieee80211_ff_ssw_dmg_ant_id,
15271 &hf_ieee80211_ff_ssw_rxss_len,
15272 NULL((void*)0)
15273 };
15274
15275 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_ssw,
15276 ett_ssw_tree, ieee80211_ff_sector_sweep,
15277 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15278 return 3;
15279}
15280
15281static unsigned
15282add_ff_dmg_params(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15283{
15284 static int * const ieee80211_ff_dmg_params[] = {
15285 &hf_ieee80211_ff_dmg_params_bss,
15286 &hf_ieee80211_ff_dmg_params_cbap_only,
15287 &hf_ieee80211_ff_dmg_params_cbap_src,
15288 &hf_ieee80211_ff_dmg_params_privacy,
15289 &hf_ieee80211_ff_dmg_params_policy,
15290 &hf_ieee80211_ff_dmg_params_spec_mgmt,
15291 &hf_ieee80211_ff_dmg_params_radio_measure,
15292 NULL((void*)0)
15293 };
15294
15295 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_dmg_params,
15296 ett_dmg_params_tree, ieee80211_ff_dmg_params,
15297 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15298 return 1;
15299}
15300
15301static unsigned
15302add_ff_cc_field(proto_tree *tree, tvbuff_t *tvb, int offset, bool_Bool dis)
15303{
15304 proto_item *cc_item = proto_tree_add_item(tree, hf_ieee80211_ff_cc, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
15305 proto_tree *cc_tree = proto_item_add_subtree(cc_item, ett_cc_tree);
15306 uint64_t cc_field;
15307 if(dis) {
15308 proto_tree_add_item(cc_tree, hf_ieee80211_ff_cc_abft_resp_addr, tvb, offset, 6, ENC_NA0x00000000);
15309 } else {
15310 cc_field = tvb_get_letoh64(tvb, offset);
15311 /*TODO : Add support of bitmask for FT_(U)INT64 */
15312 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_sp_duration, tvb, offset, 1, (uint32_t)(cc_field & 0xff));
15313 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));
15314 proto_tree_add_uint(cc_tree, hf_ieee80211_ff_cc_role, tvb, offset+7, 1, (uint32_t)((cc_field & UINT64_C(0x0300000000000000)0x0300000000000000UL) >> 56));
15315 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));
15316 }
15317 return 8;
15318}
15319
15320
15321static unsigned
15322add_ff_band_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15323{
15324 proto_tree_add_item(tree, hf_ieee80211_ff_band_id, tvb, offset, 1, ENC_NA0x00000000);
15325 return 1;
15326}
15327
15328static unsigned
15329add_ff_subject_address(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15330{
15331 proto_tree_add_item(tree, hf_ieee80211_ff_subject_address, tvb, offset, 6, ENC_NA0x00000000);
15332 return 6;
15333}
15334
15335static unsigned
15336add_ff_handover_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15337{
15338 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reason, tvb, offset, 1, ENC_NA0x00000000);
15339 return 1;
15340}
15341
15342static unsigned
15343add_ff_handover_remaining_bi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15344{
15345 proto_tree_add_item(tree, hf_ieee80211_ff_handover_remaining_bi, tvb, offset, 1, ENC_NA0x00000000);
15346 return 1;
15347}
15348
15349static unsigned
15350add_ff_handover_result(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15351{
15352 proto_tree_add_item(tree, hf_ieee80211_ff_handover_result, tvb, offset, 1, ENC_NA0x00000000);
15353 return 1;
15354}
15355
15356static unsigned
15357add_ff_handover_reject_reason(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15358{
15359 proto_tree_add_item(tree, hf_ieee80211_ff_handover_reject_reason, tvb, offset, 1, ENC_NA0x00000000);
15360 return 1;
15361}
15362
15363static unsigned
15364add_ff_destination_reds_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15365{
15366 proto_tree_add_item(tree, hf_ieee80211_ff_destination_reds_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15367 return 2;
15368}
15369
15370static unsigned
15371add_ff_destination_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15372{
15373 proto_tree_add_item(tree, hf_ieee80211_ff_destination_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15374 return 2;
15375}
15376
15377static unsigned
15378add_ff_relay_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15379{
15380 proto_tree_add_item(tree, hf_ieee80211_ff_relay_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15381 return 2;
15382}
15383
15384static unsigned
15385add_ff_source_aid(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15386{
15387 proto_tree_add_item(tree, hf_ieee80211_ff_source_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15388 return 2;
15389}
15390
15391static unsigned
15392add_ff_timing_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15393{
15394 proto_tree_add_item(tree, hf_ieee80211_ff_timing_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15395 return 2;
15396}
15397
15398static unsigned
15399add_ff_sampling_frequency_offset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15400{
15401 proto_tree_add_item(tree, hf_ieee80211_ff_sampling_frequency_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15402 return 2;
15403}
15404
15405static unsigned
15406add_ff_relay_operation_type(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15407{
15408 proto_tree_add_item(tree, hf_ieee80211_ff_relay_operation_type, tvb, offset, 1, ENC_NA0x00000000);
15409 return 1;
15410}
15411
15412static unsigned
15413add_ff_fst_action_code(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15414{
15415 proto_tree_add_item(tree, hf_ieee80211_ff_fst_action_code, tvb, offset, 1, ENC_NA0x00000000);
15416 return 1;
15417}
15418
15419static unsigned
15420add_ff_robust_av_streaming_action_code(proto_tree *tree, tvbuff_t *tvb,
15421 packet_info *pinfo _U___attribute__((unused)), int offset)
15422{
15423 proto_tree_add_item(tree, hf_ieee80211_ff_robust_av_streaming_action_code,
15424 tvb, offset, 1, ENC_NA0x00000000);
15425 return 1;
15426}
15427
15428static unsigned
15429add_ff_llt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15430{
15431 proto_tree_add_item(tree, hf_ieee80211_ff_llt, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15432 return 4;
15433}
15434
15435static unsigned
15436add_ff_fsts_id(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15437{
15438 proto_tree_add_item(tree, hf_ieee80211_ff_fsts_id, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
15439 return 4;
15440}
15441
15442static unsigned
15443add_ff_oct_mmpdu(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15444{
15445 unsigned start = offset;
15446 unsigned len = tvb_get_letohs(tvb, offset);
15447 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_len, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15448 offset += 2;
15449 proto_tree_add_item(tree, hf_ieee80211_ff_mmpdu_ctrl, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15450 offset += 2;
15451 proto_tree_add_item(tree, hf_ieee80211_ff_oct_mmpdu, tvb, offset, len, ENC_NA0x00000000);
15452 offset += len;
15453 return offset - start;
15454}
15455
15456static int * const eht_eml_control_field_mode_headers[] = {
15457 &hf_ieee80211_eht_eml_control_emlsr_mode,
15458 &hf_ieee80211_eht_eml_control_emlmr_mode,
15459 &hf_ieee80211_eht_eml_control_emlsr_para_update_control,
15460 &hf_ieee80211_eht_eml_control_device_coexist_activities,
15461 &hf_ieee80211_eht_eml_control_reserved,
15462 NULL((void*)0)
15463};
15464
15465static int * const eht_emlsr_para_update_headers[] = {
15466 &hf_ieee80211_eht_emlsr_para_update_padding_delay,
15467 &hf_ieee80211_eht_emlsr_para_update_tran_delay,
15468 &hf_ieee80211_eht_emlsr_para_update_reserved,
15469 NULL((void*)0)
15470};
15471
15472static int * const eht_eml_control_mcs_map_count_headers[] = {
15473 &hf_ieee80211_eht_eml_control_mcs_map_count_bw,
15474 &hf_ieee80211_eht_eml_control_mcs_map_count_reserved,
15475 NULL((void*)0)
15476};
15477
15478static const value_string eht_eml_control_mcs_map_count_bw[] = {
15479 {0x00, "80 MHz"},
15480 {0x01, "160 MHz"},
15481 {0x02, "320 MHz"},
15482 {0, NULL((void*)0)}
15483};
15484
15485static int * const eht_le_80_mcs_map_hdrs[] = {
15486 &hf_ieee80211_eht_le_80_rx_max_nss_0_9,
15487 &hf_ieee80211_eht_le_80_tx_max_nss_0_9,
15488 &hf_ieee80211_eht_le_80_rx_max_nss_10_11,
15489 &hf_ieee80211_eht_le_80_tx_max_nss_10_11,
15490 &hf_ieee80211_eht_le_80_rx_max_nss_12_13,
15491 &hf_ieee80211_eht_le_80_tx_max_nss_12_13,
15492 NULL((void*)0)
15493};
15494
15495static int * const eht_160_mcs_map_hdrs[] = {
15496 &hf_ieee80211_eht_160_rx_max_nss_0_9,
15497 &hf_ieee80211_eht_160_tx_max_nss_0_9,
15498 &hf_ieee80211_eht_160_rx_max_nss_10_11,
15499 &hf_ieee80211_eht_160_tx_max_nss_10_11,
15500 &hf_ieee80211_eht_160_rx_max_nss_12_13,
15501 &hf_ieee80211_eht_160_tx_max_nss_12_13,
15502 NULL((void*)0)
15503};
15504
15505static int * const eht_320_mcs_map_hdrs[] = {
15506 &hf_ieee80211_eht_320_rx_max_nss_0_9,
15507 &hf_ieee80211_eht_320_tx_max_nss_0_9,
15508 &hf_ieee80211_eht_320_rx_max_nss_10_11,
15509 &hf_ieee80211_eht_320_tx_max_nss_10_11,
15510 &hf_ieee80211_eht_320_rx_max_nss_12_13,
15511 &hf_ieee80211_eht_320_tx_max_nss_12_13,
15512 NULL((void*)0)
15513};
15514
15515static unsigned
15516dissect_eht_eml_control_field(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15517{
15518 unsigned start = offset;
15519 unsigned len = tvb_captured_length_remaining(tvb, offset);
15520 uint8_t mode = tvb_get_uint8(tvb, offset);
15521 uint8_t mcs_map_count;
15522 proto_item *link_map_item;
15523 proto_tree *link_map_tree;
15524 uint16_t bmap, f;
15525
15526 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15527 hf_ieee80211_eht_eml_control_field,
15528 ett_eht_eml_control,
15529 eht_eml_control_field_mode_headers,
15530 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15531 offset += 1;
15532
15533 if (mode & 0x03) { /* EMLSR or EMLMR*/
15534 if (len < 3) {
15535 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_action, "EMLSR or EMLMR length %u is wrong", len);
15536 return len;
15537 }
15538 link_map_item = proto_tree_add_item(tree,
15539 hf_ieee80211_eht_eml_control_link_bitmap,
15540 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
15541 link_map_tree = proto_item_add_subtree(link_map_item,
15542 ett_eht_eml_control_link_map);
15543 bmap = tvb_get_letohs(tvb, offset);
15544 for (f = 0; f < 16; f++) {
15545 if (bmap & (1 << f)) {
15546 proto_tree_add_uint_format_value(link_map_tree,
15547 hf_ieee80211_eht_eml_control_link_enable_id,
15548 tvb, offset + (f/8), 1, f, "%u", f);
15549 }
15550 }
15551 offset += 2;
15552 }
15553 if (mode & 0x02) { /* EMLMR */
15554 if (len < 7) {
15555 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_action, "EMLMR length %u is wrong", len);
15556 return len;
15557 }
15558 mcs_map_count = tvb_get_uint8(tvb, offset) & 0x03;
15559 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15560 hf_ieee80211_eht_eml_control_mcs_map_count,
15561 ett_eht_eml_control_mcs_map_count,
15562 eht_eml_control_mcs_map_count_headers, ENC_LITTLE_ENDIAN0x80000000,
15563 BMT_NO_APPEND0x01);
15564 offset++;
15565
15566 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15567 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
15568 ett_eht_phy_mcs_nss_set,
15569 eht_le_80_mcs_map_hdrs,
15570 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15571 offset += 3;
15572 if (mcs_map_count >= 1) {
15573 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15574 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
15575 ett_eht_phy_mcs_nss_set,
15576 eht_160_mcs_map_hdrs,
15577 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15578 offset += 3;
15579 }
15580 if (mcs_map_count >= 2) {
15581 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15582 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
15583 ett_eht_phy_mcs_nss_set,
15584 eht_320_mcs_map_hdrs,
15585 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
15586 offset += 3;
15587 }
15588 }
15589
15590 if (mode & 0x04) { /* EMLSR Parameter Update */
15591 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
15592 hf_ieee80211_eht_emlsr_para_update, ett_eht_emlsr_para_update,
15593 eht_emlsr_para_update_headers, ENC_LITTLE_ENDIAN0x80000000,
15594 BMT_NO_APPEND0x01);
15595 offset++;
15596 }
15597
15598 return offset - start;
15599}
15600
15601static int
15602add_tag_relay_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15603{
15604 int tag_len = tvb_reported_length(tvb);
15605 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
15606 int offset = 0;
15607 static int * const ieee80211_tag_relay_capabilities[] = {
15608 &hf_ieee80211_tag_relay_support,
15609 &hf_ieee80211_tag_relay_use,
15610 &hf_ieee80211_tag_relay_permission,
15611 &hf_ieee80211_tag_AC_power,
15612 &hf_ieee80211_tag_relay_prefer,
15613 &hf_ieee80211_tag_duplex,
15614 &hf_ieee80211_tag_cooperation,
15615 NULL((void*)0)
15616 };
15617
15618 if (tag_len < 2) {
15619 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length must be 2");
15620 return 1;
15621 }
15622
15623 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_relay_capabilities, ENC_NA0x00000000);
15624 return tvb_captured_length(tvb);
15625}
15626
15627#if 0
15628static unsigned
15629add_ff_relay_capable_sta_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15630{
15631 proto_item *rcsi_item = proto_tree_add_item(tree, hf_ieee80211_ff_rcsi, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
15632 proto_tree *rcsi_tree = proto_item_add_subtree(rcsi_item, ett_rcsi_tree);
15633 proto_tree_add_item(rcsi_tree, hf_ieee80211_ff_rcsi_aid, tvb, offset, 1, ENC_NA0x00000000);
15634 offset += 1;
15635 add_tag_relay_capabilities(pinfo, rcsi_item, 2, rcsi_tree, tvb, &offset);
15636 return 3;
15637}
15638#endif
15639
15640#define NEXT_TBTT_PRESENT0x01 0x01
15641#define COMPRESSED_SSID_PRESENT0x02 0x02
15642#define ANO_PRESENT0x04 0x04
15643
15644static void
15645dissect_ieee80211_extension(uint16_t fcf, tvbuff_t *tvb, packet_info *pinfo,
15646 proto_tree *tree, uint16_t flags)
15647{
15648 proto_item *ti;
15649 proto_tree *ext_tree;
15650 proto_tree *fixed_tree;
15651 proto_tree *tagged_tree;
15652
15653 int offset = 0;
15654 int tagged_parameter_tree_len;
15655
15656 ti = proto_tree_add_item(tree, proto_wlan_ext, tvb, offset, -1, ENC_NA0x00000000);
15657 ext_tree = proto_item_add_subtree(ti, ett_80211_ext);
15658
15659 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)))
)
15660 {
15661 case EXTENSION_DMG_BEACON0x30:
15662 {
15663 bool_Bool cc, dis;
15664 uint16_t bic_field;
15665 fixed_tree = get_fixed_parameter_tree(ext_tree, tvb, offset, 20, false0);
15666 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
15667 offset += add_ff_sector_sweep(fixed_tree, tvb, pinfo, offset);
15668 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
15669 bic_field = tvb_get_letohs(tvb, offset);
15670 cc = (bic_field & 0x1);
15671 dis = (bic_field & 0x2) >> 1;
15672 offset += add_ff_beacon_interval_ctrl(fixed_tree, tvb, pinfo, offset);
15673 offset += add_ff_dmg_params(fixed_tree, tvb, pinfo, offset);
15674 if(cc) {
15675 offset += add_ff_cc_field(fixed_tree, tvb, offset, dis);
15676 }
15677 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
15678
15679 /*
15680 * The tagged params are optional here. See Table 8.33a of the 2012
15681 * version of the standard.
15682 */
15683 if (tagged_parameter_tree_len) {
15684 tagged_tree = get_tagged_parameter_tree(ext_tree, tvb, offset, tagged_parameter_tree_len);
15685 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_DMG_BEACON0x30, NULL((void*)0));
15686 }
15687 break;
15688 }
15689 case EXTENSION_S1G_BEACON0x31:
15690 {
15691 int params_size = 5;
15692
15693 if (flags & NEXT_TBTT_PRESENT0x01) params_size += 3;
15694 if (flags & COMPRESSED_SSID_PRESENT0x02) params_size += 4;
15695 if (flags & ANO_PRESENT0x04) params_size += 1;
15696
15697 fixed_tree = get_fixed_parameter_tree( ext_tree, tvb, offset, params_size, false0);
15698 offset += add_ff_s1g_timestamp(fixed_tree, tvb, pinfo, offset);
15699 offset += add_ff_change_sequence(fixed_tree, tvb, pinfo, offset);
15700 if (flags & NEXT_TBTT_PRESENT0x01)
15701 offset += add_ff_next_tbtt(fixed_tree, tvb, pinfo, offset);
15702 if (flags & COMPRESSED_SSID_PRESENT0x02)
15703 offset += add_ff_compressed_ssid(fixed_tree, tvb, pinfo, offset);
15704 if (flags & ANO_PRESENT0x04)
15705 offset += add_ff_access_network_options(fixed_tree, tvb, pinfo, offset);
15706
15707 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
15708
15709 if (tagged_parameter_tree_len) {
15710 tagged_tree = get_tagged_parameter_tree(ext_tree, tvb, offset, tagged_parameter_tree_len);
15711 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, EXTENSION_S1G_BEACON0x31, NULL((void*)0));
15712 }
15713 }
15714 }
15715}
15716
15717static unsigned
15718add_ff_action_unprotected_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
15719{
15720 uint8_t code;
15721 unsigned start = offset;
15722
15723 offset += add_ff_category_code(tree, tvb, pinfo, offset);
15724 code = tvb_get_uint8(tvb, offset);
15725 offset += add_ff_unprotected_dmg_action_code(tree, tvb, pinfo, offset);
15726 switch (code) {
15727 case UNPROTECTED_DMG_ANNOUNCE0:
15728 offset += add_ff_timestamp(tree, tvb, pinfo, offset);
15729 offset += add_ff_beacon_interval(tree, tvb, pinfo, offset);
15730 break;
15731 case UNPROTECTED_DMG_BRP1:
15732 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
15733 offset += add_ff_BRP_request(tree, tvb, pinfo, offset);
15734 break;
15735 }
15736 return offset - start;
15737}
15738
15739/* There is no easy way to skip all these subcarrier indices that must not
15740 * be displayed when showing compressed beamforming feedback matrices
15741 * Table 8-53g IEEE Std 802.11ac-2013 amendment.
15742 *
15743 * The irregular use of case statements in this function is to improve
15744 * readability in what is otherwise a large function that does very little.
15745 */
15746static inline int
15747vht_compressed_skip_scidx(uint8_t nchan_width, uint8_t ng, int scidx)
15748{
15749 switch(nchan_width) {
15750 /* 20 MHz */
15751 case 0:
15752 /* No Grouping */
15753 if (ng == 0)
15754 switch (scidx) {
15755 /* Pilot subcarriers */
15756 case -21: case -7: case 7: case 21:
15757 /* DC subcarrier */
15758 case 0:
15759 scidx++;
15760 default:
15761 break;
15762 }
15763 break;
15764 /* 40 MHz */
15765 case 1:
15766 /* No Grouping */
15767 if (ng == 0)
15768 switch (scidx) {
15769 /* Pilot subcarriers */
15770 case -53: case -25: case -11: case 11: case 25: case 53:
15771 scidx++;
15772 break;
15773 /* DC subcarriers */
15774 case -1: case 0: case 1:
15775 scidx = 2;
15776 default:
15777 break;
15778 }
15779 break;
15780 /* 80 MHz */
15781 case 2:
15782 /* No Grouping */
15783 if (ng == 0)
15784 switch (scidx) {
15785 /* Pilot subcarriers */
15786 case -103: case -75: case -39: case -11: case 11: case 39: case 75: case 103:
15787 scidx++;
15788 break;
15789 /* DC subcarriers, skip -1, 0, 1 */
15790 case -1:
15791 scidx = 2;
15792 default:
15793 break;
15794 }
15795 break;
15796 /* 160 MHz / 80+80 Mhz
15797 * Skip values here assume 160 MHz, as vht_mimo_control does not let us differentiate
15798 * between 160 MHz & 80-80MHz */
15799 case 3:
15800 switch (ng) {
15801 /* No Grouping */
15802 case 0:
15803 /* DC subcarriers, skip -5 to 5*/
15804 if (scidx == -5) {
15805 scidx = 6;
15806 break;
15807 }
15808 switch (scidx) {
15809 /* Pilot subcarriers */
15810 case -231: case -203: case -167: case -139: case -117: case -89: case -53: case -25:
15811 case 25: case 53: case 89: case 117: case 139: case 167: case 203: case 231:
15812 scidx++;
15813 break;
15814 /* Other subcarriers, skip -129 to -127, 127 to 129 */
15815 case -129:
15816 scidx = -126;
15817 break;
15818 case 127:
15819 scidx = 130;
15820 break;
15821 default:
15822 break;
15823 }
15824 break;
15825 /* Grouping of 2 */
15826 case 1:
15827 switch (scidx) {
15828 /* DC subcarriers */
15829 case -128: case -4: case -2: case 0: case 2: case 4: case 128:
15830 scidx++;
15831 default:
15832 break;
15833 }
15834 break;
15835 /* Grouping of 4 */
15836 case 2:
15837 if (scidx == -2 || scidx == 2)
15838 scidx++;
15839 break;
15840 }
15841 break;
15842 default:
15843 break;
15844 }
15845
15846 return scidx;
15847}
15848
15849static inline int vht_exclusive_skip_scidx(uint8_t nchan_width, uint8_t ng, int scidx)
15850{
15851 switch (nchan_width) {
15852 /* 20 MHz */
15853 case 0:
15854 switch (ng) {
15855 /* No Grouping */
15856 case 0:
15857 if (scidx == -2 || scidx == 1)
15858 scidx++;
15859 else
15860 scidx = scidx + 2;
15861 break;
15862 case 1:
15863 switch (scidx) {
15864 case -4: case 1:
15865 scidx = scidx + 3;
15866 break;
15867 case -1:
15868 scidx = 1;
15869 break;
15870 default:
15871 scidx = scidx + 4;
15872 break;
15873 }
15874 break;
15875 default:
15876 switch (scidx) {
15877 case -4: case 1:
15878 scidx = scidx + 3;
15879 break;
15880 case -1:
15881 scidx = 1;
15882 break;
15883 default:
15884 scidx = scidx + 8;
15885 break;
15886 }
15887 break;
15888 }
15889 break;
15890 /* 40 MHz */
15891 case 1:
15892 /* 80 MHz */
15893 case 2:
15894 switch (ng) {
15895 /* No Grouping */
15896 case 0:
15897 if (scidx == -2)
15898 scidx = 2;
15899 else
15900 scidx = scidx + 2;
15901 break;
15902 case 1:
15903 scidx = scidx + 4;
15904 break;
15905 default:
15906 if (scidx == -2)
15907 scidx = 2;
15908 else
15909 scidx = scidx + 8;
15910 break;
15911 }
15912 break;
15913 /* 160 MHz / 80+80 Mhz */
15914 case 3:
15915 switch (ng) {
15916 /* No Grouping */
15917 case 0:
15918 switch (scidx) {
15919 /* DC subcarriers, skip -4 to 4*/
15920 case -6:
15921 scidx = 6;
15922 break;
15923 /* Other subcarriers, skip -128, 128 */
15924 case -130:
15925 scidx = -126;
15926 break;
15927 case 126:
15928 scidx = 130;
15929 break;
15930 default:
15931 scidx = scidx + 2;
15932 break;
15933 }
15934 break;
15935 case 1:
15936 switch (scidx) {
15937 /* DC subcarriers, skip -4 to 4*/
15938 case -6:
15939 scidx = 6;
15940 break;
15941 default:
15942 scidx = scidx + 4;
15943 break;
15944 }
15945 break;
15946 default:
15947 switch (scidx) {
15948 case -6:
15949 scidx = 6;
15950 break;
15951 case -130:
15952 scidx = -126;
15953 break;
15954 case 126:
15955 scidx = 130;
15956 break;
15957 default:
15958 scidx = scidx + 8;
15959 break;
15960 }
15961 break;
15962 }
15963 break;
15964 default:
15965 break;
15966 }
15967 return scidx;
15968}
15969
15970static int
15971dissect_he_feedback_matrix(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
15972 int offset, int bit_offset, int scidx,
15973 int nr, int nc,
15974 int phi_bits, int psi_bits,
15975 int hf);
15976
15977static unsigned
15978add_ff_vht_compressed_beamforming_report(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
15979{
15980 uint32_t vht_mimo;
15981 uint8_t nc;
15982 uint8_t nr;
15983 uint8_t chan_width;
15984 uint8_t grouping;
15985 bool_Bool codebook_info;
15986 bool_Bool feedback_type;
15987 proto_item *vht_beam_item, *vht_excl_beam_item;
15988 proto_tree *vht_beam_tree, *subtree, *vht_excl_beam_tree;
15989 int i, len, pos, ns, scidx = 0;
15990 uint8_t phi, psi, carry;
15991 int j, ic, off_len = 0, sscidx = 0, xnsc;
15992 int bit_offset = 0;
15993 int start_offset = 0;
15994 /* Table 8-53g Subcarriers for which a Compressed Beamforming Feedback Matrix
15995 * subfield is sent back. IEEE Std 802.11ac-2013 amendment */
15996 static const int ns_arr[4][3] = { { 52, 30, 16 },
15997 { 108, 58, 30 },
15998 { 234, 122, 62 },
15999 { 468, 244, 124 }
16000 };
16001
16002 /* Table 8-53j, no of Subcarriers for which the Delta SNR subfield is sent back to the beamformer.
16003 * IEEE Std 802.11ac-2013 amendment */
16004 static const int delta_ns_arr[4][3] = { { 30, 16, 10 },
16005 { 58, 30, 16 },
16006 { 122, 62, 32 },
16007 { 244, 124, 64 }
16008 };
16009
16010 vht_mimo = tvb_get_letoh24(tvb, offset);
16011 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ff_vht_mimo_cntrl,
16012 ett_ff_vhtmimo_cntrl, hf_ieee80211_ff_vht_mimo_cntrl_fields, ENC_LITTLE_ENDIAN0x80000000);
16013 offset += 3;
16014
16015 /* Extract values for beamforming use */
16016 nc = (vht_mimo & 0x7) + 1;
16017 nr = ((vht_mimo & 0x38) >> 3) + 1;
16018 chan_width = (vht_mimo & 0xC0) >> 6;
16019 grouping = ((vht_mimo & 0x300) >> 8);
16020 codebook_info = (vht_mimo & 0x400) >> 10;
16021 feedback_type = (vht_mimo & 0x800) >> 11;
16022
16023 if (feedback_type) {
16024 if (codebook_info) {
16025 psi = 7; phi = 9;
16026 } else {
16027 psi = 5; phi = 7;
16028 }
16029 } else {
16030 if (codebook_info) {
16031 psi = 4; phi = 6;
16032 } else {
16033 psi = 2; phi = 4;
16034 }
16035 }
16036
16037 vht_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_compressed_beamforming_report, tvb,
16038 offset, -1, ENC_NA0x00000000);
16039 vht_beam_tree = proto_item_add_subtree(vht_beam_item, ett_ff_vhtmimo_beamforming_report);
16040
16041 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, nc,
16042 ett_ff_vhtmimo_beamforming_report_snr, NULL((void*)0), "Average Signal to Noise Ratio");
16043
16044 for (i = 1; i <= nc; i++)
16045 {
16046 int8_t snr;
16047 char edge_sign;
16048
16049 snr = tvb_get_int8(tvb, offset);
16050
16051 switch(snr) {
16052 case -128:
16053 edge_sign = '<';
16054 break;
16055 case 127:
16056 edge_sign = '>';
16057 break;
16058 default:
16059 edge_sign = ' ';
16060 break;
16061 }
16062
16063 proto_tree_add_int_format(subtree, hf_ieee80211_vht_compressed_beamforming_report_snr, tvb, offset, 1,
16064 snr, "Stream %d - Signal to Noise Ratio: %c%3.2fdB", i, edge_sign,snr/4.0+22.0);
16065
16066 offset += 1;
16067 }
16068
16069 /* Table 8-53c Subfields of the VHT MIMO Control field (802.11ac-2013)
16070 * reserves value 3 of the Grouping subfield. */
16071 if (grouping == 3) {
16072 expert_add_info_format(pinfo, vht_beam_item, &ei_ieee80211_inv_val,
16073 "Grouping subfield value 3 is reserved");
16074 return offset;
16075 }
16076
16077 start_offset = offset;
16078 subtree = proto_tree_add_subtree(vht_beam_tree, tvb, offset, -1,
16079 ett_ff_vhtmimo_beamforming_report_feedback_matrices,
16080 NULL((void*)0), "Feedback Matrices");
16081
16082 ns = ns_arr[chan_width][grouping];
16083 switch(chan_width) {
16084 case 0:
16085 scidx = -28;
16086 break;
16087 case 1:
16088 scidx = -58;
16089 break;
16090 case 2:
16091 scidx = -122;
16092 break;
16093 case 3:
16094 /* This is -122 for 80+80MHz Channel Width but vht_mimo_control does not allow us
16095 * to differentiate between 160MHz and 80+80Mhz */
16096 scidx = -250;
16097 break;
16098 }
16099
16100 bit_offset = offset * 8;
16101 for (i = 0; i < ns; i++) {
16102
16103 scidx = vht_compressed_skip_scidx(chan_width, grouping, scidx);
16104
16105 bit_offset = dissect_he_feedback_matrix(subtree, tvb, pinfo, offset,
16106 bit_offset, scidx++, nr, nc, phi, psi,
16107 hf_ieee80211_vht_compressed_beamform_scidx);
16108 offset = bit_offset / 8;
16109 }
16110
16111 proto_item_set_len(subtree, offset - start_offset);
16112
16113 if (feedback_type) {
16114 xnsc = delta_ns_arr[chan_width][grouping];
16115 if ((nc * xnsc *4) % 8)
16116 off_len = (nc * xnsc *4) / 8 + 1;
16117 else
16118 off_len = (nc * xnsc *4) / 8;
16119 switch(chan_width) {
16120 case 0:
16121 sscidx = -28;
16122 break;
16123 case 1:
16124 sscidx = -58;
16125 break;
16126 case 2:
16127 sscidx = -122;
16128 break;
16129 case 3:
16130 sscidx = -250;
16131 break;
16132 }
16133 vht_excl_beam_item = proto_tree_add_item(tree, hf_ieee80211_vht_mu_exclusive_beamforming_report, tvb, offset, off_len, ENC_NA0x00000000);
16134 vht_excl_beam_tree = proto_item_add_subtree(vht_excl_beam_item, ett_ff_vhtmu_exclusive_beamforming_report_matrices);
16135
16136 carry = 1;
16137 for (j = 1; j <= xnsc; j++) {
16138 for (ic = 1; ic <= nc; ic++) {
16139 if (carry % 2){
16140 pos = 0;
16141 len = 1;
16142 }
16143 else
16144 {
16145 pos = 1;
16146 len = 0;
16147 }
16148 proto_tree_add_none_format(vht_excl_beam_tree, hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr, tvb,
16149 offset - pos, 1, "Delta SNR for space-time stream %d for subcarrier %d", ic, sscidx);
16150 offset += len;
16151 carry ++;
16152 }
16153 sscidx = vht_exclusive_skip_scidx(chan_width, grouping, sscidx);
16154 }
16155 }
16156
16157 return offset;
16158}
16159
16160static unsigned
16161add_ff_action_vht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16162{
16163 unsigned start = offset;
16164 uint8_t vht_action, field_val;
16165 uint64_t msa_value;
16166 uint64_t upa_value;
16167 int m, half, msa_index;
16168 proto_item *ti;
16169 proto_tree *ti_tree;
16170 proto_item *msa, *upa;
16171 proto_tree *msa_tree, *upa_tree;
16172
16173 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16174
16175 vht_action = tvb_get_uint8(tvb, offset);
16176 offset += add_ff_vht_action(tree, tvb, pinfo, offset);
16177
16178 switch(vht_action){
16179 case VHT_ACT_VHT_COMPRESSED_BEAMFORMING0:{
16180 offset = add_ff_vht_compressed_beamforming_report(tree, tvb, pinfo, offset);
16181 offset += tvb_reported_length_remaining(tvb, offset);
16182 }
16183 break;
16184 case VHT_ACT_GROUP_ID_MANAGEMENT1:{
16185 ti = proto_tree_add_item(tree, hf_ieee80211_vht_group_id_management, tvb,
16186 offset, -1, ENC_NA0x00000000);
16187 ti_tree = proto_item_add_subtree(ti, ett_vht_grpidmgmt);
16188
16189 msa_value = tvb_get_letoh64(tvb, offset);
16190 msa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_membership_status_array, tvb,
16191 offset, 8, ENC_NA0x00000000);
16192 msa_tree = proto_item_add_subtree(msa, ett_vht_msa);
16193 for (m = 0; m < 64; m++) {
16194 if (msa_value & (INT64_C(1)1L << m))
16195 proto_tree_add_uint_format(msa_tree, hf_ieee80211_vht_membership_status_field,
16196 tvb, offset + (m/8), 1, 1, "Membership Status in Group ID %d: 1", m);
16197 }
16198 offset += 8;
16199
16200 upa = proto_tree_add_item(ti_tree, hf_ieee80211_vht_user_position_array, tvb,
16201 offset, 16, ENC_NA0x00000000);
16202 upa_tree = proto_item_add_subtree(upa, ett_vht_upa);
16203
16204 for (half = 0, msa_index = 0; half < 2; half++) {
16205 upa_value = tvb_get_letoh64(tvb, offset);
16206 for (m = 0; m < 64; m += 2, msa_index++) {
16207 if (msa_value & (INT64_C(1)1L << msa_index)) {
16208 field_val = (uint8_t)((upa_value >> m) & 0x3);
16209 proto_tree_add_uint_format(upa_tree, hf_ieee80211_vht_user_position_field,
16210 tvb, offset + (m / 8), 1, field_val, "User Position in Group ID %d: %u", msa_index, field_val);
16211 }
16212 }
16213 offset += 8;
16214 }
16215
16216 offset += tvb_reported_length_remaining(tvb, offset);
16217 }
16218 break;
16219 case VHT_ACT_OPERATION_MODE_NOTIFICATION2:{
16220 ti = proto_tree_add_item(tree, hf_ieee80211_vht_operation_mode_notification, tvb,
16221 offset, -1, ENC_NA0x00000000);
16222 expert_add_info(pinfo, ti, &ei_ieee80211_vht_action);
16223 offset += tvb_reported_length_remaining(tvb, offset);
16224 }
16225 break;
16226 default:
16227 break;
16228 }
16229
16230
16231 return offset - start;
16232}
16233
16234static int * const s1g_sync_control_headers[] = {
16235 &hf_ieee80211_s1g_sync_control_uplink_sync_request,
16236 &hf_ieee80211_s1g_sync_control_time_slot_protection_request,
16237 &hf_ieee80211_s1g_sync_control_reserved,
16238 NULL((void*)0)
16239};
16240
16241static int
16242add_ff_sync_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16243{
16244 int start = offset;
16245
16246 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16247 hf_ieee80211_s1g_sync_control,
16248 ett_s1g_sync_control_tree,
16249 s1g_sync_control_headers,
16250 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16251 offset += 1;
16252
16253 return offset - start;
16254}
16255
16256static int * const s1g_sector_id_index_headers[] = {
16257 &hf_ieee80211_s1g_sector_id_preferred_sector_id,
16258 &hf_ieee80211_s1g_sector_id_snr,
16259 &hf_ieee80211_s1g_sector_id_receive_sector_bitmap,
16260 NULL((void*)0)
16261};
16262
16263static void
16264s1g_sector_id_index_snr_custom(char *result, uint16_t snr)
16265{
16266 switch (snr) {
16267 case 0:
16268 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Less than or equal to -3dB");
16269 break;
16270 case 30:
16271 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Greater than or equal to 27dB");
16272 break;
16273 case 31:
16274 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "No Feedback");
16275 break;
16276 default:
16277 snprintf(result, ITEM_LABEL_LENGTH240, "%ddB", snr - 3);
16278 }
16279}
16280
16281static int
16282add_ff_sector_id_index(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16283{
16284 int start = offset;
16285
16286 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16287 hf_ieee80211_s1g_sector_id_index,
16288 ett_s1g_sector_id_index,
16289 s1g_sector_id_index_headers,
16290 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16291 offset += 2;
16292
16293 return offset - start;
16294}
16295
16296static int * const s1g_twt_information_control_headers[] = {
16297 &hf_ieee80211_s1g_twt_flow_identifier,
16298 &hf_ieee80211_s1g_twt_response_required,
16299 &hf_ieee80211_s1g_twt_next_twt_request,
16300 &hf_ieee80211_s1g_twt_next_twt_subfield_size,
16301 &hf_ieee80211_s1g_twt_reserved,
16302 NULL((void*)0)
16303};
16304
16305static int
16306add_ff_twt_information(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
16307{
16308 int start = offset;
16309 uint8_t control = tvb_get_uint8(tvb, offset);
16310
16311 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16312 hf_ieee80211_s1g_twt_information_control,
16313 ett_s1g_twt_information_control,
16314 s1g_twt_information_control_headers,
16315 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16316 offset += 1;
16317
16318 if (control & 0x60) {
16319 int len_bits = ((control >> 5) & 0x03);
16320 int len = 0;
16321
16322 switch (len_bits) {
16323 case 0:
16324 len = 0; /* Should not happen! */
16325 break;
16326 case 1:
16327 len = 4;
16328 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_32, tvb, offset,
16329 len, ENC_LITTLE_ENDIAN0x80000000);
16330 break;
16331 case 2:
16332 len = 6;
16333 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_48, tvb, offset,
16334 len, ENC_LITTLE_ENDIAN0x80000000);
16335 break;
16336 case 3:
16337 len = 8;
16338 proto_tree_add_item(tree, hf_ieee80211_s1g_twt_next_twt_64, tvb, offset,
16339 len, ENC_LITTLE_ENDIAN0x80000000);
16340 break;
16341 }
16342
16343 offset += len;
16344 }
16345
16346 return offset - start;
16347}
16348
16349static unsigned
16350add_ff_s1g_twt_setup(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16351{
16352 const uint8_t ids[] = { TAG_TWT216 };
16353 unsigned start = offset;
16354
16355 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
16356
16357 return offset - start;
16358}
16359
16360static int * const ieee80211_twt_individual_flow[] = {
16361 &hf_ieee80211_twt_individual_flow_id,
16362 &hf_ieee80211_twt_individual_reserved,
16363 &hf_ieee80211_twt_neg_type,
16364 &hf_ieee80211_twt_bcast_teardown_all_twt,
16365 NULL((void*)0),
16366};
16367static int * const ieee80211_twt_bcast_flow[] = {
16368 &hf_ieee80211_twt_bcast_id,
16369 &hf_ieee80211_twt_neg_type,
16370 &hf_ieee80211_twt_bcast_teardown_all_twt,
16371 NULL((void*)0),
16372};
16373static int * const ieee80211_twt_neg_type2[] = {
16374 &hf_ieee80211_twt_neg_type2_reserved1,
16375 &hf_ieee80211_twt_neg_type,
16376 &hf_ieee80211_twt_neg_type2_reserved2,
16377 NULL((void*)0),
16378};
16379static int * const ieee80211_twt_teardown_all[] = {
16380 &hf_ieee80211_twt_bcast_twt_id_reserved,
16381 &hf_ieee80211_twt_bcast_neg_type_reserved,
16382 &hf_ieee80211_twt_bcast_teardown_all_twt,
16383 NULL((void*)0),
16384};
16385
16386static unsigned
16387add_ff_s1g_twt_teardown(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16388{
16389 uint8_t twt_flow_id = tvb_get_uint8(tvb, offset);
16390
16391 // Bit 7 is means Teardown All TWT, and the other fields are reserved
16392 if (twt_flow_id & 0x80) {
16393 proto_tree_add_bitmask(tree, tvb, offset,
16394 hf_ieee80211_twt_bcast_teardown_all,
16395 ett_twt_tear_down_tree,
16396 ieee80211_twt_teardown_all,
16397 ENC_NA0x00000000);
16398 return 1;
16399 }
16400
16401 // Bits 5 and 6 are the negotiation type - See ieee80211.ax/D3.0 9.6.25.9
16402 switch ((twt_flow_id & 0x60) >> 5) {
16403 case 2:
16404 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16405 hf_ieee80211_twt_bcast_flow,
16406 ett_twt_tear_down_tree, ieee80211_twt_neg_type2,
16407 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16408 break;
16409
16410 case 3:
16411 // According to 11ax, first 5 bits are the BCAST TWT flow ID
16412 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16413 hf_ieee80211_twt_bcast_flow,
16414 ett_twt_tear_down_tree, ieee80211_twt_bcast_flow,
16415 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16416 break;
16417 case 0:
16418 case 1:
16419 // According to 11ah / 11ax, first 3 bits are the UCAST TWT flow ID
16420 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
16421 hf_ieee80211_twt_individual_flow,
16422 ett_twt_tear_down_tree, ieee80211_twt_individual_flow,
16423 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FLAGS0x00);
16424 break;
16425 default:
16426 proto_tree_add_expert(tree, pinfo, &ei_ieee80211_twt_tear_down_bad_neg_type,
16427 tvb, offset, tvb_reported_length_remaining(tvb, offset));
16428 }
16429
16430 // The TWT Flow ID size
16431 return 1;
16432}
16433
16434static unsigned
16435add_ff_action_s1g(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16436{
16437 unsigned start = offset;
16438 uint8_t s1g_action;
16439
16440 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16441
16442 s1g_action = tvb_get_uint8(tvb, offset);
16443 offset += add_ff_s1g_action(tree, tvb, pinfo, offset);
16444
16445 switch(s1g_action) {
16446 case S1G_ACT_AID_SWITCH_REQUEST0:
16447 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16448 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16449 break;
16450 case S1G_ACT_AID_SWITCH_RESPONSE1:
16451 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16452 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16453 break;
16454 case S1G_ACT_SYNC_CONTROL2:
16455 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16456 offset += add_ff_sync_control(tree, tvb, pinfo, offset);
16457 break;
16458 case S1G_ACT_STA_INFO_ANNOUNCE3:
16459 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16460 break;
16461 case S1G_ACT_EDCA_PARAM_SET4:
16462 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16463 break;
16464 case S1G_ACT_EL_OPERATION5:
16465 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16466 break;
16467 case S1G_ACT_TWT_SETUP6:
16468 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16469 offset += add_ff_s1g_twt_setup(tree, tvb, pinfo, offset);
16470 break;
16471 case S1G_ACT_TWT_TEARDOWN7:
16472 offset += add_ff_s1g_twt_teardown(tree, tvb, pinfo, offset);
16473 break;
16474 case S1G_ACT_SECT_GROUP_ID_LIST8:
16475 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16476 break;
16477 case S1G_ACT_SECT_ID_FEEDBACK9:
16478 offset += add_ff_sector_id_index(tree, tvb, pinfo, offset);
16479 break;
16480 case S1G_ACT_TWT_INFORMATION11:
16481 offset += add_ff_twt_information(tree, tvb, pinfo, offset);
16482 break;
16483 default:
16484 break;
16485 }
16486
16487 return offset - start;
16488}
16489
16490static unsigned
16491add_ff_action_protected_s1g(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
16492{
16493 unsigned start = offset;
16494 uint8_t s1g_action;
16495
16496 offset += add_ff_category_code(tree, tvb, pinfo, offset);
16497
16498 s1g_action = tvb_get_uint8(tvb, offset);
16499 offset += add_ff_prot_s1g_action(tree, tvb, pinfo, offset);
16500
16501 switch(s1g_action) {
16502 case PROT_S1G_ACT_REACH_ADDR_UPDATE0:
16503 case PROT_S1G_ACT_RELAY_ACTIVATE_REQ1:
16504 case PROT_S1G_ACT_RELAY_ACTIVATE_RESP2:
16505 case PROT_S1G_ACT_HEADER_COMPRESSION3:
16506 // TODO
16507 break;
16508 case PROT_S1G_ACT_TWT_SETUP4:
16509 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16510 offset += add_ff_s1g_twt_setup(tree, tvb, pinfo, offset);
16511 break;
16512 case PROT_S1G_ACT_TWT_TEARDOWN5:
16513 offset += add_ff_s1g_twt_teardown(tree, tvb, pinfo, offset);
16514 break;
16515 case PROT_S1G_ACT_TWT_INFORMATION6:
16516 offset += add_ff_twt_information(tree, tvb, pinfo, offset);
16517 break;
16518 case PROT_S1G_ACT_AID_SWITCH_REQUEST7:
16519 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16520 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16521 break;
16522 case PROT_S1G_ACT_AID_SWITCH_RESPONSE8:
16523 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16524 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16525 break;
16526 case PROT_S1G_ACT_SYNC_CONTROL9:
16527 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
16528 offset += add_ff_sync_control(tree, tvb, pinfo, offset);
16529 break;
16530 case PROT_S1G_ACT_STA_INFO_ANNOUNCE10:
16531 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16532 break;
16533 case PROT_S1G_ACT_EDCA_PARAM_SET11:
16534 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16535 break;
16536 case PROT_S1G_ACT_EL_OPERATION12:
16537 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16538 break;
16539 case PROT_S1G_ACT_SECT_GROUP_ID_LIST13:
16540 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
16541 break;
16542 case PROT_S1G_ACT_SECT_ID_FEEDBACK14:
16543 offset += add_ff_sector_id_index(tree, tvb, pinfo, offset);
16544 break;
16545 default:
16546 break;
16547 }
16548
16549 return offset - start;
16550}
16551
16552#define HE_COMPRESSED_BEAMFORMING_AND_CQI0 0
16553#define HE_QUIET_TIME_PERIOD1 1
16554
16555static const range_string he_action_rvals[] = {
16556 { HE_COMPRESSED_BEAMFORMING_AND_CQI0, HE_COMPRESSED_BEAMFORMING_AND_CQI0,
16557 "HE Compressed Beamforming And CQI" },
16558 { HE_QUIET_TIME_PERIOD1, HE_QUIET_TIME_PERIOD1,
16559 "Quiet Time Period" },
16560 { HE_QUIET_TIME_PERIOD1 + 1, 255, "Reserved" },
16561 { 0, 0, NULL((void*)0) }
16562};
16563
16564#define HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0 0
16565
16566static const range_string protected_he_action_rvals[] = {
16567 { HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0, HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0,
16568 "HE BSS Color Change Announcement" },
16569 { HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0 + 1, 255, "Reserved" },
16570 { 0, 0, NULL((void*)0) }
16571};
16572
16573#define EHT_TID_LINK_MAP_REQ0 0
16574#define EHT_TID_LINK_MAP_RESP1 1
16575#define EHT_TID_LINK_MAP_TEAR_DOWN2 2
16576#define EHT_EPCS_PRIO_ACCESS_REQ3 3
16577#define EHT_EPCS_PRIO_ACCESS_RESP4 4
16578#define EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5 5
16579#define EHT_EML_OP_MODE_NOTIFICATION6 6
16580#define EHT_LINK_RECOMMENDATION7 7
16581#define EHT_MULTI_LINK_OP_UPDATE_REQ8 8
16582#define EHT_MULTI_LINK_OP_UPDATE_RESP9 9
16583#define EHT_LINK_RECONFIG_NOTIFY10 10
16584#define EHT_LINK_RECONFIG_REQ11 11
16585#define EHT_LINK_RECONFIG_RESP12 12
16586
16587static const range_string protected_eht_action_rvals[] = {
16588 { EHT_TID_LINK_MAP_REQ0, EHT_TID_LINK_MAP_REQ0,
16589 "EHT TID-to-Link Mapping Request" },
16590 { EHT_TID_LINK_MAP_RESP1, EHT_TID_LINK_MAP_RESP1,
16591 "EHT TID-to-Link Mapping Response" },
16592 { EHT_TID_LINK_MAP_TEAR_DOWN2, EHT_TID_LINK_MAP_TEAR_DOWN2,
16593 "EHT TID-to-Link Mapping Teardown" },
16594 { EHT_EPCS_PRIO_ACCESS_REQ3, EHT_EPCS_PRIO_ACCESS_REQ3,
16595 "EHT EPCS Priority Access Request" },
16596 { EHT_EPCS_PRIO_ACCESS_RESP4, EHT_EPCS_PRIO_ACCESS_RESP4,
16597 "EHT EPCS Priority Access Response" },
16598 { EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5, EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5,
16599 "EHT EPCS Priority Access Teardown" },
16600 { EHT_EML_OP_MODE_NOTIFICATION6, EHT_EML_OP_MODE_NOTIFICATION6,
16601 "EHT EML Operating Mode Notification" },
16602 { EHT_LINK_RECOMMENDATION7, EHT_LINK_RECOMMENDATION7,
16603 "EHT Link Recommendation" },
16604 { EHT_MULTI_LINK_OP_UPDATE_REQ8, EHT_MULTI_LINK_OP_UPDATE_REQ8,
16605 "EHT Multi-Link Operation Update Request" },
16606 { EHT_MULTI_LINK_OP_UPDATE_RESP9, EHT_MULTI_LINK_OP_UPDATE_RESP9,
16607 "EHT Multi-Link Operation Update Response" },
16608 { EHT_LINK_RECONFIG_NOTIFY10, EHT_LINK_RECONFIG_NOTIFY10,
16609 "EHT Link Reconfiguration Notify" },
16610 { EHT_LINK_RECONFIG_REQ11, EHT_LINK_RECONFIG_REQ11,
16611 "EHT Link Reconfiguration Request" },
16612 { EHT_LINK_RECONFIG_RESP12, EHT_LINK_RECONFIG_RESP12,
16613 "EHT Link Reconfiguration Response" },
16614 { EHT_LINK_RECONFIG_RESP12 + 1, 255, "Reserved" },
16615 { 0, 0, NULL((void*)0) }
16616};
16617
16618/*
16619 * This currently only works for SU, 20MHz, 40MHz and 80MHz and grouping 4 and 16.
16620 */
16621struct scidx_start_end {
16622 int start;
16623 int end;
16624};
16625
16626#define N_SCIDX_20MHZ_NG49 9
16627static const struct scidx_start_end scidx_20MHz_Ng4[N_SCIDX_20MHZ_NG49] = {
16628 { -122, -96 },
16629 { -96, -68 },
16630 { -68, -40 },
16631 { -44, -16 },
16632 { -16, 16 },
16633 { 16, 44 },
16634 { 40, 68 },
16635 { 68, 96 },
16636 { 96, 122 }
16637};
16638
16639#define N_SCIDX_20MHZ_NG169 9
16640static const struct scidx_start_end scidx_20MHz_Ng16[9] = {
16641 { -122, -84 },
16642 { -96, -64 },
16643 { -80, -32 },
16644 { -52, -4 },
16645 { -20, 20 },
16646 { 4, 52 },
16647 { 32, 80 },
16648 { 64, 96 },
16649 { 84, 122 }
16650};
16651
16652#define N_SCIDX_40MHZ_NG418 18
16653static const struct scidx_start_end scidx_40MHz_Ng4[N_SCIDX_40MHZ_NG418] = {
16654 { -500 + 256, -472 + 256 },
16655 { -476 + 256, -448 + 256 },
16656 { -488 + 256, -420 + 256 },
16657 { -420 + 256, -392 + 256 },
16658 { -392 + 256, -364 + 256 },
16659 { -368 + 256, -340 + 256 },
16660 { -340 + 256, -312 + 256 },
16661 { -312 + 256, -284 + 256 },
16662 { -288 + 256, -260 + 256 },
16663 { 260 - 256, 288 - 256 },
16664 { 284 - 256, 312 - 256 },
16665 { 312 - 256, 340 - 256 },
16666 { 340 - 256, 368 - 256 },
16667 { 364 - 256, 392 - 256 },
16668 { 392 - 256, 420 - 256 },
16669 { 420 - 256, 448 - 256 },
16670 { 448 - 256, 476 - 256 },
16671 { 472 - 256, 500 - 256 }
16672};
16673
16674#define N_SCIDX_40MHZ_NG1618 18
16675static const struct scidx_start_end scidx_40MHz_Ng16[N_SCIDX_40MHZ_NG1618] = {
16676 { -500 + 256, -468 + 256 },
16677 { -484 + 256, -436 + 256 },
16678 { -452 + 256, -420 + 256 },
16679 { -420 + 256, -388 + 256 },
16680 { -404 + 256, -356 + 256 },
16681 { -372 + 256, -340 + 256 },
16682 { -340 + 256, -308 + 256 },
16683 { -324 + 256, -276 + 256 },
16684 { -292 + 256, -260 + 245 },
16685 { 260 - 256, 292 - 256 },
16686 { 276 - 256, 324 - 256 },
16687 { 308 - 256, 340 - 256 },
16688 { 340 - 256, 322 - 256 },
16689 { 356 - 256, 404 - 256 },
16690 { 388 - 256, 420 - 256 },
16691 { 420 - 256, 452 - 256 },
16692 { 436 - 256, 484 - 256 },
16693 { 468 - 256, 500 - 256 }
16694};
16695
16696#define N_SCIDX_80MHZ_NG437 37
16697static const struct scidx_start_end scidx_80MHz_Ng4[N_SCIDX_80MHZ_NG437] = {
16698 { -500, -472 },
16699 { -476, -448 },
16700 { -448, -420 },
16701 { -420, -392 },
16702 { -392, -364 },
16703 { -368, -340 },
16704 { -340, -312 },
16705 { -312, -284 },
16706 { -288, -260 },
16707 { -260, -232 },
16708 { -232, -204 },
16709 { -204, -176 },
16710 { -180, -152 },
16711 { -152, -124 },
16712 { -124, -96 },
16713 { -100, -72 },
16714 { -72, -44 },
16715 { -44, -16 },
16716 { -16, 16 },
16717 { 16, 44 },
16718 { 44, 72 },
16719 { 72, 100 },
16720 { 96, 124 },
16721 { 124, 152 },
16722 { 152, 180 },
16723 { 176, 204 },
16724 { 204, 232 },
16725 { 232, 260 },
16726 { 260, 288 },
16727 { 284, 312 },
16728 { 312, 340 },
16729 { 340, 368 },
16730 { 364, 392 },
16731 { 392, 420 },
16732 { 420, 448 },
16733 { 448, 476 },
16734 { 472, 500 }
16735};
16736
16737#define N_SCIDX_80MHZ_NG1637 37
16738static const struct scidx_start_end scidx_80MHz_Ng16[N_SCIDX_80MHZ_NG1637] = {
16739 { -500, -468 },
16740 { -484, -436 },
16741 { -452, -420 },
16742 { -420, -388 },
16743 { -404, -356 },
16744 { -372, -340 },
16745 { -340, -308 },
16746 { -324, -276 },
16747 { -292, -260 },
16748 { -260, -228 },
16749 { -244, -196 },
16750 { -212, -164 },
16751 { -180, -148 },
16752 { -164, -116 },
16753 { -132, -84 },
16754 { -100, -68 },
16755 { -84, -36 },
16756 { -52, -4 },
16757 { -20, 20 },
16758 { 4, 52 },
16759 { 36, 84 },
16760 { 68, 100 },
16761 { 84, 132 },
16762 { 116, 164 },
16763 { 148, 180 },
16764 { 164, 212 },
16765 { 196, 244 },
16766 { 228, 260 },
16767 { 260, 292 },
16768 { 276, 324 },
16769 { 308, 340 },
16770 { 340, 372 },
16771 { 356, 404 },
16772 { 388, 420 },
16773 { 420, 452 },
16774 { 436, 484 },
16775 { 468, 500 },
16776};
16777
16778#define SU_FEEDBACK(0) (0)
16779#define MU_FEEDBACK(1) (1)
16780#define CQI_FEEDBACK(2) (2)
16781#define RESERVED_FEEDBACK(3) (3)
16782
16783#define BW_20MHz(0) (0)
16784#define BW_40MHz(1) (1)
16785#define BW_80MHz(2) (2)
16786#define BW_160MHz(3) (3)
16787
16788#define SCIDX_END_SENTINAL(0x80000000) (0x80000000)
16789
16790static int
16791next_he_scidx(int scidx, int bw _U___attribute__((unused)), int grouping _U___attribute__((unused)), int feedback _U___attribute__((unused)),
16792 int ru_start_index, int ru_end_index)
16793{
16794 int incr = 4;
16795
16796 /*
16797 * We need to check the correct bw value to determine if we have hit
16798 * the end of the range of SCIDXes.
16799 */
16800 switch (bw) {
16801 case BW_20MHz(0):
16802 if (grouping == 0) {
16803 if (ru_end_index >= N_SCIDX_20MHZ_NG49 ||
16804 scidx == scidx_20MHz_Ng4[ru_end_index].end) /* we returned the max */
16805 return SCIDX_END_SENTINAL(0x80000000);
16806 } else {
16807 if (ru_end_index >= N_SCIDX_20MHZ_NG169 ||
16808 scidx == scidx_20MHz_Ng16[ru_end_index].end)
16809 return SCIDX_END_SENTINAL(0x80000000);
16810 }
16811 break;
16812 case BW_40MHz(1):
16813 if (grouping == 0) {
16814 if (ru_end_index >= N_SCIDX_40MHZ_NG418 ||
16815 scidx == scidx_40MHz_Ng4[ru_end_index].end)
16816 return SCIDX_END_SENTINAL(0x80000000);
16817 } else {
16818 if (ru_end_index >= N_SCIDX_40MHZ_NG1618 ||
16819 scidx == scidx_40MHz_Ng16[ru_end_index].end)
16820 return SCIDX_END_SENTINAL(0x80000000);
16821 }
16822 break;
16823 case BW_80MHz(2):
16824 if (grouping == 0) {
16825 if (ru_end_index >= N_SCIDX_80MHZ_NG437 ||
16826 scidx == scidx_80MHz_Ng4[ru_end_index].end)
16827 return SCIDX_END_SENTINAL(0x80000000);
16828 } else {
16829 if (ru_end_index >= N_SCIDX_80MHZ_NG1637 ||
16830 scidx == scidx_80MHz_Ng16[ru_end_index].end)
16831 return SCIDX_END_SENTINAL(0x80000000);
16832 }
16833 break;
16834 case BW_160MHz(3):
16835 return SCIDX_END_SENTINAL(0x80000000);
16836 }
16837
16838 /*
16839 * Check if this is the first time though and figure out the starting
16840 * SCIDX.
16841 */
16842 if (scidx == (int)SCIDX_END_SENTINAL(0x80000000))
16843 switch (bw) {
16844 case BW_20MHz(0):
16845 if (grouping == 0) {
16846 if (ru_start_index >= N_SCIDX_20MHZ_NG49)
16847 return SCIDX_END_SENTINAL(0x80000000);
16848 else
16849 return scidx_20MHz_Ng4[ru_start_index].start;
16850 } else {
16851 if (ru_start_index >= N_SCIDX_20MHZ_NG169)
16852 return SCIDX_END_SENTINAL(0x80000000);
16853 else
16854 return scidx_20MHz_Ng16[ru_start_index].start;
16855 }
16856 case BW_40MHz(1):
16857 if (grouping == 0) {
16858 if (ru_start_index >= N_SCIDX_40MHZ_NG418)
16859 return SCIDX_END_SENTINAL(0x80000000);
16860 else
16861 return scidx_40MHz_Ng4[ru_start_index].start;
16862 } else {
16863 if (ru_start_index >= N_SCIDX_40MHZ_NG1618)
16864 return SCIDX_END_SENTINAL(0x80000000);
16865 else
16866 return scidx_40MHz_Ng16[ru_start_index].start;
16867 }
16868 case BW_80MHz(2):
16869 if (grouping == 0) {
16870 if (ru_start_index >= N_SCIDX_80MHZ_NG437)
16871 return SCIDX_END_SENTINAL(0x80000000);
16872 else
16873 return scidx_80MHz_Ng4[ru_start_index].start;
16874 } else {
16875 if (ru_start_index >= N_SCIDX_80MHZ_NG1637)
16876 return SCIDX_END_SENTINAL(0x80000000);
16877 else
16878 return scidx_80MHz_Ng16[ru_start_index].start;
16879 }
16880 case BW_160MHz(3):
16881 return SCIDX_END_SENTINAL(0x80000000);
16882 }
16883
16884 /*
16885 * for BW_20MHz it is more complex, and the start and end sets have an
16886 * increment of 2, and around zero they go -4, -2, 2, 4 as well.
16887 */
16888 if (bw == BW_20MHz(0)) {
16889 if (grouping == 0) {
16890 if (scidx == -122)
16891 return -120;
16892 if (scidx == -4)
16893 return -2;
16894 if (scidx == 2)
16895 return 4;
16896 if (scidx == 120)
16897 return 122;
16898 } else {
16899 if (scidx == -122)
16900 return -116;
16901 if (scidx == -4)
16902 return -2;
16903 if (scidx == -2)
16904 return 2;
16905 if (scidx == 2)
16906 return 4;
16907 if (scidx == 116)
16908 return 122;
16909 }
16910 }
16911
16912 if (grouping == 1)
16913 incr = 16;
16914
16915 scidx += incr;
16916
16917 if (scidx == 0) /* Not sure if this is needed */
16918 scidx += incr;
16919
16920 return scidx;
16921}
16922
16923/*
16924 * This might have a problem if there are not enough bits in the TVB.
16925 * Will only handle a limited number of bits.
16926 */
16927static uint16_t
16928he_get_bits(tvbuff_t *tvb, int bit_offset, int bit_len)
16929{
16930 uint32_t bits;
16931 int byte_offset = bit_offset / 8;
16932 int bit_start = bit_offset % 8;
16933 int bit_mask = (1 << bit_len) - 1; /* Select that many bits */
16934 int remaining_length = tvb_reported_length_remaining(tvb, byte_offset);
16935
16936 if (remaining_length >= 3)
16937 bits = tvb_get_letoh24(tvb, byte_offset);
16938 else if (remaining_length == 2)
16939 bits = tvb_get_letohs(tvb, byte_offset);
16940 else
16941 bits = tvb_get_uint8(tvb, byte_offset);
16942
16943 bits = bits >> bit_start;
16944
16945 return bits & bit_mask;
16946}
16947
16948static int
16949dissect_he_feedback_matrix(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
16950 int offset, int bit_offset, int scidx,
16951 int nr, int nc, int phi_bits, int psi_bits,
16952 int hf)
16953{
16954 int ri, ci;
16955 int start_bit_offset = bit_offset;
16956 int start_offset = offset;
16957 wmem_strbuf_t *angles = wmem_strbuf_new(pinfo->pool, NULL((void*)0));
16958
16959 if (nc == nr) /* If they are the same, reduce Nc by one */
16960 nc -= 1;
16961
16962 wmem_strbuf_append_printf(angles, "%d", scidx);
16963 /* Reset to the start bit offset */
16964 bit_offset = start_bit_offset;
16965
16966 for (ci = 1; ci <= nc; ci++) {
16967 for (ri = ci; ri < nr; ri++) {
16968 int angle = he_get_bits(tvb, bit_offset, phi_bits);
16969 wmem_strbuf_append_printf(angles, ", φ%d%d:%d", ri, ci, angle);
16970 bit_offset += phi_bits;
16971 }
16972 for (ri = ci + 1; ri <= nr; ri++) {
16973 int angle = he_get_bits(tvb, bit_offset, psi_bits);
16974 wmem_strbuf_append_printf(angles, ", ψ%d%d:%d", ri, ci, angle);
16975 bit_offset += psi_bits;
16976 }
16977 }
16978
16979 /* Update this */
16980 proto_tree_add_string(tree, hf, tvb, offset,
16981 ((start_bit_offset + 7) / 8) - start_offset,
16982 wmem_strbuf_get_str(angles));
16983
16984 return bit_offset;
16985}
16986
16987static int * const he_mimo_control_headers[] = {
16988 &hf_ieee80211_he_mimo_control_nc_index,
16989 &hf_ieee80211_he_mimo_control_nr_index,
16990 &hf_ieee80211_he_mimo_control_bw,
16991 &hf_ieee80211_he_mimo_control_grouping,
16992 &hf_ieee80211_he_mimo_control_codebook_info,
16993 &hf_ieee80211_he_mimo_control_feedback_type,
16994 &hf_ieee80211_he_mimo_control_remaining_feedback_segs,
16995 &hf_ieee80211_he_mimo_control_first_feedback_seg,
16996 &hf_ieee80211_he_mimo_control_ru_start_index,
16997 &hf_ieee80211_he_mimo_control_ru_end_index,
16998 &hf_ieee80211_he_mimo_control_sounding_dialog_token_num,
16999 &hf_ieee80211_he_mimo_control_reserved,
17000 NULL((void*)0)
17001};
17002
17003/*
17004 * Handle compressed beamforming matrices and CQI
17005 */
17006static unsigned
17007dissect_compressed_beamforming_and_cqi(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17008{
17009 int byte_count = 0;
17010 uint64_t mimo_cntl = tvb_get_letoh40(tvb, offset);
17011 int nc = 0, nr = 0, i;
17012 int bw, grouping, codebook, feedback, bit_offset, scidx;
17013 int phi_bits = 0, psi_bits = 0;
17014 proto_tree *snr_tree = NULL((void*)0), *feedback_tree = NULL((void*)0);
17015 int start_offset;
17016 int ru_start_index, ru_end_index;
17017
17018 nc = (int)((mimo_cntl & 0x07) + 1);
17019 nr = (int)(((mimo_cntl >> 3) & 0x07) + 1);
17020 bw = (int)((mimo_cntl >> 6) & 0x03);
17021 grouping = (int)((mimo_cntl >> 8) & 0x01);
17022 codebook = (int)((mimo_cntl >> 9) & 0x01);
17023 feedback = (int)((mimo_cntl >> 10) & 0x03);
17024 ru_start_index = (int)((mimo_cntl >> 16) & 0x7F);
17025 ru_end_index = (int)((mimo_cntl >> 23) & 0x7F);
17026
17027 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
17028 hf_ieee80211_he_mimo_control_field, ett_ff_he_mimo_control,
17029 he_mimo_control_headers, ENC_LITTLE_ENDIAN0x80000000,
17030 BMT_NO_APPEND0x01);
17031 offset += 5;
17032
17033 snr_tree = proto_tree_add_subtree(tree, tvb, offset, nc,
17034 ett_ff_he_mimo_beamforming_report_snr, NULL((void*)0),
17035 "Average Signal to Noise Ratio");
17036
17037 for (i = 0; i < nc; i++) {
17038 int8_t snr = tvb_get_int8(tvb, offset);
17039
17040 proto_tree_add_int_format(snr_tree,
17041 hf_ieee80211_he_compressed_beamforming_report_snr, tvb, offset, 1,
17042 snr, "Stream %d: %s%0.2fdB (0x%02x)", i, (snr == 127 ? ">=" :
17043 (snr == -128 ? "<=" : "")),
17044 (float)((float)88 + snr)/4,
17045 (uint8_t)snr);
17046 offset++;
17047 }
17048
17049 /*
17050 * The rest of the data consists of the compressed beamforming matrices, one
17051 * for each SCIDX per group. Each matrix consists of phi and psi angles
17052 * encoded using the number of bits specified using the codebook field.
17053 *
17054 * The matrices contain a number entries related to Nr -1 & Nc except when
17055 * Nr == Nc, and then it is Nr -1 x Nc -1, with Nr - 1 phi angles, Nc - 1
17056 * psi angles, Nr - 2 phi angles, Nc - 2 psi angles ...
17057 */
17058 if (feedback == 0) { /* SU */
17059 if (codebook == 0) {
17060 psi_bits = 2; phi_bits = 4;
17061 } else {
17062 psi_bits = 4; phi_bits = 6;
17063 }
17064 } else if (feedback == 1) { /* MU */
17065 if (grouping == 1) {
17066 psi_bits = 9; phi_bits = 7;
17067 } else {
17068 if (codebook == 0) {
17069 psi_bits = 5; phi_bits = 7;
17070 } else {
17071 psi_bits = 7; phi_bits = 9;
17072 }
17073 }
17074 } /* DO something about CQI etc. */
17075
17076 feedback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
17077 ett_ff_he_mimo_feedback_matrices, NULL((void*)0),
17078 "Feedback Matrices");
17079
17080 start_offset = offset;
17081 bit_offset = offset * 8;
17082 scidx = SCIDX_END_SENTINAL(0x80000000);
17083 while ((scidx = next_he_scidx(scidx, bw, grouping, feedback,
17084 ru_start_index, ru_end_index)) != (int)SCIDX_END_SENTINAL(0x80000000)) {
17085 int prev_bit_offset = bit_offset;
17086 bit_offset = dissect_he_feedback_matrix(feedback_tree, tvb, pinfo, offset,
17087 bit_offset, scidx, nr, nc, phi_bits, psi_bits,
17088 hf_ieee80211_he_compressed_beamform_scidx);
17089 if (bit_offset <= prev_bit_offset) {
17090 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
17091 break;
17092 }
17093
17094 offset = bit_offset / 8;
17095 }
17096
17097 offset = (bit_offset + 7) / 8;
17098 proto_item_set_len(feedback_tree, offset - start_offset);
17099
17100 /* Sometimes the FCS is in the buffer as well ... */
17101 byte_count = tvb_reported_length_remaining(tvb, offset);
17102 if (byte_count > 0)
17103 offset += byte_count; /* Should fix the real problem */
17104
17105 return offset;
17106}
17107
17108enum quiet_time_period_control {
17109 QTP_CONTROL_SETUP = 0,
17110 QTP_CONTROL_REQUEST = 1,
17111 QTP_CONTROL_RESPONSE = 2,
17112};
17113
17114static const range_string quiet_time_period_control_rvals[] = {
17115 { QTP_CONTROL_SETUP, QTP_CONTROL_SETUP, "Quiet Time Period Setup" },
17116 { QTP_CONTROL_REQUEST, QTP_CONTROL_REQUEST, "Quiet Time Period Request" },
17117 { QTP_CONTROL_RESPONSE, QTP_CONTROL_RESPONSE, "Quiet Time Period Response" },
17118 { QTP_CONTROL_RESPONSE +1 , 255, "Reserved" },
17119 { 0, 0, NULL((void*)0) }
17120};
17121
17122static void
17123dissect_bss_color_change(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17124proto_tree *tree, int offset, int len _U___attribute__((unused)));
17125
17126static unsigned
17127dissect_quiet_time_period(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17128proto_tree *tree, int offset, int len _U___attribute__((unused)))
17129{
17130 uint8_t control = tvb_get_uint8(tvb, offset);
17131
17132 proto_tree_add_item(tree, hf_ieee80211_he_qtp_control, tvb, offset, 1, ENC_NA0x00000000);
17133 offset += 1;
17134
17135 switch (control)
17136 {
17137 case QTP_CONTROL_SETUP:
17138 proto_tree_add_item(tree, hf_ieee80211_he_qtp_setup_quiet_period_duration, tvb, offset,
17139 1, ENC_NA0x00000000);
17140 offset += 1;
17141 proto_tree_add_item(tree, hf_ieee80211_he_qtp_setup_srv_specific_identif, tvb, offset,
17142 2, ENC_LITTLE_ENDIAN0x80000000);
17143 offset += 2;
17144 break;
17145
17146 case QTP_CONTROL_REQUEST:
17147 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_dialog_token, tvb, offset, 2,
17148 ENC_LITTLE_ENDIAN0x80000000);
17149 offset += 2;
17150 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_offset, tvb, offset,
17151 1, ENC_NA0x00000000);
17152 offset += 1;
17153 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_duration, tvb, offset,
17154 2, ENC_LITTLE_ENDIAN0x80000000);
17155 offset += 2;
17156 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_quiet_period_interval, tvb, offset,
17157 1, ENC_NA0x00000000);
17158 offset += 1;
17159 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_repetition_count, tvb, offset, 1,
17160 ENC_NA0x00000000);
17161 offset += 1;
17162 proto_tree_add_item(tree, hf_ieee80211_he_qtp_request_srv_specific_identif, tvb, offset,
17163 2, ENC_LITTLE_ENDIAN0x80000000);
17164 offset += 2;
17165 break;
17166
17167 case QTP_CONTROL_RESPONSE:
17168 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_dialog_token, tvb, offset, 2,
17169 ENC_LITTLE_ENDIAN0x80000000);
17170 offset += 2;
17171 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_status_code, tvb, offset, 1,
17172 ENC_NA0x00000000);
17173 offset += 1;
17174 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_offset, tvb, offset,
17175 1, ENC_NA0x00000000);
17176 offset += 1;
17177 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_duration, tvb, offset,
17178 2, ENC_LITTLE_ENDIAN0x80000000);
17179 offset += 2;
17180 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_quiet_period_interval, tvb, offset,
17181 1, ENC_NA0x00000000);
17182 offset += 1;
17183 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_repetition_count, tvb, offset,
17184 1, ENC_NA0x00000000);
17185 offset += 1;
17186 proto_tree_add_item(tree, hf_ieee80211_he_qtp_response_srv_specific_identif, tvb, offset,
17187 2, ENC_LITTLE_ENDIAN0x80000000);
17188 offset += 2;
17189 break;
17190
17191 default:
17192 /* Reserved */
17193 break;
17194 }
17195
17196 return offset;
17197}
17198
17199static unsigned
17200add_ff_action_he(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17201{
17202 unsigned start = offset;
17203 uint8_t he_action;
17204 uint8_t length;
17205 //uint8_t elem_id, elem_id_extension;
17206 proto_item *item;
17207 proto_tree *subtree;
17208 unsigned int len = tvb_reported_length_remaining(tvb, offset);
17209
17210 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17211
17212 item = proto_tree_add_item_ret_uint8(tree, hf_ieee80211_ff_he_action, tvb, offset, 1, ENC_NA0x00000000, &he_action);
17213 offset += 1;
17214
17215 subtree = proto_item_add_subtree(item, ett_ff_he_action);
17216
17217
17218 switch (he_action) {
17219 case HE_COMPRESSED_BEAMFORMING_AND_CQI0:
17220 proto_tree_add_uint_format(subtree, hf_ieee80211_he_beamforming_report_len,
17221 tvb, offset, 0, len, "Total length: %u", len);
17222 offset = dissect_compressed_beamforming_and_cqi(subtree, tvb, pinfo, offset);
17223 break;
17224
17225 case HE_QUIET_TIME_PERIOD1:
17226 //elem_id = tvb_get_uint8(tvb, offset);
17227 length = tvb_get_uint8(tvb, offset + 1);
17228 //elem_id_extension = tvb_get_uint8(tvb, offset + 2);
17229 /* Should check following condition?
17230 * elem_id == TAG_ELEMENT_ID_EXTENSION && elem_id_extension == ETAG_QUIET_TIME_PERIOD
17231 */
17232 offset = dissect_quiet_time_period(tvb, pinfo, subtree, offset + 3, length);
17233 break;
17234
17235 default:
17236 break;
17237 }
17238 return offset - start;
17239}
17240
17241static unsigned
17242add_ff_action_protected_he(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17243{
17244 unsigned start = offset;
17245 uint8_t protected_he_action;
17246 uint8_t length;
17247 //uint8_t elem_id, elem_id_extension;
17248 proto_item *item;
17249 proto_tree *subtree;
17250
17251 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17252
17253 protected_he_action = tvb_get_uint8(tvb, offset);
17254
17255 item = proto_tree_add_item(tree, hf_ieee80211_ff_protected_he_action, tvb, offset,
17256 1, ENC_NA0x00000000);
17257 offset += 1;
17258
17259 subtree = proto_item_add_subtree(item, ett_ff_protected_he_action);
17260
17261
17262 switch (protected_he_action) {
17263 case HE_BSS_COLOR_CHANGE_ANNOUNCEMENT0:
17264 //elem_id = tvb_get_uint8(tvb, offset);
17265 length = tvb_get_uint8(tvb, offset + 1);
17266 //elem_id_extension = tvb_get_uint8(tvb, offset + 2);
17267 /* Should check following condition?
17268 * elem_id == TAG_ELEMENT_ID_EXTENSION && elem_id_extension == ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT
17269 */
17270 dissect_bss_color_change(tvb, pinfo, subtree, offset + 3, length);
17271 offset += 5;
17272 break;
17273
17274 default:
17275 break;
17276 }
17277
17278 return offset - start;
17279}
17280
17281static unsigned
17282add_ff_action_protected_ftm(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17283{
17284 unsigned start = offset;
17285 uint8_t action;
17286
17287 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17288 proto_tree_add_item_ret_uint8(tree, hf_ieee80211_ff_protected_ftm_action, tvb, offset, 1, ENC_NA0x00000000, &action);
17289 offset += 1;
17290
17291 col_set_str(pinfo->cinfo, COL_INFO, val_to_str_const(action, protected_ftm_action_vals, "Unknown"));
17292
17293 switch (action) {
17294 case 1:
17295 offset += add_ff_ftm_request(tree, tvb, pinfo, offset);
17296 break;
17297 case 2:
17298 offset += add_ff_ftm(tree, tvb, pinfo, offset);
17299 break;
17300 case 3:
17301 offset += add_ff_lmr_report(tree, tvb, pinfo, offset);
17302 break;
17303 default: /* reserved */
17304 break;
17305 }
17306
17307 return offset - start;
17308}
17309
17310static int * const eht_reconfig_link_id_hdrs[] = {
17311 &hf_ieee80211_eht_reconfig_link_id,
17312 &hf_ieee80211_eht_reconfig_link_id_reserved,
17313 NULL((void*)0)
17314};
17315
17316static unsigned
17317add_ff_count(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
17318{
17319 proto_tree_add_item(tree, hf_ieee80211_ff_count, tvb, offset, 1,
17320 ENC_LITTLE_ENDIAN0x80000000);
17321 return 1;
17322}
17323
17324static unsigned
17325add_ff_action_protected_eht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
17326{
17327 unsigned start = offset;
17328 uint8_t protected_eht_action;
17329 proto_item *item;
17330 int len = 0, count, i, id;
17331 uint16_t status;
17332 bool_Bool invalid = false0;
17333 /* Default Extension Element is Multi-Link */
17334 uint8_t ext_ids[1] = {ETAG_MULTI_LINK107};
17335 proto_tree *sub_tree;
17336
17337 offset += add_ff_category_code(tree, tvb, pinfo, offset);
17338
17339 protected_eht_action = tvb_get_uint8(tvb, offset);
17340
17341 item = proto_tree_add_item(tree, hf_ieee80211_ff_protected_eht_action, tvb,
17342 offset, 1, ENC_NA0x00000000);
17343 offset += 1;
17344
17345 switch (protected_eht_action) {
17346 case EHT_TID_LINK_MAP_REQ0:
17347 ext_ids[0] = ETAG_TID_TO_LINK_MAPPING109;
17348 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17349
17350 /*
17351 * Next contains one or two TID-To-Link mappings. We have to look into
17352 * the elements to verify them because we don't have the length of this
17353 * element and there might be other IEs after us.
17354 */
17355 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17356 len = tvb_get_uint8(tvb, offset + 1);
17357 } else {
17358 invalid = true1;
17359 }
17360 if (!invalid && (len >= 1) &&
17361 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17362 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17363 offset += len + 2;
17364 } else {
17365 invalid = true1;
17366 }
17367 if (invalid) {
17368 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17369 "Invalid TID_TO_LINK_MAPPING_REQUEST. "
17370 "There should be one or two Tid-To-Link IEs "
17371 "but none found");
17372 break;
17373 }
17374
17375 len = 0;
17376 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17377 len = tvb_get_uint8(tvb, offset + 1);
17378 }
17379 if ((len >= 1) &&
17380 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17381 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17382 offset += len + 2;
17383 }
17384 break;
17385 case EHT_TID_LINK_MAP_RESP1:
17386 ext_ids[0] = ETAG_TID_TO_LINK_MAPPING109;
17387 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17388
17389 status = tvb_get_ntohs(tvb, offset);
17390 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17391 if (status == 134) {
17392 /* There should be one or two TID-To-Link mappings. */
17393 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17394 len = tvb_get_uint8(tvb, offset + 1);
17395 } else {
17396 invalid = true1;
17397 }
17398 if (!invalid && (len >= 1) &&
17399 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17400 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17401 offset += len + 2;
17402 } else {
17403 invalid = true1;
17404 }
17405 if (invalid) {
17406 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17407 "Invalid TID_TO_LINK_MAPPING_RESPONSE. "
17408 "There should be one or two Tid-To-Link IEs "
17409 "but none found");
17410 break;
17411 }
17412
17413 len = 0;
17414 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17415 len = tvb_get_uint8(tvb, offset + 1);
17416 }
17417 if ((len >= 1) &&
17418 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17419 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17420 offset += len + 2;
17421 }
17422 }
17423 break;
17424 case EHT_TID_LINK_MAP_TEAR_DOWN2:
17425 /* Seems to be nothing to do here */
17426 break;
17427 case EHT_EPCS_PRIO_ACCESS_REQ3:
17428 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17429 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17430 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17431 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));
17432 }
17433 break;
17434 case EHT_EPCS_PRIO_ACCESS_RESP4:
17435 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17436 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17437 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17438 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17439 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));
17440 }
17441 break;
17442 case EHT_EPCS_PRIO_ACCESS_TEAR_DOWN5:
17443 break;
17444 case EHT_EML_OP_MODE_NOTIFICATION6:
17445 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17446 offset += dissect_eht_eml_control_field(tree, tvb, pinfo, offset);
17447 break;
17448 case EHT_LINK_RECOMMENDATION7:
17449 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
17450 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17451 len = tvb_get_uint8(tvb, offset + 1);
17452 } else {
17453 invalid = true1;
17454 }
17455 ext_ids[0] = ETAG_AID_BITMAP134;
17456 if (!invalid && (len >= 1) &&
17457 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17458 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17459 offset += len + 2;
17460 } else {
17461 invalid = true1;
17462 }
17463 if (invalid) {
17464 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17465 "Invalid LINK_RECOMMENDATION. "
17466 "There should be AID_BITMAP element "
17467 "but none found");
17468 break;
17469 }
17470
17471 invalid = false0;
17472 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17473 len = tvb_get_uint8(tvb, offset + 1);
17474 } else {
17475 invalid = true1;
17476 }
17477 ext_ids[0] = ETAG_MULTI_LINK_TRAFFIC110;
17478 if (!invalid && (len >= 1) &&
17479 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17480 0, false0, ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), false0, NULL((void*)0)) > 0)) {
17481 offset += len + 2;
17482 } else {
17483 invalid = true1;
17484 }
17485 if (invalid) {
17486 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17487 "Invalid LINK_RECOMMENDATION. "
17488 "There should be MULTI_LINK_TRAFFIC element "
17489 "but none found");
17490 break;
17491 }
17492 break;
17493 case EHT_MULTI_LINK_OP_UPDATE_REQ8:
17494 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17495 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17496 len = tvb_get_uint8(tvb, offset + 1);
17497 } else {
17498 invalid = true1;
17499 }
17500 if (!invalid && (len >= 1)) {
17501 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17502 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));
17503 } else {
17504 invalid = true1;
17505 }
17506 if (invalid) {
17507 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17508 "Invalid Multi-Link Operation Update Request. "
17509 "There should be Reconf Multi-Link element "
17510 "but none found");
17511 break;
17512 }
17513 break;
17514 case EHT_MULTI_LINK_OP_UPDATE_RESP9:
17515 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17516 offset += add_ff_status_code(tree, tvb, pinfo, offset);
17517 break;
17518 case EHT_LINK_RECONFIG_NOTIFY10:
17519 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17520 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17521 len = tvb_get_uint8(tvb, offset + 1);
17522 } else {
17523 invalid = TRUE(!(0));
17524 }
17525 if (!invalid && (len >= 1)) {
17526 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17527 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));
17528 } else {
17529 invalid = TRUE(!(0));
17530 }
17531 if (invalid) {
17532 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17533 "Invalid Link Reconfiguration Notify. "
17534 "There should be Reconf Multi-Link element "
17535 "but none found");
17536 break;
17537 }
17538 break;
17539 case EHT_LINK_RECONFIG_REQ11:
17540 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17541 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17542 len = tvb_get_uint8(tvb, offset + 1);
17543 } else {
17544 invalid = TRUE(!(0));
17545 }
17546 if (!invalid && (len >= 1)) {
17547 offset += add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0,
17548 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));
17549 } else {
17550 invalid = TRUE(!(0));
17551 }
17552 if (invalid) {
17553 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17554 "Invalid Link Reconfiguration Req. "
17555 "There should be Reconf Multi-Link element "
17556 "but none found");
17557 break;
17558 }
17559 ext_ids[0] = ETAG_OCI54;
17560 if (tvb_captured_length_remaining(tvb, offset) >= 2) {
17561 len = tvb_get_uint8(tvb, offset + 1);
17562 } else {
17563 /* OCI element field is optionally present */
17564 break;
17565 }
17566 if (!invalid && (len >= 1) &&
17567 (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, NULL((void*)0),
17568 0, FALSE(0), ext_ids, G_N_ELEMENTS(ext_ids)(sizeof (ext_ids) / sizeof ((ext_ids)[0])), FALSE(0), NULL((void*)0)) > 0)) {
17569 offset += len + 2;
17570 } else {
17571 invalid = TRUE(!(0));
17572 }
17573 if (invalid) {
17574 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17575 "Invalid Link Reconfiguration Req. "
17576 "There should be OCI element but none found");
17577 break;
17578 }
17579 break;
17580 case EHT_LINK_RECONFIG_RESP12:
17581 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
17582 count = tvb_get_uint8(tvb, offset);
17583 offset += add_ff_count(tree, tvb, pinfo, offset);
17584 if (count == 0)
17585 break;
17586
17587 sub_tree = proto_tree_add_subtree(tree, tvb, offset, count * 3,
17588 ett_eht_reconfig_status_list, NULL((void*)0),
17589 "Reconfiguration Status List");
17590 for (i = 0; i < count; i++) {
17591 proto_tree_add_bitmask(sub_tree, tvb, offset,
17592 hf_ieee80211_eht_reconfig_link_id_info,
17593 ett_eht_multi_link_common_info_link_id,
17594 eht_reconfig_link_id_hdrs, ENC_NA0x00000000);
17595 offset += 1;
17596 proto_tree_add_item(sub_tree, hf_ieee80211_eht_reconfig_status_code, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
17597 offset += 2;
17598 }
17599
17600 if (tvb_captured_length_remaining(tvb, offset) <= 0)
17601 break;
17602
17603 /* Check next is Group Key Data */
17604 id = tvb_get_uint8(tvb, offset);
17605 if (id != 0xdd && id != 0xff) {
17606 sub_tree = proto_tree_add_subtree(tree, tvb, offset, id,
17607 ett_eht_group_key_data, NULL((void*)0),
17608 "Group Key Data");
17609 proto_tree_add_item(sub_tree, hf_ieee80211_eht_group_key_data_length, tvb, offset, 1, ENC_NA0x00000000);
17610 offset += 1;
17611 while (tvb_reported_length_remaining(tvb, offset)) {
17612 id = tvb_get_uint8(tvb, offset);
17613 /* Key Data should be MLO KDEs */
17614 if (id != 0xdd)
17615 break;
17616 offset += add_tagged_field(pinfo, sub_tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
17617 }
17618 }
17619 break;
17620 default:
17621 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
17622 "Reserved Protected EHT Action %u",
17623 protected_eht_action);
17624
17625 break;
17626 }
17627
17628 return offset - start;
17629}
17630
17631/*
17632 * Structure for handling the EHT scidx info. Allows for a compact
17633 * representation.
17634 */
17635struct scidx_part {
17636 unsigned start_val; /* What we start at */
17637 bool_Bool use_ng; /* Should we use Ng or the inc next */
17638 unsigned inc; /* The increment when not using Ng */
17639 unsigned stop_val; /* When we should stop */
17640 bool_Bool last_ent; /* This is the last one in the list */
17641};
17642
17643struct scidx_ctx {
17644 uint8_t ru_index;
17645 const struct scidx_part *scidx_array;
17646 uint8_t ng;
17647 bool_Bool just_inited;
17648 unsigned last_val;
17649};
17650
17651static const struct scidx_part ru_242_tone_1_20MHz_ng4[] = {
17652 { -122, false0, 2, -120, false0 },
17653 { -120, true1, 0, -4, false0 },
17654 { -2, false0, 4, 2, false0 },
17655 { 4, true1, 0, 120, false0 },
17656 { 120, false0, 2, 122, true1 }
17657};
17658
17659static const struct scidx_part ru_242_tone_1_20MHz_ng16[] = {
17660 { -122, false0, 6, -116, false0 },
17661 { -116, true1, 0, -4, false0 },
17662 { -2, false0, 4, 2, false0 },
17663 { 4, true1, 0, 116, false0 },
17664 { 116, false0, 6, 122, true1 }
17665};
17666
17667/* Here, there is one per RU index */
17668/*Start, UseNg, Inc,End, last */
17669static const struct scidx_part ru_242_tone_40MHz[] = {
17670 { -244, true1, 0, -4, true1 },
17671 { 4, true1, 0, 244, true1 }
17672};
17673
17674static const struct scidx_part ru_242_tone_80MHz[] = {
17675 { -500, true1, 0, -260, true1 },
17676 { -252, true1, 0, -12, true1 },
17677 { 12, true1, 0, 252, true1 },
17678 { 260, true1, 0, 500, true1 }
17679};
17680
17681static const struct scidx_part ru_242_tone_160MHz[] = {
17682 { -1012, true1, 0, -772, true1 },
17683 { -764, true1, 0, -524, true1 },
17684 { -500, true1, 0, -260, true1 },
17685 { -252, true1, 0, -12, true1 },
17686 { 12, true1, 0, 252, true1 },
17687 { 260, true1, 0, 500, true1 },
17688 { 524, true1, 0, 764, true1 },
17689 { 772, true1, 0, 1012, true1 }
17690};
17691
17692static const struct scidx_part ru_242_tone_320MHz[] = {
17693 { -2036, true1, 0, -1796, true1 },
17694 { -1788, true1, 0, -1548, true1 },
17695 { -1524, true1, 0, -1284, true1 },
17696 { -1276, true1, 0, -1036, true1 },
17697 { -1012, true1, 0, -772, true1 },
17698 { -764, true1, 0, -524, true1 },
17699 { -500, true1, 0, -260, true1 },
17700 { -252, true1, 0, -12, true1 },
17701 { 12, true1, 0, 252, true1 },
17702 { 260, true1, 0, 500, true1 },
17703 { 524, true1, 0, 764, true1 },
17704 { 772, true1, 0, 1012, true1 },
17705 { 1036, true1, 0, 1276, true1 },
17706 { 1284, true1, 0, 1524, true1 },
17707 { 1548, true1, 0, 1788, true1 },
17708 { 1796, true1, 0, 2036, true1 }
17709};
17710
17711/* All these ru_96 tone sets for NG=4 go in pairs. */
17712static const struct scidx_part ru_996_tone_80MHz_ng4[] = {
17713 { -500, false0, 4, -4, false0 },
17714 { 4, false0, 4, 500, true1 }
17715};
17716
17717static const struct scidx_part ru_996_tone_80MHz_ng16[] = {
17718 { -500, true1, 0, -260, false0 },
17719 { -252, true1, 0, -12, false0 },
17720 { -4, false0, 8, 4, false0 },
17721 { 12, true1, 0, 252, false0 },
17722 { 260, true1, 0, 500, true1 }
17723};
17724
17725static const struct scidx_part ru_996_tone_160MHz_ng4[] = {
17726 { -1012, true1, 0, -516, false0 },
17727 { -508, true1, 0, -12, true1 },
17728
17729 { 12, true1, 0, 508, false0 },
17730 { 516, true1, 0, 1012, true1 }
17731};
17732
17733static const struct scidx_part ru_996_tone_160MHz_ng16[] = {
17734 { -1012, true1, 0, -772, false0 },
17735 { -764, true1, 0, -524, false0 },
17736 { -516, false0, 8, -508, false0 },
17737 { -500, true1, 0, -260, false0 },
17738 { -252, true1, 0, -12 , true1 },
17739
17740 { 12, true1, 0, 252, false0 },
17741 { 260, true1, 0, 500, false0 },
17742 { 508, false0, 8, 516, false0 },
17743 { 524, true1, 0, 764, false0 },
17744 { 772, true1, 0, 1012, true1 }
17745};
17746
17747static const struct scidx_part ru_996_tone_320MHz_ng4[] = {
17748 { -2036, true1, 0, -1540, false0 },
17749 { -1532, true1, 0, -1036, true1 },
17750
17751 { -1012, true1, 0, -516, false0 },
17752 { -508, true1, 0, -12, true1 },
17753
17754 { 12, true1, 0, 508, false0 },
17755 { 516, true1, 0, 1012, true1 },
17756
17757 { 1036, true1, 0, 1532, false0 },
17758 { 1540, true1, 0, 2036, true1 }
17759};
17760
17761static const struct scidx_part ru_996_tone_320MHz_ng16[] = {
17762 { -2036, true1, 0, -1796, false0 },
17763 { -1788, true1, 0, -1548, false0 },
17764 { -1540, false0, 8, -1532, false0 },
17765 { -1524, true1, 0, -1284, false0 },
17766 { -1276, true1, 0, -1036, true1 },
17767
17768 { -1012, true1, 0, -772, false0 },
17769 { -764, true1, 0, -524, false0 },
17770 { -516, false0, 8, -508, false0 },
17771 { -500, true1, 0, -260, false0 },
17772 { -252, true1, 0, -12, true1 },
17773
17774 { 12, true1, 0, 252, false0 },
17775 { 260, true1, 0, 500, false0 },
17776 { 508, false0, 8, 516, false0 },
17777 { 524, true1, 0, 764, false0 },
17778 { 772, true1, 0, 1012, true1 },
17779
17780 { 1036, true1, 0, 1276, false0 },
17781 { 1284, true1, 0, 1524, false0 },
17782 { 1532, false0, 8, 1540, false0 },
17783 { 1548, true1, 0, 1788, false0 },
17784 { 1796, true1, 0, 2036, true1 }
17785};
17786
17787
17788static void
17789init_eht_scidx(struct scidx_ctx *ctx, uint8_t ru_index,
17790 const struct scidx_part *scidx_array, uint8_t ng)
17791{
17792 ctx->ru_index = ru_index;
17793 ctx->scidx_array = scidx_array;
17794 ctx->ng = ng;
17795 ctx->just_inited = true1;
17796}
17797
17798/* What about the special 20MHz ones? */
17799/* Figure out the next SCIDX */
17800static bool_Bool
17801next_eht_scidx(struct scidx_ctx *ctx, unsigned *scidx)
17802{
17803 if (ctx->just_inited) {
17804 ctx->last_val = ctx->scidx_array->start_val;
17805 ctx->just_inited = false0;
17806 *scidx = ctx->last_val;
17807 return true1;
17808 }
17809
17810 /* Move to the next val ... but check if it is a short seg first */
17811 if (ctx->last_val == ctx->scidx_array->stop_val) {
17812 if (ctx->scidx_array->last_ent) {
17813 return false0;
17814 } else {
17815 /* Pretend like we just started again */
17816 /* Also, note that the arrays need to be set up correctly */
17817 ctx->scidx_array++;
17818 if (ctx->last_val == ctx->scidx_array->start_val) {
17819 if (ctx->scidx_array->use_ng) {
17820 ctx->last_val += ctx->ng;
17821 } else {
17822 ctx->last_val += ctx->scidx_array->inc;
17823 }
17824 } else {
17825 ctx->last_val = ctx->scidx_array->start_val;
17826 }
17827 *scidx = ctx->last_val;
17828 return true1;
17829 }
17830 }
17831
17832 /*
17833 * If the increment is not ng, then handle that.
17834 */
17835 if (ctx->scidx_array->use_ng) {
17836 ctx->last_val += ctx->ng;
17837 } else {
17838 ctx->last_val += ctx->scidx_array->inc;
17839 }
17840 *scidx = ctx->last_val;
17841
17842 return true1;
17843}
17844
17845static int
17846add_ff_eht_mu_exclusive_20MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17847 int offset, uint8_t nc_index,
17848 uint8_t grouping, uint16_t partial_bw_info _U___attribute__((unused)))
17849{
17850 int start_offset = offset;
17851 unsigned scidx;
17852 struct scidx_ctx scidx_ctx;
17853 uint8_t ng = grouping == 0 ? 4 : 16;
17854 proto_tree *ru_index_tree = NULL((void*)0);
17855 proto_item *ruii = NULL((void*)0);
17856 unsigned ss = 0, get_snr = 1;
17857 int8_t snr = 0, value;
17858
17859 if (ng == 4) {
17860 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng4[0], ng);
17861 } else {
17862 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng16[0], ng);
17863 }
17864
17865 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17866 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17867 &ruii,
17868 "RU Index %d for 20MHz, Partial BW "
17869 "not all one.", 1);
17870 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17871 for (ss = 1; ss <= nc_index; ss++) {
17872 if (get_snr) {
17873 snr = tvb_get_int8(tvb, offset);
17874 offset += 1;
17875 value = snr & 0x0f;
17876 get_snr = 0;
17877 } else {
17878 value = snr >> 4;
17879 get_snr = 1;
17880 }
17881 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17882 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17883 ss, scidx, value);
17884 }
17885 }
17886 proto_item_set_len(ruii, offset - start_offset);
17887 return offset - start_offset;
17888}
17889
17890static int
17891add_ff_eht_mu_exclusive_40MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17892 int offset, uint8_t nc_index,
17893 uint8_t grouping, uint16_t partial_bw_info)
17894{
17895 int start_offset = offset;
17896 int i = 0;
17897 struct scidx_ctx scidx_ctx;
17898 unsigned scidx;
17899 uint8_t ng = grouping == 0 ? 4 : 16;
17900 proto_tree *ru_index_tree = NULL((void*)0);
17901 proto_item *ruii = NULL((void*)0);
17902 unsigned ss = 0, get_snr = 1;
17903 int8_t snr = 0, value;
17904
17905 /* Add each of the RU index groups set */
17906 for (i = 1; i <= 2; i++) {
17907 int tree_offset = offset;
17908 if ((partial_bw_info & (1 << i)) == 0x0) {
17909 continue; /* Only dissect those with the bit set */
17910 }
17911
17912 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_40MHz[i - 1], ng);
17913 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17914 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17915 &ruii,
17916 "RU Index %d for 40MHz, Partial BW "
17917 "not all one.", i);
17918 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17919 for (ss = 1; ss <= nc_index; ss++) {
17920 if (get_snr) {
17921 snr = tvb_get_int8(tvb, offset);
17922 offset += 1;
17923 value = snr & 0x0f;
17924 get_snr = 0;
17925 } else {
17926 value = snr >> 4;
17927 get_snr = 1;
17928 }
17929 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17930 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17931 ss, scidx, value);
17932 }
17933 }
17934 proto_item_set_len(ruii, offset - tree_offset);
17935 }
17936
17937 return offset - start_offset;
17938}
17939
17940static int
17941add_ff_eht_mu_exclusive_80MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
17942 int offset, uint8_t nc_index,
17943 uint8_t grouping, uint16_t partial_bw_info)
17944{
17945 int start_offset = offset;
17946 int i = 0;
17947 struct scidx_ctx scidx_ctx;
17948 unsigned scidx;
17949 uint8_t ng = grouping == 0 ? 4 : 16;
17950 proto_tree *ru_index_tree = NULL((void*)0);
17951 proto_item *ruii = NULL((void*)0);
17952 unsigned ss = 0, get_snr = 1;
17953 int8_t snr = 0, value;
17954
17955 if (partial_bw_info == 0x1E) { /* Uses 996-tone RU indices */
17956 if (ng == 4) {
17957 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng4[0], ng);
17958 } else {
17959 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng16[0], ng);
17960 }
17961 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17962 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17963 &ruii,
17964 "996-tone RU Index %d for 80MHz", 1);
17965 while (next_eht_scidx(&scidx_ctx, &scidx)) {
17966 for (ss = 1; ss <= nc_index; ss++) {
17967 if (get_snr) {
17968 snr = tvb_get_int8(tvb, offset);
17969 offset += 1;
17970 value = snr & 0x0f;
17971 get_snr = 0;
17972 } else {
17973 value = snr >> 4;
17974 get_snr = 1;
17975 }
17976 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
17977 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
17978 ss, scidx, value);
17979 }
17980 }
17981 proto_item_set_len(ruii, offset - start_offset);
17982
17983 return offset - start_offset;
17984 }
17985
17986 /* Add each of the RU index groups */
17987 for (i = 1; i <= 4; i++) {
17988 int tree_offset = offset;
17989 if ((partial_bw_info & (1 << i)) == 0x0) {
17990 continue; /* Only dissect those with the bit set */
17991 }
17992
17993 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_80MHz[i - 1], ng);
17994 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
17995 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
17996 &ruii,
17997 "RU Index %d for 80MHz, Partial BW "
17998 "not all one.", i);
17999 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18000 for (ss = 1; ss <= nc_index; ss++) {
18001 if (get_snr) {
18002 snr = tvb_get_int8(tvb, offset);
18003 offset += 1;
18004 value = snr & 0x0f;
18005 get_snr = 0;
18006 } else {
18007 value = snr >> 4;
18008 get_snr = 1;
18009 }
18010 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18011 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18012 ss, scidx, value);
18013 }
18014 }
18015 proto_item_set_len(ruii, offset - tree_offset);
18016 }
18017
18018 return offset - start_offset;
18019}
18020
18021static int
18022add_ff_eht_mu_exclusive_160MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
18023 int offset, uint8_t nc_index,
18024 uint8_t grouping, uint16_t partial_bw_info)
18025{
18026 int start_offset = offset;
18027 int tree_offset;
18028 int i = 0;
18029 struct scidx_ctx scidx_ctx;
18030 unsigned scidx;
18031 uint8_t ng = grouping == 0 ? 4 : 16;
18032 proto_tree *ru_index_tree = NULL((void*)0);
18033 proto_item *ruii = NULL((void*)0);
18034 unsigned ss = 0, get_snr = 1;
18035 int8_t snr = 0, value;
18036
18037 /* Is the first lot a 996-tone RU? */
18038 if ((partial_bw_info & 0x1E) == 0x1E) { /* Uses 996-tone RU indices */
18039 tree_offset = offset;
18040 if (ng == 4) {
18041 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[0], ng);
18042 } else {
18043 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[0], ng);
18044 }
18045 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18046 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18047 &ruii,
18048 "996-tone RU Index %d for 160MHz", 1);
18049 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18050 for (ss = 1; ss <= nc_index; ss++) {
18051 if (get_snr) {
18052 snr = tvb_get_int8(tvb, offset);
18053 offset += 1;
18054 value = snr & 0x0f;
18055 get_snr = 0;
18056 } else {
18057 value = snr >> 4;
18058 get_snr = 1;
18059 }
18060 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18061 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18062 ss, scidx, value);
18063 }
18064 }
18065 proto_item_set_len(ruii, offset - tree_offset);
18066 } else {
18067 /* Add each of the RU index groups for the lower 80MHz */
18068 for (i = 1; i <= 4; i++) {
18069 if ((partial_bw_info & (1 << i)) == 0x0) {
18070 continue; /* Only dissect those with the bit set */
18071 }
18072
18073 tree_offset = offset;
18074 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18075 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18076 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18077 &ruii,
18078 "RU Index %d for 160MHz, Partial BW "
18079 "not all one, lower 80MHz.", i);
18080 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18081 for (ss = 1; ss <= nc_index; ss++) {
18082 if (get_snr) {
18083 snr = tvb_get_int8(tvb, offset);
18084 offset += 1;
18085 value = snr & 0x0f;
18086 get_snr = 0;
18087 } else {
18088 value = snr >> 4;
18089 get_snr = 1;
18090 }
18091 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18092 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18093 ss, scidx, value);
18094 }
18095 }
18096 proto_item_set_len(ruii, offset - tree_offset);
18097 }
18098 }
18099
18100 /* Is the second lot a 996-tone RU? */
18101 get_snr = 1;
18102 if ((partial_bw_info & 0x1E0) == 0x1E0) { /* Uses 996-tone RU indices */
18103 tree_offset = offset;
18104 if (ng == 4) {
18105 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[2], ng);
18106 } else {
18107 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[5], ng);
18108 }
18109 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18110 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18111 &ruii,
18112 "996-tone RU Index %d for 160MHz", 2);
18113 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18114 for (ss = 1; ss <= nc_index; ss++) {
18115 if (get_snr) {
18116 snr = tvb_get_int8(tvb, offset);
18117 offset += 1;
18118 value = snr & 0x0f;
18119 get_snr = 0;
18120 } else {
18121 value = snr >> 4;
18122 get_snr = 1;
18123 }
18124 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18125 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18126 ss, scidx, value);
18127 }
18128 }
18129 proto_item_set_len(ruii, offset - tree_offset);
18130 } else {
18131 /* Add each of the RU index groups for the lower 80MHz */
18132 for (i = 5; i <= 8; i++) {
18133 if ((partial_bw_info & (1 << i)) == 0x0) {
18134 continue; /* Only dissect those with the bit set */
18135 }
18136
18137 tree_offset = offset;
18138 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18139 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18140 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18141 &ruii,
18142 "RU Index %d for 160MHz, Partial BW "
18143 "not all one, upper 80MHz.", i);
18144 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18145 for (ss = 1; ss <= nc_index; ss++) {
18146 if (get_snr) {
18147 snr = tvb_get_int8(tvb, offset);
18148 offset += 1;
18149 value = snr & 0x0f;
18150 get_snr = 0;
18151 } else {
18152 value = snr >> 4;
18153 get_snr = 1;
18154 }
18155 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18156 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18157 ss, scidx, value);
18158 }
18159 }
18160 proto_item_set_len(ruii, offset - tree_offset);
18161 }
18162 }
18163
18164 return offset - start_offset;
18165}
18166
18167static int
18168add_ff_eht_mu_exclusive_320MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
18169 int offset, uint8_t nc_index,
18170 uint8_t grouping, uint16_t partial_bw_info)
18171{
18172 int start_offset = offset;
18173 int tree_offset = offset;
18174 int i = 0, j = 0, k = 0;
18175 struct scidx_ctx scidx_ctx;
18176 unsigned scidx;
18177 uint8_t ng = grouping == 0 ? 4 : 16;
18178 proto_tree *ru_index_tree = NULL((void*)0);
18179 proto_item *ruii = NULL((void*)0);
18180 unsigned ss = 0, get_snr = 1;
18181 int8_t snr = 0, value;
18182
18183 for ( i = 0; i < 4; i++) {
18184 if (((partial_bw_info >> (2*i+1)) & 0x03) == 0x03) { /* Uses 996-tone RU indices */
18185 if (ng == 4) {
18186 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng4[i * 2], ng);
18187 } else {
18188 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng16[i * 5], ng);
18189 }
18190 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18191 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18192 &ruii,
18193 "996-tone RU Index %d for 320MHz",
18194 i+1);
18195 tree_offset = offset;
18196 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18197 for (ss = 1; ss <= nc_index; ss++) {
18198 if (get_snr) {
18199 snr = tvb_get_int8(tvb, offset);
18200 offset += 1;
18201 value = snr & 0x0f;
18202 get_snr = 0;
18203 } else {
18204 value = snr >> 4;
18205 get_snr = 1;
18206 }
18207 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18208 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18209 ss, scidx, value);
18210 }
18211 }
18212 proto_item_set_len(ruii, offset - tree_offset);
18213 } else {
18214 for (j = 2*i; j <= 2*i+1; j++) {
18215 if ((partial_bw_info & (1 << (j+1))) == 0x0) {
18216 continue; /* Only dissect those with the bit set */
18217 }
18218 /* Each 484-tone RU contains two 242-tone RUs */
18219 for (k = 2*j;k <= 2*j+1;k++) {
18220 init_eht_scidx(&scidx_ctx, k+1, &ru_242_tone_320MHz[k], ng);
18221 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18222 ett_eht_mu_exclusive_beamforming_rpt_ru_index,
18223 &ruii,
18224 "RU Index %d for 320MHz, Partial BW "
18225 "not all one.", k+1);
18226 tree_offset = offset;
18227 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18228 for (ss = 1; ss <= nc_index; ss++) {
18229 if (get_snr) {
18230 snr = tvb_get_int8(tvb, offset);
18231 offset += 1;
18232 value = snr & 0x0f;
18233 get_snr = 0;
18234 } else {
18235 value = snr >> 4;
18236 get_snr = 1;
18237 }
18238 proto_tree_add_int_format(ru_index_tree, hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
18239 tvb, offset, 1, value, "Delta SNR for Stream %d for subcarrier %u: %d dB",
18240 ss, scidx, value);
18241 }
18242 }
18243 proto_item_set_len(ruii, offset - tree_offset);
18244 }
18245 }
18246 }
18247 }
18248
18249 return offset - start_offset;
18250}
18251
18252static unsigned
18253add_ff_eht_mu_exclusive_beamforming_rpt(proto_tree *tree, tvbuff_t *tvb,
18254 packet_info *pinfo, int offset,
18255 uint64_t mimo_control)
18256{
18257 uint8_t nc_index = mimo_control & 0x0F;
18258 uint8_t bw = (mimo_control >> 8) & 0x07;
18259 uint8_t grouping = (mimo_control >> 11) & 0x01;
18260 uint16_t partial_bw_info = (mimo_control >> 21) & 0x01FF;
18261 proto_tree *exclusive_tree = NULL((void*)0);
18262 proto_item *fti = NULL((void*)0);
18263 unsigned start_offset = offset;
18264 unsigned tree_len = 0, byte_count = 0;
18265
18266 exclusive_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
18267 ett_ff_eht_mimo_mu_exclusive_report, &fti,
18268 "EHT MU Exclusive Beamforming Report");
18269
18270 switch (bw) {
18271 case 0: /* 20 MHz */
18272 tree_len = add_ff_eht_mu_exclusive_20MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18273 nc_index, grouping, partial_bw_info);
18274 proto_item_set_len(fti, tree_len);
18275 offset += tree_len;
18276 break;
18277 case 1: /* 40 MHz */
18278 tree_len = add_ff_eht_mu_exclusive_40MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18279 nc_index, grouping, partial_bw_info);
18280 proto_item_set_len(fti, tree_len);
18281 offset += tree_len;
18282 break;
18283 case 2: /* 80 MHz */
18284 tree_len = add_ff_eht_mu_exclusive_80MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18285 nc_index, grouping, partial_bw_info);
18286 proto_item_set_len(fti, tree_len);
18287 offset += tree_len;
18288 break;
18289 case 3: /* 160 MHz */
18290 tree_len = add_ff_eht_mu_exclusive_160MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18291 nc_index, grouping, partial_bw_info);
18292 proto_item_set_len(fti, tree_len);
18293 offset += tree_len;
18294 break;
18295 case 4: /* 320 MHz */
18296 tree_len = add_ff_eht_mu_exclusive_320MHz_rpt(exclusive_tree, tvb, pinfo, offset,
18297 nc_index, grouping, partial_bw_info);
18298 proto_item_set_len(fti, tree_len);
18299 offset += tree_len;
18300 break;
18301 default:
18302 /* Add EI about invalid BW setting */
18303 break;
18304 }
18305
18306 byte_count = tvb_reported_length_remaining(tvb, offset);
18307 if (byte_count > 0)
18308 offset += byte_count; /* Should fix the real problem. */
18309
18310 return offset - start_offset;
18311}
18312
18313static int
18314add_ff_eht_su_20MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18315 int offset, uint8_t nc_index, uint8_t nr_index,
18316 uint8_t grouping, uint16_t partial_bw_info _U___attribute__((unused)),
18317 uint8_t phi_bits, uint8_t psi_bits)
18318{
18319 int start_offset = offset;
18320 unsigned scidx;
18321 struct scidx_ctx scidx_ctx;
18322 uint8_t ng = grouping == 0 ? 4 : 16;
18323 unsigned bit_offset = offset * 8;
18324 proto_tree *ru_index_tree = NULL((void*)0);
18325 proto_item *ruii = NULL((void*)0);
18326
18327 if (ng == 4) {
18328 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng4[0], ng);
18329 } else {
18330 init_eht_scidx(&scidx_ctx, 1, &ru_242_tone_1_20MHz_ng16[0], ng);
18331 }
18332
18333 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18334 ett_eht_beamforming_rpt_ru_index,
18335 &ruii,
18336 "RU Index %d for 20MHz, Partial BW "
18337 "not all one.", 1);
18338 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18339 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18340 bit_offset, scidx, nr_index + 1,
18341 nc_index + 1, phi_bits, psi_bits,
18342 hf_ieee80211_eht_compressed_beamform_scidx);
18343 offset = bit_offset / 8;
18344 }
18345 proto_item_set_len(ruii, offset - start_offset);
18346
18347 return offset - start_offset;
18348}
18349
18350static int
18351add_ff_eht_su_40MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18352 int offset, uint8_t nc_index, uint8_t nr_index,
18353 uint8_t grouping, uint16_t partial_bw_info,
18354 uint8_t phi_bits, uint8_t psi_bits)
18355{
18356 int start_offset = offset;
18357 int i = 0;
18358 struct scidx_ctx scidx_ctx;
18359 unsigned scidx;
18360 uint8_t ng = grouping == 0 ? 4 : 16;
18361 unsigned bit_offset = offset * 8;
18362 proto_tree *ru_index_tree = NULL((void*)0);
18363 proto_item *ruii = NULL((void*)0);
18364
18365 /* Add each of the RU index groups set */
18366 for (i = 1; i <= 2; i++) {
18367 int tree_offset = offset;
18368 if ((partial_bw_info & (1 << i)) == 0x0) {
18369 continue; /* Only dissect those with the bit set */
18370 }
18371
18372 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_40MHz[i - 1], ng);
18373 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18374 ett_eht_beamforming_rpt_ru_index,
18375 &ruii,
18376 "RU Index %d for 40MHz, Partial BW "
18377 "not all one.", i);
18378 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18379 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18380 bit_offset, scidx, nr_index + 1,
18381 nc_index + 1, phi_bits, psi_bits,
18382 hf_ieee80211_eht_compressed_beamform_scidx);
18383 offset = bit_offset / 8;
18384 }
18385 proto_item_set_len(ruii, offset - tree_offset);
18386 }
18387
18388 return offset - start_offset;
18389}
18390
18391static int
18392add_ff_eht_su_80MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18393 int offset, uint8_t nc_index, uint8_t nr_index,
18394 uint8_t grouping, uint16_t partial_bw_info,
18395 uint8_t phi_bits, uint8_t psi_bits)
18396{
18397 int start_offset = offset;
18398 int i = 0;
18399 struct scidx_ctx scidx_ctx;
18400 unsigned scidx;
18401 uint8_t ng = grouping == 0 ? 4 : 16;
18402 unsigned bit_offset = offset * 8;
18403 proto_tree *ru_index_tree = NULL((void*)0);
18404 proto_item *ruii = NULL((void*)0);
18405
18406 if (partial_bw_info == 0x1E) { /* Uses 996-tone RU indices */
18407 if (ng == 4) {
18408 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng4[0], ng);
18409 } else {
18410 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_80MHz_ng16[0], ng);
18411 }
18412 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18413 ett_eht_beamforming_rpt_ru_index,
18414 &ruii,
18415 "996-tone RU Index %d for 80MHz", 1);
18416 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18417 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18418 bit_offset, scidx, nr_index + 1,
18419 nc_index + 1, phi_bits, psi_bits,
18420 hf_ieee80211_eht_compressed_beamform_scidx);
18421 offset = bit_offset / 8;
18422 }
18423 proto_item_set_len(ruii, offset - start_offset);
18424
18425 return offset - start_offset;
18426 }
18427
18428 /* Add each of the RU index groups */
18429 for (i = 1; i <= 4; i++) {
18430 int tree_offset = offset;
18431 if ((partial_bw_info & (1 << i)) == 0x0) {
18432 continue; /* Only dissect those with the bit set */
18433 }
18434
18435 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_80MHz[i - 1], ng);
18436 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18437 ett_eht_beamforming_rpt_ru_index,
18438 &ruii,
18439 "RU Index %d for 80MHz, Partial BW "
18440 "not all one.", i);
18441 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18442 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18443 bit_offset, scidx, nr_index + 1,
18444 nc_index + 1, phi_bits, psi_bits,
18445 hf_ieee80211_eht_compressed_beamform_scidx);
18446 offset = bit_offset / 8;
18447 }
18448 proto_item_set_len(ruii, offset - tree_offset);
18449 }
18450
18451 return offset - start_offset;
18452}
18453
18454static int
18455add_ff_eht_su_160MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18456 int offset, uint8_t nc_index, uint8_t nr_index,
18457 uint8_t grouping, uint16_t partial_bw_info,
18458 uint8_t phi_bits, uint8_t psi_bits)
18459{
18460 int start_offset = offset;
18461 int tree_offset;
18462 int i = 0;
18463 struct scidx_ctx scidx_ctx;
18464 unsigned scidx;
18465 uint8_t ng = grouping == 0 ? 4 : 16;
18466 unsigned bit_offset = offset * 8;
18467 proto_tree *ru_index_tree = NULL((void*)0);
18468 proto_item *ruii = NULL((void*)0);
18469
18470 /* Is the first lot a 996-tone RU? */
18471 if ((partial_bw_info & 0x1E) == 0x1E) { /* Uses 996-tone RU indices */
18472 tree_offset = offset;
18473 if (ng == 4) {
18474 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[0], ng);
18475 } else {
18476 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[0], ng);
18477 }
18478 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18479 ett_eht_beamforming_rpt_ru_index,
18480 &ruii,
18481 "996-tone RU Index %d for 160MHz", 1);
18482 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18483 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18484 bit_offset, scidx, nr_index + 1,
18485 nc_index + 1, phi_bits, psi_bits,
18486 hf_ieee80211_eht_compressed_beamform_scidx);
18487 offset = bit_offset / 8;
18488 }
18489 proto_item_set_len(ruii, offset - tree_offset);
18490 } else {
18491 /* Add each of the RU index groups for the lower 80MHz */
18492 for (i = 1; i <= 4; i++) {
18493 if ((partial_bw_info & (1 << i)) == 0x0) {
18494 continue; /* Only dissect those with the bit set */
18495 }
18496
18497 tree_offset = offset;
18498 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18499 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18500 ett_eht_beamforming_rpt_ru_index,
18501 &ruii,
18502 "RU Index %d for 160MHz, Partial BW "
18503 "not all one, lower 80MHz.", i);
18504 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18505 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18506 offset, bit_offset, scidx,
18507 nr_index + 1, nc_index + 1,
18508 phi_bits, psi_bits,
18509 hf_ieee80211_eht_compressed_beamform_scidx);
18510 offset = bit_offset / 8;
18511 }
18512 proto_item_set_len(ruii, offset - tree_offset);
18513 }
18514 }
18515
18516 /* Is the second lot a 996-tone RU? */
18517 if ((partial_bw_info & 0x1E0) == 0x1E0) { /* Uses 996-tone RU indices */
18518 tree_offset = offset;
18519 if (ng == 4) {
18520 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng4[2], ng);
18521 } else {
18522 init_eht_scidx(&scidx_ctx, i, &ru_996_tone_160MHz_ng16[5], ng);
18523 }
18524 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18525 ett_eht_beamforming_rpt_ru_index,
18526 &ruii,
18527 "996-tone RU Index %d for 160MHz", 2);
18528 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18529 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18530 bit_offset, scidx, nr_index + 1,
18531 nc_index + 1, phi_bits, psi_bits,
18532 hf_ieee80211_eht_compressed_beamform_scidx);
18533 offset = bit_offset / 8;
18534 }
18535 proto_item_set_len(ruii, offset - tree_offset);
18536 } else {
18537 /* Add each of the RU index groups for the lower 80MHz */
18538 for (i = 5; i <= 8; i++) {
18539 if ((partial_bw_info & (1 << i)) == 0x0) {
18540 continue; /* Only dissect those with the bit set */
18541 }
18542
18543 tree_offset = offset;
18544 init_eht_scidx(&scidx_ctx, i, &ru_242_tone_160MHz[i - 1], ng);
18545 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18546 ett_eht_beamforming_rpt_ru_index,
18547 &ruii,
18548 "RU Index %d for 160MHz, Partial BW "
18549 "not all one, upper 80MHz.", i);
18550 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18551 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18552 offset, bit_offset, scidx,
18553 nr_index + 1, nc_index + 1,
18554 phi_bits, psi_bits,
18555 hf_ieee80211_eht_compressed_beamform_scidx);
18556 offset = bit_offset / 8;
18557 }
18558 proto_item_set_len(ruii, offset - tree_offset);
18559 }
18560 }
18561
18562 return offset - start_offset;
18563}
18564
18565static int
18566add_ff_eht_su_320MHz_rpt(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18567 int offset, uint8_t nc_index, uint8_t nr_index,
18568 uint8_t grouping, uint16_t partial_bw_info,
18569 uint8_t phi_bits, uint8_t psi_bits)
18570{
18571 int start_offset = offset;
18572 int tree_offset = offset;
18573 int i = 0, j = 0, k = 0;
18574 struct scidx_ctx scidx_ctx;
18575 unsigned scidx;
18576 uint8_t ng = grouping == 0 ? 4 : 16;
18577 unsigned bit_offset = offset * 8;
18578 proto_tree *ru_index_tree = NULL((void*)0);
18579 proto_item *ruii = NULL((void*)0);
18580
18581 /* Resolution is 40 MHz */
18582 for (i = 0; i < 4; i++) {
18583 if (((partial_bw_info >> (2*i+1)) & 0x03) == 0x03) { /* Uses 996-tone RU indices */
18584 if (ng == 4) {
18585 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng4[i * 2], ng);
18586 } else {
18587 init_eht_scidx(&scidx_ctx, i+1, &ru_996_tone_320MHz_ng16[i * 5], ng);
18588 }
18589 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18590 ett_eht_beamforming_rpt_ru_index,
18591 &ruii,
18592 "996-tone RU Index %d for 320MHz",
18593 i+1);
18594 tree_offset = offset;
18595 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18596 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo,
18597 offset, bit_offset, scidx,
18598 nr_index + 1, nc_index + 1,
18599 phi_bits, psi_bits,
18600 hf_ieee80211_eht_compressed_beamform_scidx);
18601 offset = bit_offset / 8;
18602 }
18603 proto_item_set_len(ruii, offset - tree_offset);
18604 } else {
18605 for (j = 2*i; j <= 2*i+1; j++) {
18606 if ((partial_bw_info & (1 << (j+1))) == 0x0) {
18607 continue; /* Only dissect those with the bit set */
18608 }
18609 /* Each 484-tone RU contains two 242-tone RUs */
18610 for (k = 2*j;k <= 2*j+1;k++) {
18611 init_eht_scidx(&scidx_ctx, k+1, &ru_242_tone_320MHz[k], ng);
18612 ru_index_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
18613 ett_eht_beamforming_rpt_ru_index,
18614 &ruii,
18615 "RU Index %d for 320MHz, Partial BW "
18616 "not all one.", k+1);
18617 tree_offset = offset;
18618 while (next_eht_scidx(&scidx_ctx, &scidx)) {
18619 bit_offset = dissect_he_feedback_matrix(ru_index_tree, tvb, pinfo, offset,
18620 bit_offset, scidx, nr_index + 1,
18621 nc_index + 1, phi_bits, psi_bits,
18622 hf_ieee80211_eht_compressed_beamform_scidx);
18623 offset = bit_offset / 8;
18624 }
18625 proto_item_set_len(ruii, offset - tree_offset);
18626 }
18627 }
18628 }
18629 }
18630
18631 return offset - start_offset;
18632}
18633
18634static unsigned
18635add_ff_eht_su_beamforming_rpt(proto_tree *tree, tvbuff_t *tvb,
18636 packet_info *pinfo, int offset,
18637 uint64_t mimo_control)
18638{
18639 uint8_t nc_index = mimo_control & 0x0F;
18640 uint8_t nr_index = (mimo_control >> 4) & 0x0F;
18641 uint8_t bw = (mimo_control >> 8) & 0x07;
18642 uint8_t grouping = (mimo_control >> 11) & 0x01;
18643 uint16_t partial_bw_info = (mimo_control >> 21) & 0x01FF;
18644 uint8_t codebook_info = (mimo_control >> 36) & 0x01;
18645 proto_tree *snr_tree = NULL((void*)0), *feedback_tree = NULL((void*)0);
18646 proto_item *fti = NULL((void*)0);
18647 uint8_t i = 0, phi_bits, psi_bits;
18648 unsigned start_offset = offset;
18649 unsigned tree_len = 0, byte_count = 0;
18650
18651 snr_tree = proto_tree_add_subtree(tree, tvb, offset, nc_index + 1,
18652 ett_ff_eht_mimo_beamforming_report_snr, NULL((void*)0),
18653 "Average Signal to Noise Ratio");
18654
18655 for (i = 0; i < nc_index + 1; i++) {
18656 int8_t snr = tvb_get_int8(tvb, offset);
18657
18658 proto_tree_add_int_format(snr_tree,
18659 hf_ieee80211_eht_compressed_beamforming_report_snr, tvb, offset, 1,
18660 snr, "Stream %d: %s%0.2fdB (0x%02x)", i,
18661 (snr == 127 ? ">=" : (snr == -128 ? "<=" : "")),
18662 (float)((float)88 + snr)/4, (uint8_t)snr);
18663 offset++;
18664 }
18665
18666 if (codebook_info == 0) {
18667 phi_bits = 4;
18668 psi_bits = 2;
18669 } else {
18670 phi_bits = 6;
18671 psi_bits = 4;
18672 }
18673
18674 feedback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
18675 ett_eht_beamforming_feedback_tree,
18676 &fti, "Feedback Matrices");
18677 switch (bw) {
18678 case 0: /* 20 MHz */
18679 tree_len = add_ff_eht_su_20MHz_rpt(feedback_tree, tvb, pinfo, offset,
18680 nc_index, nr_index, grouping,
18681 partial_bw_info, phi_bits, psi_bits);
18682 proto_item_set_len(fti, tree_len);
18683 offset += tree_len;
18684 break;
18685 case 1: /* 40 MHz */
18686 tree_len = add_ff_eht_su_40MHz_rpt(feedback_tree, tvb, pinfo, offset,
18687 nc_index, nr_index, grouping,
18688 partial_bw_info, phi_bits, psi_bits);
18689 proto_item_set_len(fti, tree_len);
18690 offset += tree_len;
18691 break;
18692 case 2: /* 80 MHz */
18693 tree_len = add_ff_eht_su_80MHz_rpt(feedback_tree, tvb, pinfo, offset,
18694 nc_index, nr_index, grouping,
18695 partial_bw_info, phi_bits, psi_bits);
18696 proto_item_set_len(fti, tree_len);
18697 offset += tree_len;
18698 break;
18699 case 3: /* 160 MHz */
18700 tree_len = add_ff_eht_su_160MHz_rpt(feedback_tree, tvb, pinfo, offset,
18701 nc_index, nr_index, grouping,
18702 partial_bw_info, phi_bits, psi_bits);
18703 proto_item_set_len(fti, tree_len);
18704 offset += tree_len;
18705 break;
18706 case 4: /* 320 MHz */
18707 tree_len = add_ff_eht_su_320MHz_rpt(feedback_tree, tvb, pinfo, offset,
18708 nc_index, nr_index, grouping,
18709 partial_bw_info, phi_bits, psi_bits);
18710 proto_item_set_len(fti, tree_len);
18711 offset += tree_len;
18712 break;
18713 default:
18714 /* Add EI about invalid BW setting */
18715 break;
18716 }
18717
18718 byte_count = tvb_reported_length_remaining(tvb, offset);
18719 if (byte_count > 0)
18720 offset += byte_count; /* Should fix the real problem. */
18721
18722 return offset - start_offset;
18723}
18724
18725static const val64_string eht_mimo_bw_vals[] = {
18726 { 0, "20 MHz" },
18727 { 1, "40 MHz" },
18728 { 2, "80 MHz" },
18729 { 3, "160 MHz" },
18730 { 4, "320 MHz" },
18731 { 5, "Reserved" },
18732 { 6, "Reserved" },
18733 { 7, "Reserved" },
18734 { 0, NULL((void*)0) }
18735};
18736
18737static const val64_string eht_mimo_grouping_vals[] = {
18738 { 0, "Ng = 4" },
18739 { 1, "Ng = 16" },
18740 { 0, NULL((void*)0) }
18741};
18742
18743static const val64_string eht_feedback_type_vals[] = {
18744 { 0, "SU" },
18745 { 1, "MU" },
18746 { 2, "CQI" },
18747 { 3, "Reserved" },
18748 { 0, NULL((void*)0) }
18749};
18750
18751static int * const eht_mimo_ctrl_hdrs[] = {
18752 &hf_ieee80211_eht_mimo_ctrl_nc_index,
18753 &hf_ieee80211_eht_mimo_ctrl_nr_index,
18754 &hf_ieee80211_eht_mimo_ctrl_bw,
18755 &hf_ieee80211_eht_mimo_ctrl_grouping,
18756 &hf_ieee80211_eht_mimo_ctrl_feedback_type,
18757 &hf_ieee80211_eht_mimo_ctrl_reserved1,
18758 &hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments,
18759 &hf_ieee80211_eht_mimo_ctrl_first_feedback_segment,
18760 &hf_ieee80211_eht_mimo_ctrl_partial_bw_info,
18761 &hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number,
18762 &hf_ieee80211_eht_mimo_ctrl_codebook_info,
18763 &hf_ieee80211_eht_mimo_ctrl_reserved2,
18764 NULL((void*)0)
18765};
18766
18767static unsigned
18768add_ff_eht_mimo_control_etc(proto_tree *tree _U___attribute__((unused)), tvbuff_t *tvb _U___attribute__((unused)),
18769 packet_info *pinfo _U___attribute__((unused)),
18770 int offset _U___attribute__((unused)))
18771{
18772 unsigned start = offset;
18773 uint64_t mimo_control = tvb_get_uint40(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
18774 uint8_t feedback_type = (mimo_control >> 12) & 0x03;
18775 uint8_t nc_index = mimo_control & 0x0F;
18776 uint8_t nr_index = (mimo_control >> 4) & 0x0F;
18777 proto_item *mci = NULL((void*)0);
18778
18779 mci = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
18780 hf_ieee80211_eht_mimo_ctrl_field,
18781 ett_eht_mimo_ctrl, eht_mimo_ctrl_hdrs,
18782 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
18783
18784 /*
18785 * Validate nc_index and nr_index and go no further if they exceed the
18786 * limits.
18787 *
18788 * 802.11be
18789 */
18790 if (nc_index > 7) {
18791 expert_add_info_format(pinfo, mci, &ei_ieee80211_eht_invalid_nc_nr,
18792 "Nc indices (%d) > 7 are reserved", nc_index);
18793 return offset;
18794 }
18795 if (nr_index == 0 || nr_index > 7) {
18796 expert_add_info_format(pinfo, mci, &ei_ieee80211_eht_invalid_nc_nr,
18797 "Nr indices (%d) 0 and > 7 are reserved", nr_index);
18798 return offset;
18799 }
18800 offset += 5;
18801
18802 switch (feedback_type) {
18803 case SU_FEEDBACK(0):
18804 offset += add_ff_eht_su_beamforming_rpt(tree, tvb, pinfo, offset,
18805 mimo_control);
18806 break;
18807 case MU_FEEDBACK(1):
18808 offset += add_ff_eht_su_beamforming_rpt(tree, tvb, pinfo, offset,
18809 mimo_control);
18810 offset += add_ff_eht_mu_exclusive_beamforming_rpt(tree, tvb, pinfo, offset,
18811 mimo_control);
18812 break;
18813 case CQI_FEEDBACK(2):
18814 /* TODO */
18815 break;
18816 default:
18817 break;
18818 }
18819
18820 return offset - start;
18821}
18822
18823static const range_string eht_action_rvals[] = {
18824 { 0, 0, "EHT Compressed Beamforming/CQI" },
18825 { 1, 255, "Reserved" },
18826 { 0, 0, NULL((void*)0) }
18827};
18828
18829static unsigned
18830add_ff_action_eht(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
18831 int offset)
18832{
18833 unsigned start = offset;
18834 uint8_t eht_action;
18835 proto_item *item = NULL((void*)0);
18836
18837 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18838
18839 eht_action = tvb_get_uint8(tvb, offset);
18840
18841 item = proto_tree_add_item(tree, hf_ieee80211_ff_eht_action, tvb, offset, 1,
18842 ENC_NA0x00000000);
18843 offset += 1;
18844
18845 switch (eht_action) {
18846 case 0:
18847 offset += add_ff_eht_mimo_control_etc(tree, tvb, pinfo, offset);
18848 break;
18849 default:
18850 expert_add_info_format(pinfo, item, &ei_ieee80211_eht_invalid_action,
18851 "Reserved EHT Action %u", eht_action);
18852 }
18853
18854 return offset - start;
18855}
18856
18857static unsigned
18858add_ff_action_fst(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
18859{
18860 uint8_t code;
18861 unsigned start = offset;
18862
18863 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18864 code = tvb_get_uint8(tvb, offset);
18865 offset += add_ff_fst_action_code(tree, tvb, pinfo, offset);
18866 switch (code) {
18867 case FST_SETUP_REQUEST0:
18868 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18869 offset += add_ff_llt(tree, tvb, pinfo, offset);
18870 break;
18871 case FST_SETUP_RESPONSE1:
18872 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18873 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18874 break;
18875 case FST_TEAR_DOWN2:
18876 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18877 break;
18878 case FST_ACK_REQUEST3:
18879 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18880 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18881 break;
18882 case FST_ACK_RESPONSE4:
18883 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18884 offset += add_ff_fsts_id(tree, tvb, pinfo, offset);
18885 break;
18886 case FST_ON_CHANNEL_TUNNEL_REQUEST5:
18887 offset += add_ff_oct_mmpdu(tree, tvb, pinfo, offset);
18888 break;
18889 }
18890 return offset - start;
18891}
18892
18893static int
18894add_ff_scs_descriptor_list(proto_tree *tree, tvbuff_t *tvb,
18895 packet_info *pinfo _U___attribute__((unused)), int offset)
18896{
18897 unsigned start = offset;
18898
18899 /*
18900 * This is could be a list, so it needs change.
18901 */
18902 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
18903 return offset - start;
18904}
18905
18906static int
18907add_ff_scs_response_count(proto_tree *tree, tvbuff_t *tvb,
18908 packet_info *pinfo _U___attribute__((unused)), int offset)
18909{
18910 proto_tree_add_item(tree, hf_ieee80211_ff_scs_response_count, tvb, offset, 1,
18911 ENC_NA0x00000000);
18912
18913 return 1;
18914}
18915
18916static int
18917add_ff_scs_status_list(proto_tree *tree, tvbuff_t *tvb,
18918 packet_info *pinfo _U___attribute__((unused)), int offset, uint8_t count)
18919{
18920 unsigned start = offset;
18921
18922 while (count > 0) {
18923 if (tvb_reported_length_remaining(tvb, offset) >= 3) {
18924 proto_tree_add_item(tree, hf_ieee80211_ff_scs_scsid, tvb, offset, 1,
18925 ENC_NA0x00000000);
18926 offset += 1;
18927
18928 proto_tree_add_item(tree, hf_ieee80211_ff_scs_status, tvb, offset, 2,
18929 ENC_LITTLE_ENDIAN0x80000000);
18930 offset += 2;
18931 }
18932 count--;
18933 }
18934
18935 return offset - start;
18936}
18937
18938static int
18939add_ff_mscs_descriptor_elt(proto_tree *tree, tvbuff_t *tvb,
18940 packet_info *pinfo _U___attribute__((unused)), int offset)
18941{
18942 unsigned start = offset;
18943
18944 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
18945 return offset - start;
18946}
18947
18948static unsigned
18949add_ff_action_robust_av_streaming(proto_tree *tree, tvbuff_t *tvb,
18950 packet_info *pinfo, int offset)
18951{
18952 uint8_t code, count;
18953 unsigned start = offset;
18954
18955 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18956 code = tvb_get_uint8(tvb, offset);
18957 offset += add_ff_robust_av_streaming_action_code(tree, tvb, pinfo, offset);
18958
18959 switch (code) {
18960 case ROBUST_AV_STREAMING_SCS_REQUEST0:
18961 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18962 offset += add_ff_scs_descriptor_list(tree, tvb, pinfo, offset);
18963 break;
18964 case ROBUST_AV_STREAMING_SCS_RESPONSE1:
18965 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18966 count = tvb_get_uint8(tvb, offset);
18967 offset += add_ff_scs_response_count(tree, tvb, pinfo, offset);
18968 offset += add_ff_scs_status_list(tree, tvb, pinfo, offset, count);
18969 break;
18970 case ROBUST_AV_STREAMING_MSCS_REQUEST4:
18971 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18972 offset += add_ff_mscs_descriptor_elt(tree, tvb, pinfo, offset);
18973 break;
18974 case ROBUST_AV_STREAMING_MSCS_RESPONSE5:
18975 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18976 offset += add_ff_status_code(tree, tvb, pinfo, offset);
18977 /* If there is any more data it is probably an mscs descriptor */
18978 if (tvb_reported_length_remaining(tvb, offset) > 0)
18979 offset += add_ff_mscs_descriptor_elt(tree, tvb, pinfo, offset);
18980 break;
18981 }
18982 return offset - start;
18983}
18984
18985static unsigned
18986add_ff_action_dmg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset)
18987{
18988 uint8_t code;
18989 unsigned start = offset;
18990 int left_offset;
18991
18992 offset += add_ff_category_code(tree, tvb, pinfo, offset);
18993 code = tvb_get_uint8(tvb, offset);
18994 offset += add_ff_dmg_action_code(tree, tvb, pinfo, offset);
18995 switch (code) {
18996 case DMG_ACTION_PWR_SAVE_CONFIG_REQ0:
18997 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
18998 offset += add_ff_dmg_pwr_mgmt(tree, tvb, pinfo, offset);
18999 break;
19000 case DMG_ACTION_PWR_SAVE_CONFIG_RES1:
19001 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19002 offset += add_ff_status_code(tree, tvb, pinfo, offset);
19003 break;
19004 case DMG_ACTION_INFO_REQ2:
19005 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
19006 break;
19007 case DMG_ACTION_INFO_RES3:
19008 offset += add_ff_subject_address(tree, tvb, pinfo, offset);
19009 break;
19010 case DMG_ACTION_HANDOVER_REQ4:
19011 offset += add_ff_handover_reason(tree, tvb, pinfo, offset);
19012 offset += add_ff_handover_remaining_bi(tree, tvb, pinfo, offset);
19013 break;
19014 case DMG_ACTION_HANDOVER_RES5:
19015 offset += add_ff_handover_result(tree, tvb, pinfo, offset);
19016 offset += add_ff_handover_reject_reason(tree, tvb, pinfo, offset);
19017 break;
19018 case DMG_ACTION_DTP_REQ6:
19019 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19020 break;
19021 case DMG_ACTION_DTP_RES7:
19022 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19023 break;
19024 case DMG_ACTION_RELAY_SEARCH_REQ8:
19025 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19026 offset += add_ff_destination_reds_aid(tree, tvb, pinfo, offset);
19027 break;
19028 case DMG_ACTION_RELAY_SEARCH_RES9:
19029 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19030 offset += add_ff_status_code(tree, tvb, pinfo, offset);
19031 break;
19032 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_REQ10:
19033 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19034 break;
19035 case DMG_ACTION_MUL_RELAY_CHANNEL_MEASURE_RES11:
19036 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19037 left_offset =
19038 tvb_reported_length_remaining(tvb, offset);
19039 while(left_offset > 0) {
19040 proto_tree_add_item(tree, hf_ieee80211_ff_peer_sta_aid, tvb, offset, 1, ENC_NA0x00000000);
19041 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset+1, 1, ENC_NA0x00000000);
19042 proto_tree_add_item(tree, hf_ieee80211_ff_internal_angle, tvb, offset+2, 1, ENC_NA0x00000000);
19043 proto_tree_add_item(tree, hf_ieee80211_ff_recommend, tvb, offset+2, 1, ENC_NA0x00000000);
19044 /* another reserved byte */
19045 offset += 4;
19046 left_offset -= 4;
19047 }
19048 break;
19049 case DMG_ACTION_RLS_REQ12:
19050 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19051 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
19052 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
19053 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
19054 break;
19055 case DMG_ACTION_RLS_RES13:
19056 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19057 break;
19058 case DMG_ACTION_RLS_ANNOUNCE14:
19059 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19060 offset += add_ff_status_code(tree, tvb, pinfo, offset);
19061 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
19062 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
19063 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
19064 break;
19065 case DMG_ACTION_RLS_TEARDOWN15:
19066 offset += add_ff_destination_aid(tree, tvb, pinfo, offset);
19067 offset += add_ff_relay_aid(tree, tvb, pinfo, offset);
19068 offset += add_ff_source_aid(tree, tvb, pinfo, offset);
19069 break;
19070 case DMG_ACTION_RELAY_ACK_REQ16:
19071 case DMG_ACTION_RELAY_ACK_RES17:
19072 break;
19073 case DMG_ACTION_TPA_REQ18:
19074 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19075 offset += add_ff_timing_offset(tree, tvb, pinfo, offset);
19076 offset += add_ff_sampling_frequency_offset(tree, tvb, pinfo, offset);
19077 break;
19078 case DMG_ACTION_TPA_RES19:
19079 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19080 break;
19081 case DMG_ACTION_TPA_REP20:
19082 offset += add_ff_status_code(tree, tvb, pinfo, offset);
19083 break;
19084 case DMG_ACTION_ROC_REQ21:
19085 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19086 offset += add_ff_relay_operation_type(tree, tvb, pinfo, offset);
19087 break;
19088 case DMG_ACTION_ROC_RES22:
19089 offset += add_ff_dialog_token(tree, tvb, pinfo, offset);
19090 offset += add_ff_status_code(tree, tvb, pinfo, offset);
19091 break;
19092 }
19093 return offset - start;
19094}
19095
19096unsigned
19097add_ff_action(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset,
19098 association_sanity_check_t *association_sanity_check)
19099{
19100 switch (tvb_get_uint8(tvb, offset) & 0x7f) {
19101 case CAT_SPECTRUM_MGMT0: /* 0 */
19102 return add_ff_action_spectrum_mgmt(tree, tvb, pinfo, offset);
19103 case CAT_QOS1: /* 1 */
19104 return add_ff_action_qos(tree, tvb, pinfo, offset);
19105 case CAT_DLS2: /* 2 */
19106 return add_ff_action_dls(tree, tvb, pinfo, offset);
19107 case CAT_BLOCK_ACK3: /* 3 */
19108 return add_ff_action_block_ack(tree, tvb, pinfo, offset);
19109 case CAT_PUBLIC4: /* 4 */
19110 return add_ff_action_public(tree, tvb, pinfo, offset);
19111 case CAT_RADIO_MEASUREMENT5: /* 5 */
19112 return add_ff_action_radio_measurement(tree, tvb, pinfo, offset);
19113 case CAT_FAST_BSS_TRANSITION6: /* 6 */
19114 return add_ff_action_fast_bss_transition(tree, tvb, pinfo, offset);
19115 case CAT_HT7: /* 7 */
19116 return add_ff_action_ht(tree, tvb, pinfo, offset);
19117 case CAT_SA_QUERY8: /* 8 */
19118 return add_ff_action_sa_query(tree, tvb, pinfo, offset);
19119 case CAT_PUBLIC_PROTECTED9: /* 9 */
19120 return add_ff_action_protected_public(tree, tvb, pinfo, offset);
19121 case CAT_WNM10: /* 10 */
19122 return add_ff_action_wnm(tree, tvb, pinfo, offset);
19123 case CAT_UNPROTECTED_WNM11: /* 11 */
19124 return add_ff_action_unprotected_wnm(tree, tvb, pinfo, offset);
19125 case CAT_TDLS12: /* 12 */
19126 return add_ff_action_tdls(tree, tvb, pinfo, offset);
19127 case CAT_MESH13: /* 13 */
19128 return add_ff_action_mesh(tree, tvb, pinfo, offset);
19129 case CAT_MULTIHOP14: /* 14 */
19130 return add_ff_action_multihop(tree, tvb, pinfo, offset);
19131 case CAT_SELF_PROTECTED15: /* 15 */
19132 return add_ff_action_self_protected(tree, tvb, pinfo, offset, association_sanity_check);
19133 case CAT_DMG16: /* 16 */
19134 return add_ff_action_dmg(tree, tvb, pinfo, offset);
19135 case CAT_MGMT_NOTIFICATION17: /* Management notification frame - 17 */
19136 return add_ff_action_mgmt_notification(tree, tvb, pinfo, offset);
19137 case CAT_FAST_SESSION_TRANSFER18: /* 18 */
19138 return add_ff_action_fst(tree, tvb, pinfo, offset);
19139 case CAT_ROBUST_AV_STREAMING19: /* 19 */
19140 return add_ff_action_robust_av_streaming(tree, tvb, pinfo, offset);
19141 case CAT_UNPROTECTED_DMG20: /* 20 */
19142 return add_ff_action_unprotected_dmg(tree, tvb, pinfo, offset);
19143 case CAT_VHT21: /* 21 */
19144 return add_ff_action_vht(tree, tvb, pinfo, offset);
19145 case CAT_S1G22: /* 22 */
19146 return add_ff_action_s1g(tree, tvb, pinfo, offset);
19147 case CAT_PROTECTED_S1G23: /* 23 */
19148 return add_ff_action_protected_s1g(tree, tvb, pinfo, offset);
19149 case CAT_HE30:
19150 return add_ff_action_he(tree, tvb, pinfo, offset);
19151 case CAT_PROTECTED_HE31:
19152 return add_ff_action_protected_he(tree, tvb, pinfo, offset);
19153 case CAT_PROTECTED_EHT37:
19154 return add_ff_action_protected_eht(tree, tvb, pinfo, offset);
19155 case CAT_PROTECTED_FTM34:
19156 return add_ff_action_protected_ftm(tree, tvb, pinfo, offset);
19157 case CAT_EHT36:
19158 return add_ff_action_eht(tree, tvb, pinfo, offset);
19159 case CAT_VENDOR_SPECIFIC_PROTECTED126: /* Same as below for now */
19160 case CAT_VENDOR_SPECIFIC127: /* Vendor Specific Protected Category - 127 */
19161 return add_ff_action_vendor_specific(tree, tvb, pinfo, offset);
19162 default:
19163 add_ff_category_code(tree, tvb, pinfo, offset);
19164 return 1;
19165 }
19166}
19167
19168static const value_string ieee80211_rsn_cipher_vals[] = {
19169 {0, "NONE"},
19170 {1, "WEP (40-bit)"},
19171 {2, "TKIP"},
19172 {3, "AES (OCB)"},
19173 {4, "AES (CCM)"},
19174 {5, "WEP (104-bit)"},
19175 {6, "BIP (128)"},
19176 {7, "Group addressed traffic not allowed"},
19177 {8, "GCMP (128)" },
19178 {9, "GCMP (256)" },
19179 {10, "CCMP (256)" },
19180 {11, "BIP (GMAC-128)" },
19181 {12, "BIP (GMAC-256)" },
19182 {13, "BIP (CMAC-256)" },
19183 {0, NULL((void*)0)}
19184};
19185
19186#define AKMS_NONE0x000FAC00 0x000FAC00
19187#define AKMS_WPA0x000FAC01 0x000FAC01
19188#define AKMS_PSK0x000FAC02 0x000FAC02
19189#define AKMS_FT_IEEE802_1X0x000FAC03 0x000FAC03
19190#define AKMS_FT_PSK0x000FAC04 0x000FAC04
19191#define AKMS_WPA_SHA2560x000FAC05 0x000FAC05
19192#define AKMS_PSK_SHA2560x000FAC06 0x000FAC06
19193#define AKMS_TDLS0x000FAC07 0x000FAC07
19194#define AKMS_SAE0x000FAC08 0x000FAC08
19195#define AKMS_FT_SAE0x000FAC09 0x000FAC09
19196#define AKMS_AP_PEER_KEY0x000FAC0A 0x000FAC0A
19197#define AKMS_WPA_SHA256_SUITEB0x000FAC0B 0x000FAC0B
19198#define AKMS_WPA_SHA384_SUITEB0x000FAC0C 0x000FAC0C
19199#define AKMS_FT_IEEE802_1X_SHA3840x000FAC0D 0x000FAC0D
19200#define AKMS_FILS_SHA2560x000FAC0E 0x000FAC0E
19201#define AKMS_FILS_SHA3840x000FAC0F 0x000FAC0F
19202#define AKMS_FT_FILS_SHA2560x000FAC10 0x000FAC10
19203#define AKMS_FT_FILS_SHA3840x000FAC11 0x000FAC11
19204#define AKMS_OWE0x000FAC12 0x000FAC12
19205#define AKMS_SAE_GROUP_DEPEND0x000FAC18 0x000FAC18
19206#define AKMS_FT_SAE_GROUP_DEPEND0x000FAC19 0x000FAC19
19207#define AKMS_EPPKE0x000FAC1D 0x000FAC1D
19208
19209static const value_string ieee80211_rsn_keymgmt_vals[] = {
19210 {0, "NONE"},
19211 {1, "WPA"},
19212 {2, "PSK"},
19213 {3, "FT over IEEE 802.1X"},
19214 {4, "FT using PSK"},
19215 {5, "WPA (SHA256)"},
19216 {6, "PSK (SHA256)"},
19217 {7, "TDLS / TPK Handshake (SHA256)"},
19218 {8, "SAE (SHA256)" },
19219 {9, "FT using SAE (SHA256)" },
19220 {10, "APPeerKey (SHA256)" },
19221 {11, "WPA (SHA256-SuiteB)" },
19222 {12, "WPA (SHA384-SuiteB)" },
19223 {13, "FT over IEEE 802.1X (SHA384)" },
19224 {14, "FILS (SHA256 and AES-SIV-256)" },
19225 {15, "FILS (SHA384 and AES-SIV-512)" },
19226 {16, "FT over FILS (SHA256 and AES-SIV-256)" },
19227 {17, "FT over FILS (SHA384 and AES-SIV-512)" },
19228 {18, "Opportunistic Wireless Encryption"},
19229 {19, "FT using PSK (SHA384)"},
19230 {20, "PSK (SHA384)"},
19231 {21, "PASN"},
19232 {24, "SAE (GROUP-DEPEND)"},
19233 {25, "FT using SAE (GROUP-DEPEND)"},
19234 {29, "EPPKE"},
19235 {0, NULL((void*)0)}
19236};
19237
19238#define OUIBASELEN(64 + 20) (MAXNAMELEN64 + 20)
19239
19240static void
19241oui_base_custom(char *result, uint32_t oui)
19242{
19243 uint8_t p_oui[3];
19244 const char *manuf_name;
19245
19246 p_oui[0] = oui >> 16 & 0xFF;
19247 p_oui[1] = oui >> 8 & 0xFF;
19248 p_oui[2] = oui & 0xFF;
19249
19250 static_assert_Static_assert(OUIBASELEN(64 + 20) <= ITEM_LABEL_LENGTH240, "Buffer size mismatch!");
19251 /* Attempt an OUI lookup. */
19252 manuf_name = uint_get_manuf_name_if_known(oui);
19253 if (manuf_name == NULL((void*)0)) {
19254 /* Could not find an OUI. */
19255 snprintf(result, OUIBASELEN(64 + 20), "%02x:%02x:%02x", p_oui[0], p_oui[1], p_oui[2]);
19256 }
19257 else {
19258 char name[MAXNAMELEN64+2];
19259 snprintf(name, MAXNAMELEN64+1, "%.*s", MAXNAMELEN64, manuf_name);
19260 /* Found an address string. */
19261 snprintf(result, OUIBASELEN(64 + 20), "%02x:%02x:%02x (%s)", p_oui[0], p_oui[1], p_oui[2], name);
19262 }
19263}
19264
19265static void
19266rsn_gcs_base_custom(char *result, uint32_t gcs)
19267{
19268 char oui_result[OUIBASELEN(64 + 20)];
19269 char *tmp_str;
19270
19271 oui_result[0] = '\0';
19272 oui_base_custom(oui_result, gcs >> 8);
19273 tmp_str = val_to_str(NULL((void*)0), gcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19274 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19275 wmem_free(NULL((void*)0), tmp_str);
19276}
19277
19278static void
19279rsn_pcs_base_custom(char *result, uint32_t pcs)
19280{
19281 char oui_result[OUIBASELEN(64 + 20)];
19282 char *tmp_str;
19283
19284 oui_result[0] = '\0';
19285 oui_base_custom(oui_result, pcs >> 8);
19286 tmp_str = val_to_str(NULL((void*)0), pcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19287 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19288 wmem_free(NULL((void*)0), tmp_str);
19289
19290}
19291static void
19292rsn_akms_base_custom(char *result, uint32_t akms)
19293{
19294 char oui_result[OUIBASELEN(64 + 20)];
19295 char *tmp_str;
19296
19297 oui_result[0] = '\0';
19298 oui_base_custom(oui_result, akms >> 8);
19299 tmp_str = val_to_str(NULL((void*)0), akms & 0xFF, ieee80211_rsn_keymgmt_vals, "Unknown %d");
19300 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19301 wmem_free(NULL((void*)0), tmp_str);
19302}
19303
19304static char *
19305rsn_pcs_return(wmem_allocator_t *scope, uint32_t pcs)
19306{
19307 char *result;
19308
19309 result = (char *)wmem_alloc(scope, SHORT_STR256);
19310 result[0] = '\0';
19311 rsn_pcs_base_custom(result, pcs);
19312
19313 return result;
19314}
19315
19316static char *
19317rsn_akms_return(wmem_allocator_t *scope, uint32_t akms)
19318{
19319 char *result;
19320
19321 result = (char *)wmem_alloc(scope, SHORT_STR256);
19322 result[0] = '\0';
19323 rsn_akms_base_custom(result, akms);
19324
19325 return result;
19326}
19327
19328static void
19329rsn_gmcs_base_custom(char *result, uint32_t gmcs)
19330{
19331 char oui_result[OUIBASELEN(64 + 20)];
19332 char *tmp_str;
19333
19334 oui_result[0] = '\0';
19335 oui_base_custom(oui_result, gmcs >> 8);
19336 tmp_str = val_to_str(NULL((void*)0), gmcs & 0xFF, ieee80211_rsn_cipher_vals, "Unknown %d");
19337 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19338 wmem_free(NULL((void*)0), tmp_str);
19339}
19340
19341static void
19342rsni_base_custom(char *result, uint8_t rsni)
19343{
19344 double temp_double;
19345
19346 if (rsni < 255) {
19347 temp_double = (double)rsni - 20;
19348 snprintf(result, ITEM_LABEL_LENGTH240, "%.1f dB", (temp_double / 2));
19349 } else
19350 snprintf(result, ITEM_LABEL_LENGTH240, "%d (Measurement not available)", rsni);
19351}
19352
19353static void
19354vht_tpe_custom(char *result, uint8_t txpwr)
19355{
19356 int8_t txpwr_db;
19357
19358 txpwr_db = (int8_t)(txpwr);
19359 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dBm", (txpwr_db/2.0));
19360}
19361
19362static void
19363tpe_psd_custom(char *result, uint8_t txpwr)
19364{
19365 int8_t txpwr_db;
19366
19367 txpwr_db = (int8_t)(txpwr);
19368 if (txpwr_db == -128) {
19369 snprintf(result, ITEM_LABEL_LENGTH240, "Channel cannot be used for transmission");
19370 } else if (txpwr_db == 127) {
19371 snprintf(result, ITEM_LABEL_LENGTH240, "No maximum PSD is specified for channel");
19372 } else {
19373 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dBm/MHz", (txpwr_db/2.0));
19374 }
19375}
19376
19377static void
19378channel_number_custom(char *result, uint8_t channel_number)
19379{
19380 switch(channel_number){
19381 case 0:
19382 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on all supported channels in the specified Operating Class)", channel_number);
19383 break;
19384 case 255:
19385 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on all supported channels listed in the AP Channel Report)", channel_number);
19386 break;
19387 default :
19388 snprintf(result, ITEM_LABEL_LENGTH240, "%u (iterative measurements on that Channel Number)", channel_number);
19389 break;
19390 }
19391}
19392
19393/* WPA / WME */
19394static const value_string ieee802111_wfa_ie_type_vals[] = {
19395 { 1, "WPA Information Element" },
19396 { 2, "WMM/WME" },
19397 { 4, "WPS" },
19398 { 17, "Network Cost" },
19399 { 18, "Tethering" },
19400 { 0, NULL((void*)0) }
19401};
19402
19403static const value_string ieee80211_wfa_ie_wpa_cipher_vals[] = {
19404 { 0, "NONE" },
19405 { 1, "WEP (40-bit)" },
19406 { 2, "TKIP" },
19407 { 3, "AES (OCB)" },
19408 { 4, "AES (CCM)" },
19409 { 5, "WEP (104-bit)" },
19410 { 6, "BIP" },
19411 { 7, "Group addressed traffic not allowed" },
19412 { 0, NULL((void*)0) }
19413};
19414
19415static const value_string ieee80211_wfa_ie_wpa_keymgmt_vals[] = {
19416 { 0, "NONE" },
19417 { 1, "WPA" },
19418 { 2, "PSK" },
19419 { 3, "FT over IEEE 802.1X" },
19420 { 4, "FT using PSK" },
19421 { 5, "WPA (SHA256)" },
19422 { 6, "PSK (SHA256)" },
19423 { 7, "TDLS / TPK Handshake" },
19424 { 0, NULL((void*)0) }
19425};
19426
19427static const value_string ieee80211_wfa_ie_wme_acs_vals[] = {
19428 { 0, "Best Effort" },
19429 { 1, "Background" },
19430 { 2, "Video" },
19431 { 3, "Voice" },
19432 { 0, NULL((void*)0) }
19433};
19434
19435static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_direction_vals[] = {
19436 { 0, "Uplink" },
19437 { 1, "Downlink" },
19438 { 2, "Direct link" },
19439 { 3, "Bidirectional link" },
19440 { 0, NULL((void*)0) }
19441};
19442
19443static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_psb_vals[] = {
19444 { 0, "Legacy" },
19445 { 1, "U-APSD" },
19446 { 0, NULL((void*)0) }
19447};
19448
19449static const value_string ieee80211_wfa_ie_wme_tspec_tsinfo_up_vals[] = {
19450 { 0, "Best Effort" },
19451 { 1, "Background" },
19452 { 2, "Spare" },
19453 { 3, "Excellent Effort" },
19454 { 4, "Controlled Load" },
19455 { 5, "Video" },
19456 { 6, "Voice" },
19457 { 7, "Network Control" },
19458 { 0, NULL((void*)0) }
19459};
19460
19461/* Cost Level https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/24b04427-4ed6-4d12-a73d-c89ea72c7a94 */
19462static const value_string ieee80211_wfa_ie_nc_cost_level_vals[] = {
19463 { 0x0, "Unknown / The connection cost is unknown" },
19464 { 0x01, "Unrestricted / The connection is unlimited and has unrestricted usage constraints" },
19465 { 0x02, "Fixed / Usage counts toward a fixed allotment of data which the user has already paid for (or agreed to pay for)" },
19466 { 0x04, "Variable / The connection cost is on a per-byte basis" },
19467 {0, NULL((void*)0)}
19468};
19469
19470/* Cost Flags https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/b601a6a0-a4ff-4527-bf43-2eeee8c5796b */
19471static const value_string ieee80211_wfa_ie_nc_cost_flags_vals[] = {
19472 { 0x0, "Unknown / The usage is unknown or unrestricted" },
19473 { 0x01, "Over Data Limit / Usage has exceeded the data limit of the metered network; different network costs or conditions might apply" },
19474 { 0x02, "Congested / The network operator is experiencing or expecting heavy load" },
19475 { 0x04, "Roaming / The tethering connection is roaming outside the provider's home network or affiliates" },
19476 { 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" },
19477 {0, NULL((void*)0)}
19478};
19479
19480
19481static const value_string ieee80211_wfa_ie_tethering_type_vals[] = {
19482 { 0x2B, "Broadcasted" },
19483 {0, NULL((void*)0)}
19484};
19485
19486
19487static const value_string ieee802111_wfa_ie_wme_qos_info_sta_max_sp_length_vals[] = {
19488 { 0, "WMM AP may deliver all buffered frames (MSDUs and MMPDUs)" },
19489 { 1, "WMM AP may deliver a maximum of 2 buffered frames (MSDUs and MMPDUs) per USP" },
19490 { 2, "WMM AP may deliver a maximum of 4 buffered frames (MSDUs and MMPDUs) per USP" },
19491 { 3, "WMM AP may deliver a maximum of 6 buffered frames (MSDUs and MMPDUs) per USP" },
19492 { 0, NULL((void*)0)}
19493};
19494static const true_false_string ieee802111_wfa_ie_wme_qos_info_sta_ac_tfs = {
19495 "WMM delivery and trigger enabled",
19496 "non-WMM PS"
19497};
19498
19499/* az: Ranging Parameters */
19500static const val64_string ieee80211_ranging_status_vals[] = {
19501 { 0, "Reserved" },
19502 { 1, "Successful; measurement exchanges are about to begin" },
19503 { 2, "Request incapable; do not send same request again; FTM session ends" },
19504 { 3, "Request failed; do not send new request for Value seconds; FTM session ends" },
19505 { 0, NULL((void*)0) }
19506};
19507
19508static const val64_string ieee80211_ranging_fmt_bw_vals[] = {
19509 { 0, "HE 20 MHz" },
19510 { 1, "HE 40 MHz" },
19511 { 2, "HE 80 MHz" },
19512 { 3, "HE 80+80 MHz" },
19513 { 4, "HE 160 MHz (two separate RF LOs)" },
19514 { 5, "HE 160 MHz (single RF LO)" },
19515 /* values 6-63 reserved */
19516 { 0, NULL((void*)0) }
19517};
19518
19519static const val64_string ieee80211_ranging_ltf_total_vals[] = {
19520 { 0, "4 LTFs" },
19521 { 1, "8 LTFs" },
19522 { 2, "16 LTFs" },
19523 { 3, "No max LTFs specified" },
19524 { 0, NULL((void*)0) }
19525};
19526
19527static void
19528wpa_mcs_base_custom(char *result, uint32_t mcs)
19529{
19530 char oui_result[OUIBASELEN(64 + 20)];
19531 char *tmp_str;
19532
19533 oui_result[0] = '\0';
19534 oui_base_custom(oui_result, mcs >> 8);
19535 tmp_str = val_to_str(NULL((void*)0), mcs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
19536 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19537 wmem_free(NULL((void*)0), tmp_str);
19538}
19539
19540static void
19541wpa_ucs_base_custom(char *result, uint32_t ucs)
19542{
19543 char oui_result[OUIBASELEN(64 + 20)];
19544 char *tmp_str;
19545
19546 oui_result[0] = '\0';
19547 oui_base_custom(oui_result, ucs >> 8);
19548 tmp_str = val_to_str(NULL((void*)0), ucs & 0xFF, ieee80211_wfa_ie_wpa_cipher_vals, "Unknown %d");
19549 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19550 wmem_free(NULL((void*)0), tmp_str);
19551}
19552static void
19553wpa_akms_base_custom(char *result, uint32_t akms)
19554{
19555 char oui_result[OUIBASELEN(64 + 20)];
19556 char *tmp_str;
19557
19558 oui_result[0] = '\0';
19559 oui_base_custom(oui_result, akms >> 8);
19560 tmp_str = val_to_str(NULL((void*)0), akms & 0xFF, ieee80211_wfa_ie_wpa_keymgmt_vals, "Unknown %d");
19561 snprintf(result, ITEM_LABEL_LENGTH240, "%s %s", oui_result, tmp_str);
19562 wmem_free(NULL((void*)0), tmp_str);
19563}
19564
19565static char *
19566wpa_ucs_return(wmem_allocator_t *scope, uint32_t ucs)
19567{
19568 char *result;
19569
19570 result = (char *)wmem_alloc(scope, SHORT_STR256);
19571 result[0] = '\0';
19572 wpa_ucs_base_custom(result, ucs);
19573
19574 return result;
19575}
19576
19577static char *
19578wpa_akms_return(wmem_allocator_t *scope, uint32_t akms)
19579{
19580 char *result;
19581
19582 result = (char *)wmem_alloc(scope, SHORT_STR256);
19583 result[0] = '\0';
19584 wpa_akms_base_custom(result, akms);
19585
19586 return result;
19587}
19588
19589/* For each Field */
19590static const value_string ieee80211_wapi_suite_type[] = {
19591 {0, "Reserved"},
19592 {1, "WAI Certificate Authentication and Key Management"},
19593 {2, "WAI Preshared Key Authentication and Key Management"},
19594 {0, NULL((void*)0)},
19595};
19596/* For Summary Tag Information */
19597static const value_string ieee80211_wapi_suite_type_short[] = {
19598 {0, "Reserved"},
19599 {1, "WAI-CERT"},
19600 {2, "WAI-PSK"},
19601 {0, NULL((void*)0)},
19602};
19603
19604static const value_string ieee80211_wapi_cipher_type[] = {
19605 {0, "Reserved"},
19606 {1, "WPI-SMS4"},
19607 {0, NULL((void*)0)},
19608};
19609
19610static const value_string ieee802111_wfa_ie_wme_type[] = {
19611 { 0, "Information Element" },
19612 { 1, "Parameter Element" },
19613 { 2, "TSPEC Element" },
19614 { 0, NULL((void*)0)}
19615};
19616
19617static const value_string ft_subelem_id_vals[] = {
19618 {0, "Reserved"},
19619 {1, "PMK-R1 key holder identifier (R1KH-ID)"},
19620 {2, "GTK subelement"},
19621 {3, "PMK-R0 key holder identifier (R0KH-ID)"},
19622 {4, "IGTK"},
19623 {5, "Operating Channel Information (OCI)"},
19624 {6, "BIGTK"},
19625 {7, "WIGTK"},
19626 {8, "MLO GTK"},
19627 {9, "MLO IGTK"},
19628 {10, "MLO BIGTK"},
19629 {0, NULL((void*)0)}
19630};
19631
19632static int
19633dissect_wme_qos_info(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
19634{
19635 proto_item *wme_qos_info_item;
19636
19637 static int * const ieee80211_mgt_req[] = {
19638 &hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
19639 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
19640 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
19641 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
19642 &hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
19643 &hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
19644 NULL((void*)0)
19645 };
19646
19647 static int * const ieee80211_mgt_resp[] = {
19648 &hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
19649 &hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
19650 &hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
19651 NULL((void*)0)
19652 };
19653
19654 switch (ftype) {
19655 case MGT_ASSOC_REQ0x00:
19656 case MGT_PROBE_REQ0x04:
19657 case MGT_REASSOC_REQ0x02:
19658 {
19659 /* To AP so decode as per WMM standard Figure 7 QoS Info field when sent from WMM STA*/
19660 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_qos_info,
19661 ett_wme_qos_info, ieee80211_mgt_req,
19662 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19663 break;
19664 }
19665 case MGT_BEACON0x08:
19666 case MGT_PROBE_RESP0x05:
19667 case MGT_ASSOC_RESP0x01:
19668 case MGT_REASSOC_RESP0x03:
19669 case MGT_ACTION0x0D:
19670 {
19671 /* From AP so decode as per WMM standard Figure 6 QoS Info field when sent from WMM AP */
19672 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_qos_info,
19673 ett_wme_qos_info, ieee80211_mgt_resp,
19674 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19675 break;
19676 }
19677 default:
19678 wme_qos_info_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_qos_info, tvb, offset, 1, ENC_NA0x00000000);
19679 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);
19680 break;
19681 }
19682
19683 offset += 1;
19684 return offset;
19685}
19686
19687static int * const update_edca_info_headers[] = {
19688 &hf_ieee80211_s1g_update_edca_override,
19689 &hf_ieee80211_s1g_update_edca_ps_poll_aci,
19690 &hf_ieee80211_s1g_update_edca_raw_aci,
19691 &hf_ieee80211_s1g_update_edca_sta_type,
19692 &hf_ieee80211_s1g_update_edca_reserved,
19693 NULL((void*)0)
19694};
19695
19696static const value_string sta_field_type_vals[] = {
19697 { 0, "Valid for both sensor and non-sensor STAs" },
19698 { 1, "Valid for sensor STAs" },
19699 { 2, "Valid for non-sensor STAs" },
19700 { 3, "Reserved" },
19701 { 0, NULL((void*)0) }
19702};
19703
19704static int
19705decode_qos_parameter_set(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
19706{
19707 int i;
19708 bool_Bool is_s1g = sta_is_s1g(pinfo);
19709 /* WME QoS Info Field */
19710 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
19711 /* WME Reserved Field or EDCA Update */
19712 if (is_s1g) {
19713 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
19714 hf_ieee80211_s1g_update_edca_info,
19715 ett_update_edca_info, update_edca_info_headers,
19716 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19717
19718 } else {
19719 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_reserved, tvb, offset, 1, ENC_NA0x00000000);
19720 }
19721
19722 offset += 1;
19723 /* AC Parameters */
19724 for (i = 0; i < 4; i++)
19725 {
19726 proto_item *ac_item, *aci_aifsn_item, *ecw_item, *cw_item;
19727 proto_tree *ac_tree, *ecw_tree;
19728 uint8_t aci_aifsn, ecw, ecwmin, ecwmax;
19729 uint16_t cwmin, cwmax;
19730 static int * const ieee80211_wfa_ie_wme_be[] = {
19731 &hf_ieee80211_wfa_ie_wme_acp_aci_be,
19732 &hf_ieee80211_wfa_ie_wme_acp_acm_be,
19733 &hf_ieee80211_wfa_ie_wme_acp_aifsn_be,
19734 &hf_ieee80211_wfa_ie_wme_acp_reserved_be,
19735 NULL((void*)0)
19736 };
19737
19738 static int * const ieee80211_wfa_ie_wme_bk[] = {
19739 &hf_ieee80211_wfa_ie_wme_acp_aci_bk,
19740 &hf_ieee80211_wfa_ie_wme_acp_acm_bk,
19741 &hf_ieee80211_wfa_ie_wme_acp_aifsn_bk,
19742 &hf_ieee80211_wfa_ie_wme_acp_reserved_bk,
19743 NULL((void*)0)
19744 };
19745
19746 static int * const ieee80211_wfa_ie_wme_vi[] = {
19747 &hf_ieee80211_wfa_ie_wme_acp_aci_vi,
19748 &hf_ieee80211_wfa_ie_wme_acp_acm_vi,
19749 &hf_ieee80211_wfa_ie_wme_acp_aifsn_vi,
19750 &hf_ieee80211_wfa_ie_wme_acp_reserved_vi,
19751 NULL((void*)0)
19752 };
19753
19754 static int * const ieee80211_wfa_ie_wme_vo[] = {
19755 &hf_ieee80211_wfa_ie_wme_acp_aci_vo,
19756 &hf_ieee80211_wfa_ie_wme_acp_acm_vo,
19757 &hf_ieee80211_wfa_ie_wme_acp_aifsn_vo,
19758 &hf_ieee80211_wfa_ie_wme_acp_reserved_vo,
19759 NULL((void*)0)
19760 };
19761
19762 static int * const * ie_wme_hdrs[] = {
19763 ieee80211_wfa_ie_wme_be,
19764 ieee80211_wfa_ie_wme_bk,
19765 ieee80211_wfa_ie_wme_vi,
19766 ieee80211_wfa_ie_wme_vo
19767 };
19768
19769 static int * const ecw_max_hf[] = {
19770 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_be,
19771 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk,
19772 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi,
19773 &hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo
19774 };
19775
19776 static int * const ecw_min_hf[] = {
19777 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_be,
19778 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk,
19779 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi,
19780 &hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo
19781 };
19782
19783 static int * const txop_limit_hf[] = {
19784 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_be,
19785 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk,
19786 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi,
19787 &hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo
19788 };
19789
19790 ac_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_ac_parameters, tvb, offset, 4, ENC_NA0x00000000);
19791 ac_tree = proto_item_add_subtree(ac_item, ett_wme_ac);
19792
19793 /* ACI/AIFSN Field */
19794 aci_aifsn_item = proto_tree_add_bitmask_with_flags(ac_tree, tvb, offset, hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
19795 ett_wme_aci_aifsn, ie_wme_hdrs[i],
19796 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19797 aci_aifsn = tvb_get_uint8(tvb, offset);
19798 /* 802.11-2012, 8.4.2.31 EDCA Parameter Set element */
19799 if (aci_aifsn < 2) {
19800 expert_add_info_format(pinfo, aci_aifsn_item, &ei_ieee80211_qos_bad_aifsn,
19801 "The minimum value for the AIFSN subfield is 2 (found %u).", aci_aifsn);
19802 }
19803 proto_item_append_text(ac_item, " ACI %u (%s), ACM %s, AIFSN %u",
19804 (aci_aifsn & 0x60) >> 5, try_val_to_str((aci_aifsn & 0x60) >> 5, ieee80211_wfa_ie_wme_acs_vals),
19805 (aci_aifsn & 0x10) ? "yes" : "no", aci_aifsn & 0x0f);
19806 offset += 1;
19807
19808 /* ECWmin/ECWmax field */
19809 ecw_item = proto_tree_add_item(ac_tree, hf_ieee80211_wfa_ie_wme_acp_ecw, tvb, offset, 1, ENC_NA0x00000000);
19810 ecw_tree = proto_item_add_subtree(ecw_item, ett_wme_ecw);
19811 ecw = tvb_get_uint8(tvb, offset);
19812 ecwmin = ecw & 0x0f;
19813 ecwmax = (ecw & 0xf0) >> 4;
19814 cwmin= (1 << ecwmin) - 1;
19815 cwmax= (1 << ecwmax) - 1;
19816 cw_item = proto_tree_add_item(ecw_tree, *ecw_max_hf[i], tvb, offset, 1, ENC_NA0x00000000);
19817 proto_item_append_text(cw_item, " (CW Max: %u)", cwmax);
19818 cw_item = proto_tree_add_item(ecw_tree, *ecw_min_hf[i], tvb, offset, 1, ENC_NA0x00000000);
19819 proto_item_append_text(cw_item, " (CW Min: %u)", cwmin);
19820 proto_item_append_text(ac_item, ", ECWmin/max %u/%u (CWmin/max %u/%u)", ecwmin, ecwmax, cwmin, cwmax);
19821 offset += 1;
19822
19823 /* TXOP Limit */
19824 proto_tree_add_item(ac_tree, *txop_limit_hf[i], tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19825 proto_item_append_text(ac_item, ", TXOP %u", tvb_get_letohs(tvb, offset));
19826 offset += 2;
19827 }
19828
19829 return offset;
19830}
19831
19832static int
19833dissect_vendor_ie_wpawme(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, uint32_t tag_len, int ftype)
19834{
19835 uint8_t type;
19836
19837 proto_tree_add_item_ret_uint8(tree, hf_ieee80211_wfa_ie_type, tvb, offset, 1, ENC_NA0x00000000, &type);
19838 proto_item_append_text(tree, ": %s", val_to_str(pinfo->pool, type, ieee802111_wfa_ie_type_vals, "Unknown %d"));
19839 offset += 1;
19840
19841 switch (type) {
19842 case 1: /* Wi-Fi Protected Access (WPA) */
19843 {
19844 proto_item *wpa_mcs_item, *wpa_ucs_item, *wpa_akms_item;
19845 proto_item *wpa_sub_ucs_item, *wpa_sub_akms_item;
19846 proto_tree *wpa_mcs_tree, *wpa_ucs_tree, *wpa_akms_tree;
19847 proto_tree *wpa_sub_ucs_tree, *wpa_sub_akms_tree;
19848 uint16_t ucs_count, akms_count;
19849 unsigned ii;
19850
19851 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19852 offset += 2;
19853
19854 /* Multicast Cipher Suite */
19855 wpa_mcs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_mcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19856 wpa_mcs_tree = proto_item_add_subtree(wpa_mcs_item, ett_wpa_mcs_tree);
19857 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19858
19859 /* Check if OUI is 00:50:F2 (WFA) */
19860 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19861 {
19862 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_wfa_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
19863 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), GROUP_CIPHER_KEY);
19864 } else {
19865 proto_tree_add_item(wpa_mcs_tree, hf_ieee80211_wfa_ie_wpa_mcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
19866 }
19867 offset += 4;
19868
19869 /* Unicast Cipher Suites */
19870 proto_tree_add_item_ret_uint16(tree, hf_ieee80211_wfa_ie_wpa_ucs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &ucs_count);
19871 offset += 2;
19872
19873 wpa_ucs_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_ucs_list, tvb, offset, ucs_count * 4, ENC_NA0x00000000);
19874 wpa_ucs_tree = proto_item_add_subtree(wpa_ucs_item, ett_wpa_ucs_tree);
19875 for (ii = 0; ii < ucs_count; ii++)
19876 {
19877 wpa_sub_ucs_item = proto_tree_add_item(wpa_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19878 wpa_sub_ucs_tree = proto_item_add_subtree(wpa_sub_ucs_item, ett_wpa_sub_ucs_tree);
19879 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19880
19881 /* Check if OUI is 00:50:F2 (WFA) */
19882 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19883 {
19884 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19885 proto_item_append_text(wpa_ucs_item, " %s", wpa_ucs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
19886 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), CIPHER_KEY);
19887 } else {
19888 proto_tree_add_item(wpa_sub_ucs_tree, hf_ieee80211_wfa_ie_wpa_ucs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19889 }
19890 offset += 4;
19891 }
19892
19893 /* Authenticated Key Management Suites */
19894 proto_tree_add_item_ret_uint16(tree, hf_ieee80211_wfa_ie_wpa_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &akms_count);
19895 offset += 2;
19896
19897 wpa_akms_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wpa_akms_list, tvb, offset, akms_count * 4, ENC_NA0x00000000);
19898 wpa_akms_tree = proto_item_add_subtree(wpa_akms_item, ett_wpa_akms_tree);
19899 for (ii = 0; ii < akms_count; ii++)
19900 {
19901 wpa_sub_akms_item = proto_tree_add_item(wpa_akms_tree, hf_ieee80211_wfa_ie_wpa_akms, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
19902 wpa_sub_akms_tree = proto_item_add_subtree(wpa_sub_akms_item, ett_wpa_sub_akms_tree);
19903 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
19904
19905 /* Check if OUI is 00:50:F2 (WFA) */
19906 if (tvb_get_ntoh24(tvb, offset) == OUI_WPAWME0x0050F2)
19907 {
19908 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_wfa_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19909 proto_item_append_text(wpa_akms_item, " %s", wpa_akms_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
19910 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), AKM_KEY);
19911 } else {
19912 proto_tree_add_item(wpa_sub_akms_tree, hf_ieee80211_wfa_ie_wpa_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
19913 }
19914 offset += 4;
19915 }
19916 break;
19917 }
19918 case 2: /* Wireless Multimedia Enhancements (WME) */
19919 {
19920 uint8_t subtype;
19921
19922 proto_tree_add_item_ret_uint8(tree, hf_ieee80211_wfa_ie_wme_subtype, tvb, offset, 1, ENC_NA0x00000000, &subtype);
19923 proto_item_append_text(tree, ": %s", val_to_str(pinfo->pool, subtype, ieee802111_wfa_ie_wme_type, "Unknown %d"));
19924 offset += 1;
19925 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_version, tvb, offset, 1, ENC_NA0x00000000);
19926 offset += 1;
19927 switch (subtype) {
19928 case 0: /* WME Information Element */
19929 {
19930 /* WME QoS Info Field */
19931 offset = dissect_wme_qos_info(tree, tvb, pinfo, offset, ftype);
19932 break;
19933 }
19934 case 1: /* WME Parameter Element */
19935 {
19936 offset = decode_qos_parameter_set(tree, tvb, pinfo, offset, ftype);
19937 break;
19938 }
19939 case 2: /* WME TSPEC Element */
19940 {
19941 static int * const ieee80211_wfa_ie_wme_tspec_tsinfo[] = {
19942 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
19943 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
19944 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
19945 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
19946 &hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
19947 NULL((void*)0)
19948 };
19949
19950 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
19951 ett_tsinfo_tree, ieee80211_wfa_ie_wme_tspec_tsinfo,
19952 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
19953 offset += 3;
19954
19955 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19956 offset += 2;
19957
19958 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19959 offset += 2;
19960
19961 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19962 offset += 4;
19963
19964 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19965 offset += 4;
19966
19967 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19968 offset += 4;
19969
19970 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19971 offset += 4;
19972
19973 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19974 offset += 4;
19975
19976 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19977 offset += 4;
19978
19979 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19980 offset += 4;
19981
19982 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19983 offset += 4;
19984
19985 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19986 offset += 4;
19987
19988 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19989 offset += 4;
19990
19991 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
19992 offset += 4;
19993
19994 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19995 offset += 2;
19996
19997 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_wme_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
19998 offset += 2;
19999
20000 break;
20001 }
20002 default:
20003 /* No default Action */
20004 break;
20005 } /* End switch (subtype) */
20006 break;
20007 }
20008 case 4: /* WPS: Wifi Protected Setup */
20009 {
20010 dissect_wps_tlvs(tree, tvb, offset, tag_len-1, pinfo, false0);
20011 }
20012 break;
20013 case 17: /* Network Cost: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/88f0cdf4-cdf2-4455-b849-4abf1e5c11ac */
20014 {
20015 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_cost_level, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20016 offset += 1;
20017
20018 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20019 offset += 1;
20020
20021 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_cost_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20022 offset += 1;
20023
20024 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_nc_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
20025 offset += 1;
20026 }
20027 break;
20028 case 18: /* Tethering: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nct/a097f5bb-6eca-44ad-9a02-20d46ad30d6d */
20029 {
20030 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20031 offset += 2;
20032
20033 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_mac_length, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20034 offset += 2;
20035
20036 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_tethering_mac, tvb, offset, 6, ENC_NA0x00000000);
20037 offset += 6;
20038
20039 }
20040 break;
20041 default:
20042 /* No default Action...*/
20043 break;
20044 } /* End switch (type) */
20045
20046 return offset;
20047}
20048
20049/*
20050 * Dissect a group data cipher suite which consists of an OUI and a one-byte
20051 * selector: IEEE802.11 2012 Figure 9-256.
20052 *
20053 * Accepts a two entry array of header fields so we can use this elsewhere.
20054 */
20055static int dissect_group_data_cipher_suite(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
20056 proto_tree *tree, int offset, int *hf_array, int ett_val, char *label)
20057{
20058 proto_tree *gdcs_tree = NULL((void*)0);
20059
20060 gdcs_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_val, NULL((void*)0),
20061 label);
20062 proto_tree_add_item(gdcs_tree, hf_array[0], tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
20063 offset += 3;
20064 proto_tree_add_item(gdcs_tree, hf_array[1], tvb, offset, 1, ENC_NA0x00000000);
20065 offset += 1;
20066
20067 return offset;
20068}
20069
20070static int
20071dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
20072 int offset, uint32_t tag_len, association_sanity_check_t *association_sanity_check);
20073
20074static int
20075dissect_wfa_rsn_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20076{
20077 int tag_len = tvb_reported_length(tvb);
20078
20079 if (tag_len > 0)
20080 dissect_rsn_ie(pinfo, tree, tvb, 0, tag_len, NULL((void*)0));
20081
20082 return tag_len;
20083}
20084
20085static int
20086dissect_wfa_rsn_override_2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20087{
20088 int tag_len = tvb_reported_length(tvb);
20089
20090 if (tag_len > 0)
20091 dissect_rsn_ie(pinfo, tree, tvb, 0, tag_len, NULL((void*)0));
20092
20093 return tag_len;
20094}
20095
20096static int
20097dissect_rsnx_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int tag_len);
20098
20099static int
20100dissect_wfa_rsnx_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20101{
20102 int tag_len = tvb_reported_length(tvb);
20103
20104 if (tag_len > 0)
20105 dissect_rsnx_ie(tvb, pinfo, tree, tag_len);
20106
20107 return tag_len;
20108}
20109
20110static int
20111dissect_wfa_rsn_selection(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20112{
20113 int tag_len = tvb_reported_length(tvb);
20114
20115 proto_tree_add_item(tree, hf_ieee80211_wfa_rsn_selection, tvb, 0,
20116 1, ENC_NA0x00000000);
20117
20118 return tag_len;
20119}
20120
20121static int
20122dissect_wfa_rsn_override_link_kde(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20123{
20124 int tag_len = tvb_reported_length(tvb);
20125 int offset = 0;
20126
20127 proto_tree_add_item(tree, hf_ieee80211_wfa_rsn_or_link_kde_link_id, tvb, offset,
20128 1, ENC_NA0x00000000);
20129 offset++;
20130 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tree,
20131 tag_len - 1, -1, NULL((void*)0));
20132
20133 return tag_len;
20134}
20135
20136static const range_string qos_mgmt_attributes[] = {
20137 { 0, 0, "Reserved" },
20138 { 1, 1, "Port Range" },
20139 { 2, 2, "DSCP Policy" },
20140 { 3, 3, "TCLAS" },
20141 { 4, 4, "Domain Name" },
20142 { 5, 255, "Reserved" },
20143 { 0, 0, NULL((void*)0) }
20144};
20145
20146static int
20147ieee80211_frame_classifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
20148 proto_tree *tree, int offset, int tag_len);
20149
20150static int
20151dissect_qos_mgmt(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20152{
20153 int offset = 0;
20154 uint8_t attr_id;
20155 uint8_t attr_len;
20156 uint8_t attr_num = 0;
20157 proto_tree *sub_tree = NULL((void*)0);
20158
20159 while (tvb_captured_length_remaining(tvb, offset)) {
20160 attr_id = tvb_get_uint8(tvb, offset);
20161 attr_len = tvb_get_uint8(tvb, offset + 1);
20162 proto_tree *attr = NULL((void*)0);
20163
20164 attr = proto_tree_add_subtree_format(tree, tvb, offset, attr_len + 2,
20165 ett_qos_mgmt_attributes, NULL((void*)0),
20166 "QoS Management Attribute %d", attr_num++);
20167 proto_tree_add_item(attr, hf_ieee80211_qos_mgmt_attribute_id, tvb, offset,
20168 1, ENC_NA0x00000000);
20169 offset += 1;
20170
20171 proto_tree_add_item(attr, hf_ieee80211_qos_mgmt_attribute_len, tvb, offset,
20172 1, ENC_NA0x00000000);
20173 offset += 1;
20174
20175 switch (attr_id) {
20176 case 1:
20177 sub_tree = proto_tree_add_subtree(attr, tvb, offset, 1,
20178 ett_qos_mgmt_dscp_policy_capabilities, NULL((void*)0),
20179 "Port Range");
20180 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_start_port_range,
20181 tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
20182 offset += 2;
20183
20184 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_end_port_range, tvb,
20185 offset, 2, ENC_BIG_ENDIAN0x00000000);
20186 offset += 2;
20187 break;
20188 case 2:
20189 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20190 ett_qos_mgmt_dscp_policy, NULL((void*)0),
20191 "DSCP Policy");
20192
20193 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_id, tvb,
20194 offset, 1, ENC_NA0x00000000);
20195 offset += 1;
20196
20197 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_req_type,
20198 tvb, offset, 1, ENC_NA0x00000000);
20199 offset += 1;
20200
20201 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_dscp_pol_dscp, tvb,
20202 offset, 1, ENC_NA0x00000000);
20203 offset += 1;
20204 break;
20205 case 3:
20206 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20207 ett_qos_mgmt_tclas, NULL((void*)0),
20208 "TCLAS");
20209
20210 ieee80211_frame_classifier(tvb, pinfo, sub_tree, offset, attr_len);
20211 offset += attr_len;
20212 break;
20213 case 4:
20214 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20215 ett_qos_mgmt_domain_name, NULL((void*)0),
20216 "Domain Name");
20217 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_domain_name, tvb,
20218 offset, attr_len, ENC_ASCII0x00000000);
20219 offset += attr_len;
20220 break;
20221 default:
20222 sub_tree = proto_tree_add_subtree(attr, tvb, offset, attr_len,
20223 ett_qos_mgmt_unknown_attribute, NULL((void*)0),
20224 "Unknown attribute");
20225 proto_tree_add_item(sub_tree, hf_ieee80211_qos_mgmt_unknown_attr, tvb,
20226 offset, attr_len, ENC_NA0x00000000);
20227 offset += attr_len;
20228 break;
20229 }
20230 }
20231
20232 return offset;
20233}
20234
20235static int * const wfa_capa_fields[] = {
20236 &hf_ieee80211_wfa_capa_mgmt_dscp_policy,
20237 &hf_ieee80211_wfa_capa_mgmt_unsol_dscp_policy,
20238 &hf_ieee80211_wfa_capa_mgmt_scs_traffic_desc,
20239 &hf_ieee80211_wfa_capa_5g_wifi_qos_mapping,
20240 &hf_ieee80211_wfa_capa_data_plane_stat_report,
20241 &hf_ieee80211_wfa_capa_radio_counters_stat_support,
20242 &hf_ieee80211_wfa_capa_control_plane_stat_report,
20243 &hf_ieee80211_wfa_capa_unsolicited_report_support,
20244 NULL((void*)0)
20245};
20246
20247static int * const wfa_capa_supp_gene[] = {
20248 &hf_ieee80211_wfa_capa_attr_supp_generations_b0,
20249 &hf_ieee80211_wfa_capa_attr_supp_generations_b1,
20250 &hf_ieee80211_wfa_capa_attr_supp_generations_b2,
20251 &hf_ieee80211_wfa_capa_attr_supp_generations_b3,
20252 &hf_ieee80211_wfa_capa_attr_supp_generations_reserved,
20253 NULL((void*)0)
20254};
20255
20256static int * const wfa_capa_cert_gene[] = {
20257 &hf_ieee80211_wfa_capa_attr_cert_generations_b0,
20258 &hf_ieee80211_wfa_capa_attr_cert_generations_b1,
20259 &hf_ieee80211_wfa_capa_attr_cert_generations_b2,
20260 &hf_ieee80211_wfa_capa_attr_cert_generations_b3,
20261 &hf_ieee80211_wfa_capa_attr_cert_generations_reserved,
20262 NULL((void*)0)
20263};
20264
20265static const range_string wfa_capa_attr_id[] = {
20266 { 0, 0, "Reserved" },
20267 { 1, 1, "Generational Capabilities Indication attribute" },
20268 { 2, 220, "Reserved" },
20269 { 221, 221, "Vendor Specific attribute" },
20270 { 222, 225, "Reserved" },
20271 { 0, 0, NULL((void*)0) }
20272};
20273
20274static int
20275dissect_wfa_capa(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20276{
20277 uint32_t attr_id = 0, attr_len = 0;
20278 unsigned offset = 0, tag_len = tvb_captured_length_remaining(tvb, offset);
20279 proto_tree *attr_tree = NULL((void*)0);
20280 uint32_t capa_len = 0;
20281
20282 if (tag_len < 2) {
20283 proto_item *tag_data;
20284
20285 tag_data = proto_tree_add_item(tree, hf_ieee80211_wfa_capa_tag_data, tvb,
20286 offset, tag_len, ENC_NA0x00000000);
20287 expert_add_info_format(pinfo, tag_data, &ei_ieee80211_tag_length,
20288 "WFA Capabilities length %u too short, must be >= 2", tag_len);
20289
20290 return tag_len;
20291 }
20292
20293 /* There is at least two bytes, a length and the capabilities. */
20294 /* Capa length can be 0 */
20295 proto_tree_add_item_ret_uint(tree, hf_ieee80211_wfa_capa_tag_len, tvb, offset,
20296 1, ENC_NA0x00000000, &capa_len);
20297 offset += 1;
20298
20299 if (capa_len > 0) {
20300 proto_tree_add_bitmask(tree, tvb, offset,
20301 hf_ieee80211_wfa_capa_tag_capabilities,
20302 ett_wfa_capa, wfa_capa_fields,
20303 ENC_NA0x00000000);
20304 offset += capa_len;
20305 }
20306
20307 if (tag_len > offset)
20308 attr_tree = proto_tree_add_subtree(tree, tvb, offset, tag_len - offset,
20309 ett_wfa_capa_attributes, NULL((void*)0),
20310 "Attributes");
20311 /* Deal with the attributes */
20312 while (tag_len > offset) {
20313 proto_tree_add_item_ret_uint(attr_tree, hf_ieee80211_wfa_capa_attr_id, tvb,
20314 offset, 1, ENC_NA0x00000000, &attr_id);
20315 offset += 1;
20316
20317 proto_tree_add_item_ret_uint(attr_tree, hf_ieee80211_wfa_capa_attr_len, tvb,
20318 offset, 1, ENC_NA0x00000000, &attr_len);
20319 offset += 1;
20320
20321 if (attr_id == 1) {/* Generational Capa indication */
20322 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_capa_attr_supp_gene_length,
20323 tvb, offset, 1, ENC_NA0x00000000);
20324 offset += 1;
20325
20326 proto_tree_add_bitmask_with_flags(attr_tree, tvb, offset,
20327 hf_ieee80211_wfa_capa_attr_supp_generations,
20328 ett_wfa_capa_supp_gene, wfa_capa_supp_gene,
20329 ENC_NA0x00000000, BMT_NO_APPEND0x01);
20330 offset += 1;
20331
20332 if (attr_len > 2) {
20333 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_capa_attr_cert_gene_length,
20334 tvb, offset, 1, ENC_NA0x00000000);
20335 offset += 1;
20336
20337 proto_tree_add_bitmask_with_flags(attr_tree, tvb, offset,
20338 hf_ieee80211_wfa_capa_attr_cert_generations,
20339 ett_wfa_capa_cert_gene, wfa_capa_cert_gene,
20340 ENC_NA0x00000000, BMT_NO_APPEND0x01);
20341 offset += 1;
20342 }
20343 } else {
20344 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_capa_attr_field, tvb,
20345 offset, attr_len, ENC_NA0x00000000);
20346 offset += attr_len;
20347 }
20348 }
20349
20350 return offset;
20351}
20352
20353/*
20354 * Handle the HS 2.0 rev 2 OSU Server-only authenticated layer 2 Encryption
20355 * Network element. This is almost the same format as the RSNE so maybe some
20356 * common code can be used.
20357 */
20358static int
20359dissect_hs20_osen(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20360{
20361 int offset = 0;
20362 int hf_array[2] = { hf_ieee80211_group_data_cipher_suite_oui,
20363 hf_ieee80211_group_data_cipher_suite_type };
20364 proto_tree *pwc_list = NULL((void*)0);
20365 proto_item *pwcsi = NULL((void*)0);
20366 uint16_t pwc_count = 0, pwc_index = 0;
20367 uint16_t akms_count = 0, akms_index = 0;
20368 static int * const osen_rsn_cap[] = {
20369 &hf_ieee80211_osen_rsn_cap_preauth,
20370 &hf_ieee80211_osen_rsn_cap_no_pairwise,
20371 &hf_ieee80211_osen_rsn_cap_ptksa_replay_counter,
20372 &hf_ieee80211_osen_rsn_cap_gtksa_replay_counter,
20373 &hf_ieee80211_osen_rsn_cap_mfpr,
20374 &hf_ieee80211_osen_rsn_cap_mfpc,
20375 &hf_ieee80211_osen_rsn_cap_jmr,
20376 &hf_ieee80211_osen_rsn_cap_peerkey,
20377 &hf_ieee80211_osen_rsn_spp_a_msdu_capable,
20378 &hf_ieee80211_osen_rsn_spp_a_msdu_required,
20379 &hf_ieee80211_osen_rsn_pbac,
20380 &hf_ieee80211_osen_extended_key_id_iaf,
20381 &hf_ieee80211_osen_reserved,
20382 NULL((void*)0)
20383 };
20384 uint16_t pmkid_count = 0, pmkid_index = 0;
20385 int gmcs_array[2] = { hf_ieee80211_osen_group_management_cipher_suite_oui,
20386 hf_ieee80211_osen_group_management_cipher_suite_type };
20387
20388 offset = dissect_group_data_cipher_suite(tvb, pinfo, tree, offset, hf_array,
20389 ett_osen_group_data_cipher_suite,
20390 "OSEN Group Data Cipher Suite");
20391
20392 pwc_count = tvb_get_letohs(tvb, offset);
20393 proto_tree_add_item(tree, hf_ieee80211_osen_pcs_count, tvb, offset,
20394 2, ENC_LITTLE_ENDIAN0x80000000);
20395 offset += 2;
20396
20397 if (pwc_count > 0) {
20398 int start_offset = offset;
20399 pwc_list = proto_tree_add_subtree(tree, tvb, offset, -1,
20400 ett_osen_pairwise_cipher_suites, &pwcsi,
20401 "OSEN Pairwise Cipher Suite List");
20402
20403 while (pwc_count > 0) {
20404 if (tvb_reported_length_remaining(tvb, offset) >= 4) {
20405 int hf_array2[2] = { hf_ieee80211_osen_pairwise_cipher_suite_oui,
20406 hf_ieee80211_osen_pairwise_cipher_suite_type };
20407 char label[128];
20408
20409 snprintf(label, sizeof(label), "OSEN Pairwise Cipher Suite %d", pwc_index);
20410 offset = dissect_group_data_cipher_suite(tvb, pinfo, pwc_list,
20411 offset, hf_array2, ett_osen_pairwise_cipher_suite,
20412 label);
20413 pwc_index++;
20414 pwc_count--;
20415 } else {
20416 /* Insert the remaining? Expert Info? */
20417 offset += tvb_reported_length_remaining(tvb, offset);
20418 break;
20419 }
20420 }
20421
20422 proto_item_set_len(pwcsi, offset - start_offset);
20423 }
20424
20425 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20426 return tvb_captured_length(tvb);
20427 }
20428
20429 /* Now handle the AKM Suites */
20430 akms_count = tvb_get_letohs(tvb, offset);
20431 proto_tree_add_item(tree, hf_ieee80211_osen_akm_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
20432 offset += 2;
20433
20434 if (akms_count > 0) {
20435 int start_offset = offset;
20436 proto_tree *akm_list = NULL((void*)0);
20437 proto_item *akmcsi = NULL((void*)0);
20438
20439 akm_list = proto_tree_add_subtree(tree, tvb, offset, -1,
20440 ett_osen_akm_cipher_suites, &akmcsi,
20441 "OSEN AKM Cipher Suite List");
20442
20443 while (akms_count > 0) {
20444 if (tvb_reported_length_remaining(tvb, offset) >= 4) {
20445 int hf_array3[2] = { hf_ieee80211_osen_akm_cipher_suite_oui,
20446 hf_ieee80211_osen_akm_cipher_suite_type};
20447 char label[128];
20448
20449 snprintf(label, sizeof(label), "OSEN AKM Cipher Suite %d", akms_index);
20450 offset = dissect_group_data_cipher_suite(tvb, pinfo, akm_list,
20451 offset, hf_array3, ett_osen_akm_cipher_suite,
20452 label);
20453 akms_index++;
20454 akms_count--;
20455 } else {
20456 /* Expert info? */
20457 offset += tvb_reported_length_remaining(tvb, offset);
20458 break;
20459 }
20460 }
20461 proto_item_set_len(akmcsi, offset - start_offset);
20462 }
20463
20464 /* Any more? */
20465 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20466 return tvb_captured_length(tvb);
20467 }
20468
20469 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_osen_rsn_cap_flags,
20470 ett_osen_rsn_cap_tree, osen_rsn_cap,
20471 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
20472 offset += 2;
20473
20474 /* Any more? */
20475 if (tvb_reported_length_remaining(tvb, offset) == 0) {
20476 return tvb_captured_length(tvb);
20477 }
20478
20479 proto_tree_add_item_ret_uint16(tree, hf_ieee80211_osen_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &pmkid_count);
20480 offset += 2;
20481
20482 if (pmkid_count > 0) {
20483 proto_tree *pmkid_list = NULL((void*)0);
20484
20485 pmkid_list = proto_tree_add_subtree(tree, tvb, offset, pmkid_count * 16,
20486 ett_osen_pmkid_list, NULL((void*)0),
20487 "OSEN PKMID List");
20488
20489 while (pmkid_count > 0) {
20490 proto_tree *pmkid_tree = NULL((void*)0);
20491
20492 pmkid_tree = proto_tree_add_subtree_format(pmkid_list, tvb,offset, 16,
20493 ett_osen_pmkid_tree, NULL((void*)0),
20494 "OSEN PKMID %d", pmkid_index);
20495 proto_tree_add_item(pmkid_tree, hf_ieee80211_osen_pmkid, tvb, offset, 16,
20496 ENC_NA0x00000000);
20497 offset += 16;
20498 pmkid_index++;
20499 pmkid_count--;
20500 }
20501 }
20502
20503 offset = dissect_group_data_cipher_suite(tvb, pinfo, tree, offset, gmcs_array,
20504 ett_osen_group_management_cipher_suite,
20505 "OSEN Group Management Cipher Suite");
20506
20507 return offset;
20508}
20509
20510static const value_string hs20_indication_version_number_vals[] = {
20511 { 0, "1.x" },
20512 { 1, "2.x" },
20513 { 2, "3.x" },
20514 { 0, NULL((void*)0) }
20515};
20516
20517static int
20518dissect_hs20_indication(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
20519{
20520 static int * const ieee80211_hs20_indication[] = {
20521 &hf_ieee80211_hs20_indication_dgaf_disabled,
20522 &hf_ieee80211_hs20_indication_pps_mo_id_present,
20523 &hf_ieee80211_hs20_indication_anqp_domain_id_present,
20524 &hf_ieee80211_hs20_reserved,
20525 &hf_ieee80211_hs20_indication_version_number,
20526 NULL((void*)0)
20527 };
20528 int len = tvb_captured_length(tvb);
20529 int offset = 0;
20530 uint8_t indic = tvb_get_uint8(tvb, offset);
20531
20532 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_hs20_indication,
20533 ENC_NA0x00000000);
20534 offset++;
20535
20536 if (len >= 3 && (indic & 0x02)) { /* Contains a PPS MO ID field ... display it. */
20537 proto_tree_add_item(tree, hf_ieee80211_hs20_indication_pps_mo_id, tvb, offset,
20538 2, ENC_LITTLE_ENDIAN0x80000000);
20539 offset += 2;
20540 }
20541
20542 if ((len >= (offset + 2)) && (indic & 0x04)) {
20543 proto_tree_add_item(tree, hf_ieee80211_hs20_indication_anqp_domain_id, tvb, offset,
20544 2, ENC_LITTLE_ENDIAN0x80000000);
20545 offset += 2;
20546 }
20547
20548 return offset;
20549}
20550
20551enum ieee80211_wfa_60g_attr {
20552 /* 0 Reserved */
20553 WIFI_60G_ATTR_CAPABILITY = 1,
20554 /* 2 - 225 Reserved */
20555};
20556
20557static const value_string ieee80211_wfa_60g_attr_ids[] = {
20558 { WIFI_60G_ATTR_CAPABILITY, "60GHz Capability" },
20559 { 0, NULL((void*)0) }
20560};
20561
20562static int
20563dissect_wfa_60g_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
20564{
20565 int end = tvb_reported_length(tvb);
20566 int offset = 0;
20567 uint8_t id;
20568 uint16_t len;
20569 proto_tree *wf60g_tree;
20570 proto_item *attrs;
20571
20572 while (offset < end) {
20573 if (end - offset < 2) {
20574 expert_add_info_format(pinfo, tree, &ei_ieee80211_wfa_60g_attr_len_invalid, "Packet too short for Wi-Fi 60G attribute");
20575 break;
20576 }
20577
20578 id = tvb_get_uint8(tvb, offset);
20579 len = tvb_get_ntohs(tvb, offset + 1);
20580 attrs = proto_tree_add_item(tree, hf_ieee80211_wfa_60g_attr, tvb, offset, 0, ENC_NA0x00000000);
20581 proto_item_append_text(attrs, ": %s", val_to_str(pinfo->pool, id, ieee80211_wfa_60g_attr_ids,
20582 "Unknown attribute ID (%u)"));
20583 wf60g_tree = proto_item_add_subtree(attrs, ett_ieee80211_wfa_60g_attr);
20584 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20585 offset += 1;
20586 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20587 offset += 1;
20588
20589
20590 switch (id) {
20591 case WIFI_60G_ATTR_CAPABILITY:
20592 if (len - offset < 7) {
20593 expert_add_info_format(pinfo, tree, &ei_ieee80211_wfa_60g_attr_len_invalid, "Packet too short for 60G capability attribute");
20594 break;
20595 }
20596
20597 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
20598 offset += 6;
20599 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20600 proto_tree_add_item(wf60g_tree, hf_ieee80211_wfa_60g_attr_cap_reserved, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
20601 offset += 1;
20602 break;
20603 default:
20604 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_wfa_60g_unknown_attribute, tvb,
20605 offset, len+2, "Unknown attribute ID (%u)", id);
20606 }
20607
20608 offset += len;
20609 }
20610 return offset;
20611}
20612
20613static int
20614dissect_owe_transition_mode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20615{
20616 uint8_t ssid_len;
20617
20618 int len = tvb_captured_length(tvb);
20619 int offset = 0;
20620
20621 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_bssid, tvb, offset, 6, ENC_NA0x00000000);
20622 offset += 6;
20623 len -= 6;
20624
20625 ssid_len = tvb_get_uint8(tvb, offset);
20626
20627 proto_tree_add_uint(tree, hf_ieee80211_wfa_ie_owe_ssid_length, tvb, offset, 1, ssid_len);
20628 offset += 1;
20629 len -= 1;
20630
20631 if (len < ssid_len) {
20632 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20633 return offset;
20634 }
20635
20636 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_ssid, tvb, offset, ssid_len, ENC_ASCII0x00000000);
20637 offset += len;
20638 len -= len;
20639
20640 if (len >= 2) {
20641 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_band_info, tvb, offset, 1, ENC_NA0x00000000);
20642 offset += 1;
20643
20644 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_owe_channel_info, tvb, offset, 1, ENC_NA0x00000000);
20645 offset += 1;
20646 }
20647
20648 return offset;
20649}
20650
20651static int
20652dissect_transition_disable_kde(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20653{
20654 int tag_len = tvb_captured_length(tvb);
20655 int offset = 0;
20656 static int * const ieee80211_wfa_transition_disable_flags[] = {
20657 &hf_ieee80211_wfa_ie_transition_disable_wpa3_personal,
20658 &hf_ieee80211_wfa_ie_transition_disable_sae_pk,
20659 &hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise,
20660 &hf_ieee80211_wfa_ie_transition_disable_enhanced_open,
20661 &hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7,
20662 NULL((void*)0)
20663 };
20664
20665 if (tag_len < 1) {
20666 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20667 return 0;
20668 }
20669
20670 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_wfa_ie_transition_disable_bitmap,
20671 ett_ieee80211_wfa_transition_disable_tree,
20672 ieee80211_wfa_transition_disable_flags,
20673 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
20674 offset++;
20675
20676 if (offset < tag_len)
20677 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_transition_disable_reserved, tvb, offset, tag_len-offset, ENC_NA0x00000000);
20678 offset = tag_len;
20679
20680 return offset;
20681}
20682
20683static int
20684dissect_mbo_oce(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20685{
20686 int len = tvb_reported_length(tvb);
20687 int offset = 0;
20688
20689 while (len >= 2) {
20690 proto_item *attr_item;
20691 proto_tree *attr_tree;
20692 uint8_t attr_id = tvb_get_uint8(tvb, offset);
20693 uint8_t attr_len = tvb_get_uint8(tvb, offset + 1);
20694
20695 if (len < (attr_len + 2)) {
20696 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20697 return offset;
20698 }
20699
20700 attr_item = proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_oce_attr, tvb, offset, attr_len + 2, ENC_NA0x00000000);
20701 attr_tree = proto_item_add_subtree(attr_item, ett_mbo_oce_attr);
20702 proto_item_append_text(attr_item, " (%s)", val_to_str_const(attr_id, wfa_mbo_oce_attr_id_vals, "Unknown"));
20703
20704 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_oce_attr_id, tvb, offset, 1, ENC_NA0x00000000);
20705 offset += 1;
20706 len -= 1;
20707
20708 proto_tree_add_uint(attr_tree, hf_ieee80211_wfa_ie_mbo_oce_attr_len, tvb, offset, 1, attr_len);
20709 offset += 1;
20710 len -= 1;
20711
20712 switch (attr_id) {
20713 case MBO_AP_CAPABILITY_INDICATION1:
20714 {
20715 proto_item *cap_item;
20716 proto_tree *cap_tree;
20717
20718 if (attr_len != 1) {
20719 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20720 return offset;
20721 }
20722 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_ap_cap, tvb, offset, 1, ENC_NA0x00000000);
20723 cap_tree = proto_item_add_subtree(cap_item, ett_mbo_ap_cap);
20724 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_mbo_ap_cap_cell, tvb, offset, 1, ENC_NA0x00000000);
20725 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_mbo_ap_cap_reserved, tvb, offset, 1, ENC_NA0x00000000);
20726 break;
20727 }
20728 case MBO_NON_PREF_CHANNEL_REPORT2:
20729 if (attr_len == 0)
20730 break;
20731
20732 if (attr_len < 3) {
20733 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20734 return offset;
20735 }
20736 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class, tvb, offset, 1, ENC_NA0x00000000);
20737 offset += 1;
20738 len -= 1;
20739 attr_len -= 1;
20740 while (attr_len > 2) {
20741 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan, tvb, offset, 1, ENC_NA0x00000000);
20742 offset += 1;
20743 len -= 1;
20744 attr_len -= 1;
20745 }
20746
20747 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref, tvb, offset, 1, ENC_NA0x00000000);
20748 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason, tvb, offset + 1, 1, ENC_NA0x00000000);
20749 break;
20750 case MBO_CELLULAR_DATA_CAPABILITIES3:
20751 if (attr_len != 1) {
20752 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20753 return offset;
20754 }
20755 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_cellular_cap, tvb, offset, 1, ENC_NA0x00000000);
20756 break;
20757 case MBO_ASSOCIATION_DISALLOWED4:
20758 if (attr_len != 1) {
20759 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20760 return offset;
20761 }
20762 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason, tvb, offset, 1, ENC_NA0x00000000);
20763 break;
20764 case MBO_CELLULAR_DATA_PREFERENCE5:
20765 if (attr_len != 1) {
20766 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20767 return offset;
20768 }
20769 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_cellular_pref, tvb, offset, 1, ENC_NA0x00000000);
20770 break;
20771 case MBO_TRANSITION_REASON6:
20772 if (attr_len != 1) {
20773 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20774 return offset;
20775 }
20776 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_transition_reason, tvb, offset, 1, ENC_NA0x00000000);
20777 break;
20778 case MBO_TRANSITION_REJECTION_REASON7:
20779 if (attr_len != 1) {
20780 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20781 return offset;
20782 }
20783 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_transition_rej_reason, tvb, offset, 1, ENC_NA0x00000000);
20784 break;
20785 case MBO_ASSOCIATION_RETRY_DELAY8:
20786 {
20787 if (attr_len != 2) {
20788 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20789 return offset;
20790 }
20791 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_mbo_assoc_retry_delay, tvb, offset,
20792 2, ENC_LITTLE_ENDIAN0x80000000);
20793 break;
20794 }
20795 case OCE_CAPABILITY_INDICATION101:
20796 {
20797 proto_item *cap_item;
20798 proto_tree *cap_tree;
20799
20800 if (attr_len != 1) {
20801 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20802 return offset;
20803 }
20804 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_cap_ctrl, tvb, offset, 1, ENC_NA0x00000000);
20805 cap_tree = proto_item_add_subtree(cap_item, ett_oce_cap);
20806 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_release, tvb, offset, 1, ENC_NA0x00000000);
20807 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_sta_cfon, tvb, offset, 1, ENC_NA0x00000000);
20808 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_11b_only_ap, tvb, offset, 1, ENC_NA0x00000000);
20809 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_hlp, tvb, offset, 1, ENC_NA0x00000000);
20810 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_non_oce_ap, tvb, offset, 1, ENC_NA0x00000000);
20811 proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_cap_reserved, tvb, offset, 1, ENC_NA0x00000000);
20812 break;
20813 }
20814 case OCE_RSSI_ASSOCIATION_REJECTION102:
20815 {
20816 if (attr_len != 2) {
20817 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20818 return offset;
20819 }
20820 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta, tvb,
20821 offset, 1, ENC_NA0x00000000);
20822 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay, tvb,
20823 offset + 1, 1, ENC_NA0x00000000);
20824 break;
20825 }
20826 case OCE_REDUCED_WAN_METRICS103:
20827 {
20828 proto_item *cap_item;
20829 proto_tree *cap_tree;
20830 uint8_t capacity;
20831
20832 if (attr_len != 1) {
20833 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20834 return offset;
20835 }
20836 cap_item = proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap,
20837 tvb, offset, 1, ENC_NA0x00000000);
20838 cap_tree = proto_item_add_subtree(cap_item, ett_oce_metrics_cap);
20839
20840 capacity = tvb_get_uint8(tvb, offset);
20841 cap_item = proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink,
20842 tvb, offset, 1, ENC_NA0x00000000);
20843 proto_item_append_text(cap_item, " (%d kbit/s)", (1 << (capacity & 0xF)) * 100);
20844 cap_item = proto_tree_add_item(cap_tree, hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink,
20845 tvb, offset, 1, ENC_NA0x00000000);
20846 capacity >>= 4;
20847 proto_item_append_text(cap_item, " (%d kbit/s)", (1 << (capacity & 0xF)) * 100);
20848 break;
20849 }
20850 case OCE_RNR_COMPLETENESS104:
20851 while (attr_len >= 4) {
20852 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid,
20853 tvb, offset, 4, ENC_ASCII0x00000000);
20854 offset += 4;
20855 attr_len -= 4;
20856 len -= 4;
20857 }
20858 break;
20859 case OCE_PROBE_SUPPR_BSSID105:
20860 while (attr_len >= 6) {
20861 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_probe_suppr_bssid,
20862 tvb, offset, 6, ENC_NA0x00000000);
20863 offset += 6;
20864 attr_len -= 6;
20865 len -= 6;
20866 }
20867 break;
20868 case OCE_PROBE_SUPPR_SSID106:
20869 if (attr_len < 4) {
20870 expert_add_info(pinfo, attr_tree, &ei_ieee80211_bad_length);
20871 return offset;
20872 }
20873 while (attr_len >= 4) {
20874 proto_tree_add_item(attr_tree, hf_ieee80211_wfa_ie_oce_probe_suppr_ssid,
20875 tvb, offset, 4, ENC_ASCII0x00000000);
20876 offset += 4;
20877 attr_len -= 4;
20878 len -= 4;
20879 }
20880 break;
20881 default:
20882 break;
20883 }
20884
20885 offset += attr_len;
20886 len -= attr_len;
20887 }
20888
20889 if (len != 0) {
20890 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20891 }
20892
20893 return offset;
20894}
20895
20896static int
20897dissect_wfa_wnm_non_pref_chan(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20898{
20899 int len = tvb_reported_length(tvb);
20900 int offset = 0;
20901
20902 if (len == 0)
20903 return 0;
20904
20905 if (len < 3) {
20906 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20907 return 0;
20908 }
20909
20910 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class, tvb, offset, 1, ENC_NA0x00000000);
20911 offset ++;
20912 len --;
20913 while (len > 2) {
20914 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan, tvb, offset, 1, ENC_NA0x00000000);
20915 offset ++;
20916 len --;
20917 }
20918
20919 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref, tvb, offset, 1, ENC_NA0x00000000);
20920 offset ++;
20921 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason, tvb, offset, 1, ENC_NA0x00000000);
20922 offset ++;
20923 return offset;
20924}
20925
20926static int
20927dissect_wfa_wnm_cell_cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
20928{
20929 int len = tvb_reported_length(tvb);
20930
20931 if (len != 1) {
20932 expert_add_info(pinfo, tree, &ei_ieee80211_bad_length);
20933 return 0;
20934 }
20935
20936 proto_tree_add_item(tree, hf_ieee80211_wfa_ie_mbo_cellular_cap, tvb, 0, 1, ENC_NA0x00000000);
20937 return len;
20938}
20939
20940static void
20941dissect_vendor_ie_wfa(packet_info *pinfo, proto_item *item, tvbuff_t *tag_tvb)
20942{
20943 int tag_len = tvb_reported_length(tag_tvb);
20944 int dissect;
20945 uint8_t subtype;
20946 int offset = 0;
20947 tvbuff_t *vendor_tvb;
20948
20949 if (tag_len < 4)
20950 return;
20951
20952 subtype = tvb_get_uint8(tag_tvb, 3);
20953 proto_item_append_text(item, ": %s", val_to_str_const(subtype, wfa_subtype_vals, "Unknown"));
20954 vendor_tvb = tvb_new_subset_length(tag_tvb, offset + 4, tag_len - 4);
20955 dissect = dissector_try_uint_with_data(wifi_alliance_ie_table, subtype, vendor_tvb, pinfo, item, false0, NULL((void*)0));
20956 if (dissect <= 0) {
20957 proto_tree_add_item(item, hf_ieee80211_tag_vendor_data, vendor_tvb, 0, tag_len - 4, ENC_NA0x00000000);
20958 }
20959}
20960
20961static const range_string kde_selectors_rvals[] = {
20962 { 0, 0, "Reserved" },
20963 { 1, 1, "GTK KDE" },
20964 { 2, 2, "Reserved" },
20965 { 3, 3, "MAC address KDE" },
20966 { 4, 4, "PMKID KDE" },
20967 { 5, 5, "Reserved" },
20968 { 6, 6, "Nonce KDE" },
20969 { 7, 7, "Lifetime KDE" },
20970 { 8, 8, "Error KDE" },
20971 { 9, 9, "IGTK KDE" },
20972 { 10, 10, "Key ID KDE" },
20973 { 11, 11, "Multi-band GTK KDE" },
20974 { 12, 12, "Multi-band Key ID KDE" },
20975 { 13, 13, "OCI KDE" },
20976 { 14, 14, "BIGTK KDE" },
20977 { 15, 15, "Reserved" },
20978 { 16, 16, "MLO GTK KDE" },
20979 { 17, 17, "MLO IGTK KDE" },
20980 { 18, 18, "MLO BIGTK KDE" },
20981 { 19, 19, "MLO LINK KDE" },
20982 { 20, 255, "Reserved" },
20983 { 0, 0, NULL((void*)0) }
20984};
20985
20986static const true_false_string tfs_rsn_gtk_kde_tx = {
20987 "Temporal key used for both transmission and reception",
20988 "Temporal key used only for reception"
20989};
20990
20991static int * const mlo_kde_link_hdrs[] = {
20992 &hf_ieee80211_rsn_ie_mlo_linkid,
20993 &hf_ieee80211_rsn_ie_mlo_rnse_present,
20994 &hf_ieee80211_rsn_ie_mlo_rnsxe_present,
20995 &hf_ieee80211_rsn_ie_mlo_reserved,
20996 NULL((void*)0)
20997};
20998
20999static void
21000dissect_rsn_ie_mlo_link(proto_item *item, proto_tree *tree, tvbuff_t *tvb,
21001 int offset, uint32_t tag_len _U___attribute__((unused)), packet_info *pinfo)
21002{
21003 uint8_t info = tvb_get_uint8(tvb, offset);
21004 int mlo_links = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MLO_LINK_COUNT))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, MLO_LINK_COUNT)))
;
21005
21006 proto_tree_add_bitmask(tree, tvb, offset,
21007 hf_ieee80211_rsn_ie_mlo_link_info,
21008 ett_kde_mlo_link_info, mlo_kde_link_hdrs,
21009 ENC_NA0x00000000);
21010 offset += 1;
21011
21012 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_mac_addr, tvb, offset, 6,
21013 ENC_NA0x00000000);
21014 if (mlo_links < DOT11DECRYPT_MAX_MLO_LINKS3) {
21015 uint8_t link_id = info & 0x0f;
21016 save_proto_data_value(pinfo, link_id, MLO_LINK_ID_FIRST + mlo_links);
21017 save_proto_data(tvb, pinfo, offset, 6, MLO_LINK_MAC_FIRST + mlo_links);
21018 save_proto_data_value(pinfo, mlo_links + 1, MLO_LINK_COUNT);
21019 }
21020 offset += 6;
21021 if ((info & 0x10) == 0x10) { /* Add the RSNE if present */
21022 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
21023 }
21024
21025 if ((info & 0x20) == 0x20) { /* Add the RSNXE if present */
21026 add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
21027 }
21028
21029 proto_item_append_text(item, ": MLO Link KDE");
21030}
21031
21032static void
21033dissect_vendor_ie_rsn(proto_item * item, proto_tree * tree, tvbuff_t * tvb,
21034 int offset, uint32_t tag_len, packet_info *pinfo)
21035{
21036 uint8_t data_type = tvb_get_uint8(tvb, offset);
21037 int mlo_gtk_nb;
21038 uint8_t flags;
21039 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_data_type, tvb,
21040 offset, 1, ENC_NA0x00000000);
21041 offset += 1;
21042
21043 switch(data_type) {
21044 case 1:
21045 {
21046 /* IEEE 802.11i / Key Data Encapsulation / Data Type=1 - GTK.
21047 * This is only used within EAPOL-Key frame Key Data. */
21048 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_key_id, tvb,
21049 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21050 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_tx, tvb, offset,
21051 1, ENC_LITTLE_ENDIAN0x80000000);
21052 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_reserved1, tvb,
21053 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21054 offset += 1;
21055 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_reserved2, tvb,
21056 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21057 offset += 1;
21058 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_gtk, tvb, offset,
21059 tag_len - 3, ENC_NA0x00000000);
21060 proto_item_append_text(item, ": RSN GTK");
21061 save_proto_data(tvb, pinfo, offset, tag_len - 3, GTK_KEY);
21062 save_proto_data_value(pinfo, tag_len - 3, GTK_LEN_KEY);
21063 break;
21064 }
21065 case 3: /* MAC Address KDE */
21066 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mac_address_kde_mac, tvb,
21067 offset, 6, ENC_NA0x00000000);
21068 proto_item_append_text(item, ": MAC Address KDE");
21069 save_proto_data(tvb, pinfo, offset, 6, MLD_MAC_KEY);
21070 break;
21071 case 4:
21072 {
21073 /* IEEE 802.11i / Key Data Encapsulation / Data Type=4 - PMKID.
21074 * This is only used within EAPOL-Key frame Key Data. */
21075 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_pmkid, tvb, offset, 16, ENC_NA0x00000000);
21076 proto_item_append_text(item, ": RSN PMKID");
21077 break;
21078 }
21079 case 6:
21080 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_nonce, tvb, offset,
21081 32, ENC_NA0x00000000);
21082 proto_item_append_text(item, ": NONCE KDE");
21083 break;
21084 case 7: /* Lifetime KDE */
21085 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_gtk_kde_lifetime, tvb,
21086 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
21087 proto_item_append_text(item, ": Lifetime KDE");
21088 break;
21089 case 8: /* Error KDE */
21090 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_error_kde_res, tvb, offset,
21091 2, ENC_LITTLE_ENDIAN0x80000000);
21092 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_error_kde_error_type, tvb,
21093 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21094 proto_item_append_text(item, ": Error KDE");
21095 break;
21096 case 9: /* IGTK KDE */
21097 {
21098 /* IEEE 802.11i / Key Data Encapsulation / Data Type=9 - IGTK.
21099 * This is only used within EAPOL-Key frame Key Data. */
21100 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_keyid, tvb,
21101 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21102 offset += 2;
21103 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_ipn, tvb, offset,
21104 6, ENC_LITTLE_ENDIAN0x80000000);
21105 offset += 6;
21106 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_igtk_kde_igtk, tvb, offset,
21107 tag_len - 9, ENC_NA0x00000000);
21108 proto_item_append_text(item, ": RSN IGTK");
21109 break;
21110 }
21111 case 10:
21112 {
21113 /* IEEE 802.11 - 2016 / Key Data Encapsulation / Data Type=10 - KeyID
21114 * This is only used within EAPOL-Key frame Key Data when using Extended Key ID */
21115 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_ptk_keyid, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21116 proto_item_append_text(item, ": RSN PTK");
21117 break;
21118 }
21119 case 13: /* OCI KDE */
21120 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_operating_class, tvb,
21121 offset, 1, ENC_NA0x00000000);
21122 offset += 1;
21123 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_primary_channel_number,
21124 tvb, offset, 1, ENC_NA0x00000000);
21125 offset += 1;
21126 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_oci_frequency_segment_1,
21127 tvb, offset, 1, ENC_NA0x00000000);
21128 proto_item_append_text(item, ": OCI KDE");
21129 break;
21130 case 14: /* BIGTK KDE */
21131 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_key_id, tvb, offset,
21132 2, ENC_LITTLE_ENDIAN0x80000000);
21133 offset += 2;
21134 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_bipn, tvb, offset,
21135 6, ENC_LITTLE_ENDIAN0x80000000);
21136 offset += 6;
21137 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_bigtk_bigtk, tvb, offset,
21138 tag_len - 9, ENC_NA0x00000000);
21139 proto_item_append_text(item, ": BIGTK KDE");
21140 break;
21141 case 16: /* MLO GTK KDE */
21142 mlo_gtk_nb = GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MLO_GTK_COUNT))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, MLO_GTK_COUNT)))
;
21143 flags = tvb_get_uint8(tvb, offset);
21144 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id, tvb,
21145 offset, 1, ENC_NA0x00000000);
21146 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_tx, tvb,
21147 offset, 1, ENC_NA0x00000000);
21148 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved, tvb,
21149 offset, 1, ENC_NA0x00000000);
21150 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid, tvb,
21151 offset, 1, ENC_NA0x00000000);
21152 offset += 1;
21153
21154 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_pn, tvb,
21155 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
21156 offset += 6;
21157
21158 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk, tvb,
21159 offset, tag_len - 8, ENC_NA0x00000000);
21160 if (mlo_gtk_nb < DOT11DECRYPT_MAX_MLO_LINKS3) {
21161 uint8_t link_id = (flags & 0xf0) >> 4;
21162 save_proto_data_value(pinfo, link_id, MLO_GTK_LINK_ID_FIRST + mlo_gtk_nb);
21163 save_proto_data(tvb, pinfo, offset, tag_len - 8, MLO_GTK_KEY_FIRST + mlo_gtk_nb);
21164 save_proto_data_value(pinfo, tag_len - 8, MLO_GTK_KEY_LEN_FIRST + mlo_gtk_nb);
21165 save_proto_data_value(pinfo, mlo_gtk_nb + 1, MLO_GTK_COUNT);
21166 }
21167
21168 proto_item_append_text(item, ": MLO GTK KDE");
21169 break;
21170 case 17: /* MLO IGTK KDE */
21171 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id, tvb,
21172 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21173 offset += 2;
21174
21175 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn, tvb,
21176 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
21177 offset += 6;
21178
21179 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved, tvb,
21180 offset, 1, ENC_NA0x00000000);
21181 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid, tvb,
21182 offset, 1, ENC_NA0x00000000);
21183 offset += 1;
21184
21185 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk, tvb,
21186 offset, tag_len - 10, ENC_NA0x00000000);
21187
21188 proto_item_append_text(item, ": MLO IGTK KDE");
21189 break;
21190 case 18: /* MLO BIGTK KDE */
21191 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id, tvb,
21192 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21193 offset += 2;
21194
21195 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn, tvb,
21196 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
21197 offset += 6;
21198
21199 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved, tvb,
21200 offset, 1, ENC_NA0x00000000);
21201 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid, tvb,
21202 offset, 1, ENC_NA0x00000000);
21203 offset += 1;
21204
21205 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk, tvb,
21206 offset, tag_len - 10, ENC_NA0x00000000);
21207
21208 proto_item_append_text(item, ": MLO BIGTK KDE");
21209 break;
21210 case 19: /*
21211 * MLO Link KDE, contains Link info, MAC Addr and possibly
21212 * RSNE and RSNXE
21213 */
21214 dissect_rsn_ie_mlo_link(item, tree, tvb, offset, tag_len, pinfo);
21215 break;
21216 default:
21217 proto_tree_add_item(tree, hf_ieee80211_rsn_ie_unknown, tvb, offset,
21218 tag_len - 1, ENC_NA0x00000000);
21219 proto_item_append_text(item, ": RSN UNKNOWN");
21220 break;
21221 }
21222}
21223
21224typedef enum {
21225 MARVELL_IE_MESH = 4
21226} marvell_ie_type_t;
21227
21228static void
21229dissect_vendor_ie_marvell(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21230 tvbuff_t *tvb, int offset, uint32_t tag_len)
21231{
21232 uint8_t type;
21233
21234 proto_tree_add_item_ret_uint8(ietree, hf_ieee80211_marvell_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
21235 offset += 1;
21236
21237 switch (type) {
21238 case MARVELL_IE_MESH:
21239 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_subtype, tvb,
21240 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
21241 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_version, tvb,
21242 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
21243 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_proto_id, tvb,
21244 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
21245 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_active_metric_id, tvb,
21246 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
21247 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_mesh_cap, tvb,
21248 offset++, 1, ENC_LITTLE_ENDIAN0x80000000);
21249 break;
21250
21251 default:
21252 proto_tree_add_item(ietree, hf_ieee80211_marvell_ie_data, tvb, offset,
21253 tag_len - 1, ENC_NA0x00000000);
21254 break;
21255 }
21256}
21257
21258typedef enum {
21259 ATHEROS_IE_ADVCAP = 1,
21260 ATHEROS_IE_XR = 3
21261} atheros_ie_type_t;
21262
21263typedef enum {
21264 ATHEROS_IE_ADVCAP_S = 1
21265} atheros_ie_advcap_subtype_t;
21266
21267typedef enum {
21268 ATHEROS_IE_XR_S = 1
21269} atheros_ie_xr_subtype_t;
21270
21271typedef enum {
21272 ATHEROS_IE_CAP_TURBOP = 0x01,
21273 ATHEROS_IE_CAP_COMP = 0x02,
21274 ATHEROS_IE_CAP_FF = 0x04,
21275 ATHEROS_IE_CAP_XR = 0x08,
21276 ATHEROS_IE_CAP_AR = 0x10,
21277 ATHEROS_IE_CAP_BURST = 0x20,
21278 ATHEROS_IE_CAP_WME = 0x40,
21279 ATHEROS_IE_CAP_BOOST = 0x80
21280} atheros_ie_cap_t;
21281
21282static const value_string atheros_ie_type_vals[] = {
21283 { ATHEROS_IE_ADVCAP, "Advanced Capability"},
21284 { ATHEROS_IE_XR, "eXtended Range"},
21285 { 0, NULL((void*)0) }
21286};
21287
21288static int * const ieee80211_atheros_ie_cap[] = {
21289 &hf_ieee80211_atheros_ie_cap_f_turbop,
21290 &hf_ieee80211_atheros_ie_cap_f_comp,
21291 &hf_ieee80211_atheros_ie_cap_f_ff,
21292 &hf_ieee80211_atheros_ie_cap_f_xr,
21293 &hf_ieee80211_atheros_ie_cap_f_ar,
21294 &hf_ieee80211_atheros_ie_cap_f_burst,
21295 &hf_ieee80211_atheros_ie_cap_f_wme,
21296 &hf_ieee80211_atheros_ie_cap_f_boost,
21297 NULL((void*)0)
21298};
21299
21300static int * const ieee80211_extreme_mesh_ie_hello[] = {
21301 &hf_ieee80211_extreme_mesh_ie_hello_f_root,
21302 &hf_ieee80211_extreme_mesh_ie_hello_f_proxy,
21303 &hf_ieee80211_extreme_mesh_ie_hello_f_geo,
21304 &hf_ieee80211_extreme_mesh_ie_hello_f_path_pref,
21305 &hf_ieee80211_extreme_mesh_ie_hello_f_mobile,
21306 NULL((void*)0)
21307};
21308
21309typedef enum {
21310 EXTREME_MESH_IE_SERVICES_ROOT = 0x01,
21311 EXTREME_MESH_IE_SERVICES_PROXY = 0x02,
21312 EXTREME_MESH_IE_SERVICES_GEO = 0x04,
21313 EXTREME_MESH_IE_SERVICES_PATH_PREF = 0x08,
21314 EXTREME_MESH_IE_SERVICES_MOBILE = 0x10,
21315} extreme_mesh_ie_services;
21316
21317/* Mesh Fields found in Management Frames KJG */
21318static const value_string extreme_mesh_ie_type_vals[] = {
21319 {1, "Hello"},
21320 {2, "Mesh ID"},
21321 {3, "MPID"},
21322 {0, NULL((void*)0)}
21323};
21324
21325static void
21326dissect_vendor_ie_extreme_mesh(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21327 tvbuff_t *tvb, int offset, unsigned tag_len,
21328 packet_info *pinfo, proto_item *ti_len)
21329{
21330 uint8_t type;
21331
21332 if (tag_len <= 3) {
21333 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 6", tag_len+3);
21334 /* Add length of OUI to tag_length */
21335 return;
21336 }
21337 proto_tree_add_item_ret_uint8(ietree, hf_ieee80211_extreme_mesh_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
21338 proto_item_append_text(item, ": %s", val_to_str_const(type, extreme_mesh_ie_type_vals, "Unknown"));
21339 offset += 1;
21340 tag_len -= 1;
21341
21342 switch (type) {
21343 case 1:
21344 {
21345 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_extreme_mesh_ie_services,
21346 ett_extreme_mesh_services_tree, ieee80211_extreme_mesh_ie_hello, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21347 offset += 1;
21348
21349 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_htr, tvb, offset, 1, ENC_NA0x00000000);
21350 offset += 1;
21351
21352 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mtr, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21353 offset += 2;
21354
21355 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_root, tvb, offset, 6, ENC_NA0x00000000);
21356 offset += 6;
21357
21358 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_nh, tvb, offset, 6, ENC_NA0x00000000);
21359 }
21360 break;
21361 case 2:
21362 {
21363 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mesh_id, tvb, offset, tag_len, ENC_ASCII0x00000000);
21364 }
21365 break;
21366 case 3:
21367 {
21368 proto_tree_add_item(ietree, hf_ieee80211_extreme_mesh_ie_mp_id, tvb, offset, 6, ENC_NA0x00000000);
21369 }
21370 break;
21371 default:
21372 break;
21373 }
21374}
21375
21376static void
21377dissect_vendor_ie_atheros(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21378 tvbuff_t *tvb, int offset, unsigned tag_len,
21379 packet_info *pinfo, proto_item *ti_len)
21380{
21381 uint8_t type;
21382 uint8_t subtype;
21383 uint8_t version;
21384
21385 if (tag_len <= 3) {
21386 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 */
21387 return;
21388 }
21389 proto_tree_add_item_ret_uint8(ietree, hf_ieee80211_atheros_ie_type, tvb, offset, 1, ENC_NA0x00000000, &type);
21390 proto_item_append_text(item, ": %s", val_to_str_const(type, atheros_ie_type_vals, "Unknown"));
21391 offset += 1;
21392 tag_len -= 1;
21393
21394 proto_tree_add_item_ret_uint8(ietree, hf_ieee80211_atheros_ie_subtype, tvb, offset, 1, ENC_NA0x00000000, &subtype);
21395 offset += 1;
21396 tag_len -= 1;
21397
21398 proto_tree_add_item_ret_uint8(ietree, hf_ieee80211_atheros_ie_version, tvb, offset, 1, ENC_NA0x00000000, &version);
21399 offset += 1;
21400 tag_len -= 1;
21401
21402 if (version == 0)
21403 {
21404 switch (type) {
21405 case ATHEROS_IE_ADVCAP:
21406 {
21407 switch (subtype) {
21408 case ATHEROS_IE_ADVCAP_S:
21409 {
21410 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_advcap_cap,
21411 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21412 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21413 offset += 1;
21414 tag_len -= 1;
21415
21416 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_advcap_defkey, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21417 offset += 2;
21418 tag_len -= 2;
21419 break;
21420 }
21421 default:
21422 /* No default Action */
21423 break;
21424 } /* End switch (subtype) */
21425 break;
21426 }
21427 case ATHEROS_IE_XR:
21428 {
21429 switch (subtype) {
21430 case ATHEROS_IE_XR_S:
21431 {
21432 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_info, tvb, offset, 1, ENC_NA0x00000000);
21433 offset += 1;
21434 tag_len -= 1;
21435
21436 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_base_bssid, tvb, offset, 6, ENC_NA0x00000000);
21437 offset += 6;
21438 tag_len -= 6;
21439
21440 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_bssid, tvb, offset, 6, ENC_NA0x00000000);
21441 offset += 6;
21442 tag_len -= 6;
21443
21444 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_xr_xr_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21445 offset += 2;
21446 tag_len -= 2;
21447
21448 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_xr_base_cap,
21449 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21450 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21451 offset += 1;
21452 tag_len -= 1;
21453
21454 proto_tree_add_bitmask_with_flags(ietree, tvb, offset, hf_ieee80211_atheros_ie_xr_xr_cap,
21455 ett_ath_cap_tree, ieee80211_atheros_ie_cap,
21456 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
21457 offset += 1;
21458 tag_len -= 1;
21459 break;
21460 }
21461 default:
21462 /* No default Action */
21463 break;
21464 } /* End switch (subtype) */
21465 break;
21466 default:
21467 /* No default Action */
21468 break;
21469 } /* End switch (type) */
21470
21471 }
21472 }
21473 if (tag_len > 0) {
21474 proto_tree_add_item(ietree, hf_ieee80211_atheros_ie_data, tvb, offset, tag_len, ENC_NA0x00000000);
21475 }
21476}
21477
21478typedef enum {
21479 AIRONET_IE_DTPC = 0,
21480 AIRONET_IE_UNKNOWN1 = 1,
21481 AIRONET_IE_VERSION = 3,
21482 AIRONET_IE_QOS,
21483 AIRONET_IE_UNKNOWN11 = 11,
21484 AIRONET_IE_QBSS_V2 = 14,
21485 AIRONET_IE_CLIENT_MFP = 20,
21486 AIRONET_IE_APNAME_V2 = 47
21487} aironet_ie_type_t;
21488
21489static const value_string aironet_ie_type_vals[] = {
21490 { AIRONET_IE_DTPC, "DTPC"},
21491 { AIRONET_IE_UNKNOWN1, "Unknown (1)"},
21492 { AIRONET_IE_VERSION, "CCX version"},
21493 { AIRONET_IE_QOS, "Qos"},
21494 { AIRONET_IE_UNKNOWN11, "Unknown (11)"},
21495 { AIRONET_IE_QBSS_V2, "QBSS V2 - CCA"},
21496 { AIRONET_IE_CLIENT_MFP, "Client MFP"},
21497 { AIRONET_IE_APNAME_V2, "AP NAME v2"},
21498 { 0, NULL((void*)0) }
21499};
21500
21501static const value_string aironet_mfp_vals[] = {
21502 { 0, "Disabled"},
21503 { 1, "Enabled"},
21504 { 0, NULL((void*)0) }
21505};
21506
21507static void
21508dissect_vendor_ie_aironet(proto_item *aironet_item, proto_tree *ietree,
21509 tvbuff_t *tvb, int offset, uint32_t tag_len,packet_info *pinfo)
21510{
21511 uint8_t type, length;
21512 int i;
21513 bool_Bool dont_change = false0; /* Don't change the IE item text to default */
21514 const uint8_t* apname;
21515
21516 proto_tree_add_item_ret_uint8(ietree, hf_ieee80211_aironet_ie_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
21517 offset += 1;
21518
21519 switch (type) {
21520 case AIRONET_IE_DTPC:
21521 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_dtpc, tvb, offset, 1, ENC_NA0x00000000);
21522 proto_item_append_text(aironet_item, ": Aironet DTPC Powerlevel %ddBm", tvb_get_uint8(tvb, offset));
21523 offset += 1;
21524 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_dtpc_unknown, tvb, offset, 1, ENC_NA0x00000000);
21525 dont_change = true1;
21526 break;
21527 case AIRONET_IE_VERSION:
21528 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_version, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21529 proto_item_append_text(aironet_item, ": Aironet CCX version = %d", tvb_get_uint8(tvb, offset));
21530 dont_change = true1;
21531 break;
21532 case AIRONET_IE_QOS:
21533 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21534 offset += 1;
21535 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_qos_paramset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21536 offset += 1;
21537
21538 /* XXX: just copied over from WME. Maybe "Best Effort" and "Background"
21539 * need to be swapped. Also, the "TXOP" may be TXOP - or not.
21540 */
21541 for (i = 0; i < 4; i++) {
21542 uint8_t byte1, byte2;
21543 uint16_t txop;
21544 byte1 = tvb_get_uint8(tvb, offset);
21545 byte2 = tvb_get_uint8(tvb, offset + 1);
21546 txop = tvb_get_letohs(tvb, offset + 2);
21547 proto_tree_add_bytes_format(ietree, hf_ieee80211_aironet_ie_qos_val, tvb, offset, 4, NULL((void*)0),
21548 "CCX QoS Parameters: ACI %u (%s), Admission Control %sMandatory, AIFSN %u, ECWmin %u, ECWmax %u, TXOP %u",
21549 (byte1 & 0x60) >> 5, val_to_str(pinfo->pool, (byte1 & 0x60) >> 5, wme_acs, "(Unknown: %d)"),
21550 (byte1 & 0x10) ? "" : "not ", byte1 & 0x0f,
21551 byte2 & 0x0f, (byte2 & 0xf0) >> 4,
21552 txop);
21553 offset += 4;
21554 }
21555 break;
21556 case AIRONET_IE_QBSS_V2:
21557 /* Extract Values */
21558 proto_tree_add_item(ietree, hf_ieee80211_qbss2_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
21559 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
21560 proto_tree_add_item(ietree, hf_ieee80211_qbss2_cal, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
21561 proto_tree_add_item(ietree, hf_ieee80211_qbss2_gl, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
21562 break;
21563 case AIRONET_IE_CLIENT_MFP:
21564 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_clientmfp, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
21565 proto_item_append_text(aironet_item, ": Aironet Client MFP %s",
21566 val_to_str_const(1 & tvb_get_uint8(tvb, offset), aironet_mfp_vals, "Unknown"));
21567 dont_change = true1;
21568 break;
21569 case AIRONET_IE_APNAME_V2:
21570 /* Adds support for the new AP name v2 format;
21571this supports:
21572- 32 character long AP names (vs 16 in v1/ccx)
21573- is used on both WLC and Meraki
21574- does not require CCX to be enabled.
21575 */
21576 tag_len -= 1;
21577 length = tag_len;
21578
21579 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_cisco_ap_name_v2, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool,&apname);
21580 proto_item_append_text(ietree, ": AP name v2: %s", apname);
21581 // Set to true, so we don't append "Aironet type"
21582 dont_change = true1;
21583 break;
21584
21585 default:
21586 proto_tree_add_item(ietree, hf_ieee80211_aironet_ie_data, tvb, offset,
21587 tag_len - 1, ENC_NA0x00000000);
21588 break;
21589 }
21590 if (!dont_change) {
21591 proto_item_append_text(aironet_item, ": Aironet %s (%d)",
21592 val_to_str_const(type, aironet_ie_type_vals, "Unknown"), type);
21593 }
21594}
21595
21596/* info from lswifi https://github.com/joshschmelzle/lswifi/blob/v0.1.49/lswifi/elements.py#L1526 */
21597#define ARUBA_CAC1 1
21598#define ARUBA_MESH2 2
21599#define ARUBA_APNAME3 3
21600#define ARUBA_ARM4 4
21601#define ARUBA_SLB5 5
21602#define ARUBA_SJ_LOOP_PROTECT6 6
21603#define ARUBA_AUTO_MESH7 7
21604#define ARUBA_LCI8 8
21605#define ARUBA_GPS9 9
21606#define ARUBA_AP_HEALTH10 10
21607
21608static const value_string ieee80211_vs_aruba_subtype_vals[] = {
21609 { ARUBA_CAC1, "CAC"},
21610 { ARUBA_MESH2, "Mesh"},
21611 { ARUBA_APNAME3, "AP Name"},
21612 { ARUBA_ARM4, "ARM"},
21613 { ARUBA_SLB5, "SLB"},
21614 { ARUBA_SJ_LOOP_PROTECT6, "SJ Loop Protect"},
21615 { ARUBA_AUTO_MESH7, "Auto Mesh"},
21616 { ARUBA_LCI8, "LCI"},
21617 { ARUBA_GPS9, "GPS Ellipse"},
21618 { ARUBA_AP_HEALTH10, "AP Health"},
21619 { 0, NULL((void*)0) }
21620};
21621static void
21622dissect_vendor_ie_aruba(proto_item *item, proto_tree *ietree,
21623 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21624{
21625 uint8_t type;
21626 const uint8_t* name;
21627
21628 offset += 1; /* VS OUI Type */
21629 tag_len -= 1;
21630
21631 proto_tree_add_item_ret_uint8(ietree, hf_ieee80211_vs_aruba_subtype, tvb, offset, 1, ENC_NA0x00000000, &type);
21632 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aruba_subtype_vals, "Unknown"));
21633 offset += 1;
21634 tag_len -= 1;
21635
21636 switch (type) {
21637 case ARUBA_APNAME3:
21638 offset += 1;
21639 tag_len -= 1;
21640
21641 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_aruba_apname, tvb,
21642 offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
21643 proto_item_append_text(item, " (%s)", name);
21644 break;
21645
21646 case ARUBA_GPS9:
21647 {
21648 double latitude, longitude, major_axis, minor_axis, orientation, distance;
21649 offset += 1;
21650 tag_len -= 1;
21651 if (tag_len < 1) {
21652 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21653 "Malformed Aruba GPS data (insufficient data)");
21654 break;
21655 }
21656
21657 uint32_t gps_ie_length = tvb_get_uint8(tvb, offset);
21658 offset += 1;
21659 tag_len -= 1;
21660 gps_ie_length -= 1;
21661
21662 if (tag_len < gps_ie_length) {
21663 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21664 "Truncated Aruba GPS data (IE needs %u bytes but got %u)",
21665 gps_ie_length, tag_len);
21666 break;
21667 }
21668
21669 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_gps_subversion, tvb,
21670 offset, 1, ENC_NA0x00000000);
21671 offset += 1;
21672 tag_len -= 1;
21673
21674 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_gps_hop, tvb,
21675 offset, 1, ENC_NA0x00000000);
21676 offset += 1;
21677 tag_len -= 1;
21678
21679 latitude = tvb_get_ntohieee_double(tvb, offset);
21680 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_latitude, tvb,
21681 offset, 8, latitude, "%.6f", latitude);
21682 offset += 8;
21683 tag_len -= 8;
21684
21685 longitude = tvb_get_ntohieee_double(tvb, offset);
21686 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_longitude, tvb,
21687 offset, 8, longitude, "%.6f", longitude);
21688 offset += 8;
21689 tag_len -= 8;
21690
21691 major_axis = tvb_get_ntohieee_double(tvb, offset);
21692 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_major_axis, tvb,
21693 offset, 8, major_axis, "%.6f", major_axis);
21694 offset += 8;
21695 tag_len -= 8;
21696
21697 minor_axis = tvb_get_ntohieee_double(tvb, offset);
21698 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_minor_axis, tvb,
21699 offset, 8, minor_axis, "%.6f", minor_axis);
21700 offset += 8;
21701 tag_len -= 8;
21702
21703 orientation = tvb_get_ntohieee_double(tvb, offset);
21704 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_orientation, tvb,
21705 offset, 8, orientation, "%.6f", orientation);
21706 offset += 8;
21707 tag_len -= 8;
21708
21709 distance = tvb_get_ntohieee_double(tvb, offset);
21710 proto_tree_add_double_format_value(ietree, hf_ieee80211_vs_aruba_gps_distance, tvb,
21711 offset, 8, distance, "%.6f", distance);
21712 tag_len -= 8;
21713
21714 if (tag_len > 0) {
21715 expert_add_info_format(pinfo, ietree, &ei_ieee80211_bad_length,
21716 "Aruba GPS data contains additional %u bytes of unexpected data",
21717 tag_len);
21718 }
21719
21720 proto_item_append_text(item, " (coords: [%.6f, %.6f], ellipse: [%.2fm x %.2fm, %.2f°], distance: %.2fm)",
21721 latitude, longitude, major_axis, minor_axis, orientation, distance);
21722 }
21723 break;
21724
21725
21726 case ARUBA_AP_HEALTH10:
21727 {
21728 static int * const ieee80211_vs_aruba_ap_health[] = {
21729 &hf_ieee80211_vs_aruba_ap_health_version,
21730 &hf_ieee80211_vs_aruba_ap_health_ip_protocol,
21731 &hf_ieee80211_vs_aruba_ap_health_uplink,
21732 &hf_ieee80211_vs_aruba_ap_health_uplink_type,
21733 &hf_ieee80211_vs_aruba_ap_health_network_layer,
21734 &hf_ieee80211_vs_aruba_ap_health_proxy_server,
21735 &hf_ieee80211_vs_aruba_ap_health_activate,
21736 &hf_ieee80211_vs_aruba_ap_health_central,
21737 &hf_ieee80211_vs_aruba_ap_health_reserved,
21738 NULL((void*)0)
21739 };
21740 if (tag_len < 5)
21741 break;
21742
21743 /* Byte unknown Aruba */
21744 proto_tree_add_item(ietree,
21745 hf_ieee80211_vs_aruba_data,
21746 tvb, offset, 1, ENC_NA0x00000000);
21747
21748 offset += 1;
21749 tag_len -= 1;
21750
21751 /* 4 bytes = AP Health */
21752 proto_tree_add_bitmask(ietree, tvb, offset,
21753 hf_ieee80211_vs_aruba_ap_health,
21754 ett_ieee80211_vs_aruba_ap_health,
21755 ieee80211_vs_aruba_ap_health,
21756 ENC_BIG_ENDIAN0x00000000);
21757
21758 offset += 4;
21759 tag_len -= 4;
Value stored to 'tag_len' is never read
21760
21761 break;
21762 }
21763
21764 default:
21765 proto_tree_add_item(ietree, hf_ieee80211_vs_aruba_data, tvb, offset,
21766 tag_len, ENC_NA0x00000000);
21767 if (tag_len > 0)
21768 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
21769 break;
21770 }
21771}
21772
21773static void
21774dissect_vendor_ie_routerboard(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21775 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21776{
21777 uint8_t type, length;
21778 proto_item *subitem;
21779 proto_tree *subtree;
21780
21781 offset += 1; /* VS OUI Type */
21782 tag_len -= 1;
21783 /* FIXME: Make sure we have at least 2 bytes left */
21784 proto_tree_add_item(ietree, hf_ieee80211_vs_routerboard_unknown, tvb, offset, 2, ENC_NA0x00000000);
21785
21786 offset += 2;
21787 tag_len -= 2;
21788
21789 while (tag_len >= 2) {
21790 type = tvb_get_uint8(tvb, offset);
21791 length = tvb_get_uint8(tvb, offset+1);
21792 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_routerboard_subitem, tvb, offset, length+2, ENC_NA0x00000000);
21793 subtree = proto_item_add_subtree(subitem, ett_routerboard);
21794 proto_item_set_text(subitem, "Sub IE (T/L: %d/%d)", type, length);
21795
21796 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype, tvb, offset, 1, ENC_NA0x00000000);
21797 offset += 1;
21798 tag_len -= 1;
21799
21800 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_sublength, tvb, offset, 1, ENC_NA0x00000000);
21801 offset += 1;
21802 tag_len -= 1;
21803
21804 if (tag_len < length)
21805 length = tag_len;
21806 if (length == 0) {
21807 expert_add_info(pinfo, subitem, &ei_ieee80211_vs_routerboard_unexpected_len);
21808 break;
21809 }
21810
21811 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subdata, tvb, offset, length, ENC_NA0x00000000);
21812
21813 if(type == 1){
21814 if(length == 30){
21815 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype1_prefix, tvb, offset, 10, ENC_NA0x00000000);
21816 proto_tree_add_item(subtree, hf_ieee80211_vs_routerboard_subtype1_data, tvb, offset + 10, length - 10, ENC_ASCII0x00000000);
21817 }else{
21818 expert_add_info(pinfo, subitem, &ei_ieee80211_vs_routerboard_unexpected_len);
21819 }
21820 }
21821
21822 offset += length;
21823 tag_len -= length;
21824 }
21825}
21826
21827#define AEROHIVE_HOSTNAME33 33
21828static const value_string ieee80211_vs_aerohive_type_vals[] = {
21829 { AEROHIVE_HOSTNAME33, "Host Name"},
21830 { 0, NULL((void*)0) }
21831};
21832static void
21833dissect_vendor_ie_aerohive(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21834 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21835{
21836 uint32_t type, length;
21837 const uint8_t* hostname;
21838 proto_item *ti_len;
21839
21840 /* VS OUI Type */
21841 type = tvb_get_uint8(tvb, offset);
21842 offset += 1;
21843 tag_len -= 1;
21844
21845 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_version, tvb, offset, 1, ENC_NA0x00000000);
21846 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_aerohive_type_vals, "Unknown"));
21847 offset += 1;
21848 tag_len -= 1;
21849
21850 switch(type){
21851 case AEROHIVE_HOSTNAME33: /* Subtype (1 byte) + Host Name Length (1 byte) + Host Name */
21852
21853 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_subtype, tvb, offset, 1, ENC_NA0x00000000);
21854 offset += 1;
21855 tag_len -= 1;
21856
21857 ti_len = proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_aerohive_hostname_length, tvb, offset, 1, ENC_NA0x00000000, &length);
21858 offset += 1;
21859 tag_len -= 1;
21860
21861 if (tag_len < length) {
21862 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < Host Name Length");
21863 length = tag_len;
21864 }
21865
21866 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_aerohive_hostname, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &hostname);
21867 proto_item_append_text(item, " (%s)", hostname);
21868
21869 break;
21870
21871 default:
21872 proto_tree_add_item(ietree, hf_ieee80211_vs_aerohive_data, tvb, offset, tag_len, ENC_NA0x00000000);
21873 break;
21874 }
21875}
21876
21877#define MIST_APNAME1 1
21878static const value_string ieee80211_vs_mist_type_vals[] = {
21879 { MIST_APNAME1, "AP Name"},
21880 { 0, NULL((void*)0) }
21881};
21882static void
21883dissect_vendor_ie_mist(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21884 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21885{
21886 uint32_t type, length;
21887 const uint8_t* apname;
21888
21889 /* VS OUI Type */
21890 type = tvb_get_uint8(tvb, offset);
21891 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_mist_type_vals, "Unknown"));
21892 offset += 1;
21893 tag_len -= 1;
21894
21895 switch(type){
21896 case MIST_APNAME1:
21897 length = tag_len;
21898 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_mist_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21899 proto_item_append_text(item, " (%s)", apname);
21900 break;
21901
21902 default:
21903 proto_tree_add_item(ietree, hf_ieee80211_vs_mist_data, tvb, offset, tag_len, ENC_NA0x00000000);
21904 break;
21905 }
21906}
21907
21908#define UBIQUITI_APNAME0x01 0x01
21909static const value_string ieee80211_vs_ubiquiti_type_vals[] = {
21910 { UBIQUITI_APNAME0x01, "AP Name"},
21911 { 0, NULL((void*)0) }
21912};
21913static void
21914dissect_vendor_ie_ubiquiti(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21915 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21916{
21917 uint32_t type, length;
21918 const uint8_t* apname;
21919
21920 /* VS OUI Type */
21921 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_ubiquiti_type, tvb, offset, 1, ENC_NA0x00000000, &type);
21922 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_ubiquiti_type_vals, "Unknown"));
21923 offset += 1;
21924 tag_len -= 1;
21925
21926 switch(type){
21927 case UBIQUITI_APNAME0x01:
21928 length = tag_len;
21929 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_ubiquiti_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21930 proto_item_append_text(item, " (%s)", apname);
21931 break;
21932
21933 default:
21934 proto_tree_add_item(ietree, hf_ieee80211_vs_ubiquiti_data, tvb, offset, tag_len, ENC_NA0x00000000);
21935 break;
21936 }
21937}
21938
21939#define METER_APNAME0 0
21940static const value_string ieee80211_vs_meter_type_vals[] = {
21941 { METER_APNAME0, "AP Name"},
21942 { 0, NULL((void*)0) }
21943};
21944static void
21945dissect_vendor_ie_meter(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21946 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21947{
21948 uint32_t type, length;
21949 const uint8_t* apname;
21950
21951 /* VS OUI Type */
21952 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_meter_type, tvb, offset, 1, ENC_NA0x00000000, &type);
21953 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_meter_type_vals, "Unknown"));
21954 offset += 1;
21955 tag_len -= 1;
21956
21957 switch(type){
21958 case METER_APNAME0:
21959 length = tag_len;
21960 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_meter_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21961 proto_item_append_text(item, " (%s)", apname);
21962 break;
21963
21964 default:
21965 proto_tree_add_item(ietree, hf_ieee80211_vs_meter_data, tvb, offset, tag_len, ENC_NA0x00000000);
21966 break;
21967 }
21968}
21969
21970#define RUCKUS_APNAME3 3
21971static const value_string ieee80211_vs_ruckus_type_vals[] = {
21972 { RUCKUS_APNAME3, "AP Name"},
21973 { 0, NULL((void*)0) }
21974};
21975static void
21976dissect_vendor_ie_ruckus(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
21977 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
21978{
21979 uint32_t type, length;
21980 const uint8_t* apname;
21981
21982 /* VS OUI Type */
21983 type = tvb_get_uint8(tvb, offset);
21984 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_ruckus_type_vals, "Unknown"));
21985 offset += 1;
21986 tag_len -= 1;
21987
21988 switch(type){
21989 case RUCKUS_APNAME3:
21990 length = tag_len;
21991 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_ruckus_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
21992 proto_item_append_text(item, " (%s)", apname);
21993 break;
21994
21995 default:
21996 proto_tree_add_item(ietree, hf_ieee80211_vs_ruckus_data, tvb, offset, tag_len, ENC_NA0x00000000);
21997 break;
21998 }
21999}
22000
22001#define ALCATEL_APNAME1 1
22002static const value_string ieee80211_vs_alcatel_type_vals[] = {
22003 { ALCATEL_APNAME1, "AP Name"},
22004 { 0, NULL((void*)0) }
22005};
22006static void
22007dissect_vendor_ie_alcatel(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
22008 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22009{
22010 uint32_t type, length;
22011 const uint8_t* apname;
22012
22013 /* VS OUI Type */
22014 type = tvb_get_uint8(tvb, offset);
22015 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_alcatel_type_vals, "Unknown"));
22016 offset += 1;
22017 tag_len -= 1;
22018
22019 switch(type){
22020 case ALCATEL_APNAME1:
22021 length = tag_len;
22022 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_alcatel_ap_name, tvb, offset, length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &apname);
22023 proto_item_append_text(item, " (%s)", apname);
22024 break;
22025
22026 default:
22027 proto_tree_add_item(ietree, hf_ieee80211_vs_alcatel_data, tvb, offset, tag_len, ENC_NA0x00000000);
22028 break;
22029 }
22030}
22031
22032enum vs_sgdsn_type {
22033 SGDSN_VERSION = 0x01,
22034 SGDSN_IDFR = 0x02,
22035 SGDSN_IDANSI = 0x03,
22036 SGDSN_LATITUDE = 0x04,
22037 SGDSN_LONGITUDE = 0x05,
22038 SGDSN_ALTITUDE_ABS = 0x06,
22039 SGDSN_ALTITUDE_REL = 0x07,
22040 SGDSN_LATITUDE_TAKEOFF = 0x08,
22041 SGDSN_LONGITUDE_TAKEOFF = 0x09,
22042 SGDSN_H_SPEED = 0x0a,
22043 SGDSN_HEADING = 0x0b,
22044};
22045
22046static const value_string ieee80211_vs_sgdsn_type_vals[] = {
22047 { SGDSN_VERSION, "Version"},
22048 { SGDSN_IDFR, "ID FR"},
22049 { SGDSN_IDANSI, "ID ANSI"},
22050 { SGDSN_LATITUDE, "Latitude"},
22051 { SGDSN_LONGITUDE, "Longitude"},
22052 { SGDSN_ALTITUDE_ABS, "Altitude AMSL"},
22053 { SGDSN_ALTITUDE_REL, "Altitude AGL"},
22054 { SGDSN_LATITUDE_TAKEOFF, "Latitude Takeoff"},
22055 { SGDSN_LONGITUDE_TAKEOFF, "Longitude Takeoff"},
22056 { SGDSN_H_SPEED, "Horizontal Speed"},
22057 { SGDSN_HEADING, "Heading"},
22058 { 0, NULL((void*)0) }
22059};
22060
22061static void
22062dissect_vendor_ie_sgdsn(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
22063 tvbuff_t *tvb, int offset, uint32_t tag_len,
22064 packet_info *pinfo)
22065{
22066 // Technical specification defined in French law "NOR: ECOI1934044A"
22067 // https://www.legifrance.gouv.fr/eli/arrete/2019/12/27/ECOI1934044A/jo/texte
22068
22069 uint8_t type = tvb_get_uint8(tvb, offset);
22070 offset += 1;
22071 tag_len -= 1;
22072
22073 if (type == 1) {
22074
22075 while (tag_len > 2) {
22076
22077 uint8_t tlv_type = tvb_get_uint8(tvb, offset);
22078 uint8_t tlv_len = tvb_get_uint8(tvb, offset+1);
22079
22080 if (tag_len < tlv_len) {
22081 break;
22082 }
22083
22084 proto_item *item_tlv = proto_tree_add_item(ietree, hf_ieee80211_vs_sgdsn_tag, tvb, offset, tlv_len + 2, ENC_NA0x00000000);
22085 proto_item *tree = proto_item_add_subtree(item_tlv, ett_sgdsn);
22086
22087 proto_tree_add_item(tree, hf_ieee80211_vs_sgdsn_type, tvb, offset, 1, ENC_NA0x00000000);
22088 proto_tree_add_item(tree, hf_ieee80211_vs_sgdsn_length, tvb, offset + 1, 1, ENC_NA0x00000000);
22089
22090 offset += 2;
22091 tag_len -= 2;
22092
22093 proto_item_append_text(tree, ": %s", val_to_str_const(tlv_type, ieee80211_vs_sgdsn_type_vals, "Unknown"));
22094
22095 switch(tlv_type) {
22096 case SGDSN_VERSION:
22097 if (tlv_len == 1) {
22098 uint32_t value;
22099 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_version, tvb, offset, 1, ENC_NA0x00000000, &value);
22100 proto_item_append_text(tree, ": %d", value);
22101 } else {
22102 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 1");
22103 }
22104 break;
22105 case SGDSN_IDFR:
22106 if (tlv_len == 30) {
22107 const uint8_t* string1;
22108 const uint8_t* string2;
22109 const uint8_t* string3;
22110 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_manufacturer, tvb, offset, 3, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &string1);
22111 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_model, tvb, offset+3, 3, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &string2);
22112 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);
22113 proto_item_append_text(tree, ": %s %s %s", string1, string2, string3);
22114 } else {
22115 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 30");
22116 }
22117 break;
22118 case SGDSN_IDANSI:
22119 if (tlv_len >= 6 && tlv_len <= 20) {
22120 // ANSI/CTA-2063 Small UAS Serial Number.
22121 // Doc (free): https://shop.cta.tech/products/small-unmanned-aerial-systems-serial-numbers
22122 const uint8_t* icao_mfr_code;
22123 uint32_t sn_len;
22124 const uint8_t* serial_number;
22125 proto_tree_add_item_ret_string(tree, hf_ieee80211_vs_sgdsn_icaomfrcode, tvb, offset, 4, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &icao_mfr_code);
22126 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_serialnumber_len, tvb, offset+4, 1, ENC_NA0x00000000, &sn_len);
22127 if(sn_len < 0x30 || (sn_len > 0x39 && sn_len < 0x41) || sn_len > 0x46) {
22128 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'");
22129 } else if (sn_len != (uint32_t)tlv_len+(sn_len>0x39 ? 0x32 : 0x2A)) {
22130 // Check that sn_len equals tlv_len - 5 + ( 0x37 if sn_len is 'A' to 'F', 0x30 otherwise).
22131 // We suppressed the minus 5 in the check above to avoid a compilation warning
22132 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));
22133 }
22134 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);
22135 proto_item_append_text(tree, ": %s %s", icao_mfr_code, serial_number);
22136 } else {
22137 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be between 6 and 20");
22138 }
22139 break;
22140 case SGDSN_LATITUDE_TAKEOFF:
22141 case SGDSN_LATITUDE:
22142 case SGDSN_LONGITUDE_TAKEOFF:
22143 case SGDSN_LONGITUDE:
22144 if (tlv_len == 4) {
22145 int32_t value;
22146 proto_tree_add_item_ret_int(tree, hf_ieee80211_vs_sgdsn_gpscoord, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000, &value);
22147 proto_item_append_text(tree, ": %.5f", value / 100000.0);
22148 } else {
22149 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 4");
22150 }
22151 break;
22152 case SGDSN_ALTITUDE_ABS:
22153 case SGDSN_ALTITUDE_REL:
22154 if (tlv_len == 2) {
22155 int32_t value;
22156 proto_tree_add_item_ret_int(tree, hf_ieee80211_vs_sgdsn_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
22157 proto_item_append_text(tree, ": %d m", value);
22158 } else {
22159 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 4");
22160 }
22161 break;
22162 case SGDSN_H_SPEED:
22163 if (tlv_len == 1) {
22164 uint32_t value;
22165 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_speed, tvb, offset, 1, ENC_NA0x00000000, &value);
22166 proto_item_append_text(tree, ": %d m/s", value);
22167 } else {
22168 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 1");
22169 }
22170 break;
22171 case SGDSN_HEADING:
22172 if (tlv_len == 2) {
22173 uint32_t value;
22174 proto_tree_add_item_ret_uint(tree, hf_ieee80211_vs_sgdsn_heading, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
22175 proto_item_append_text(tree, ": %d deg", value);
22176 } else {
22177 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Value length must be 2");
22178 }
22179 break;
22180 default:
22181 /* TODO: use/define a more appropriate ei item for this? */
22182 expert_add_info_format(pinfo, tree, &ei_ieee80211_extra_data, "Unknown type");
22183 break;
22184 }
22185
22186 offset += tlv_len;
22187 tag_len -= tlv_len;
22188 }
22189
22190 if (tag_len) {
22191 expert_add_info_format(pinfo, item, &ei_ieee80211_tag_length, "Remaining bytes, TLV structure error");
22192 }
22193 }
22194}
22195
22196enum vs_nintendo_type {
22197 NINTENDO_SERVICES = 0x11,
22198 NINTENDO_CONSOLEID = 0xF0
22199};
22200
22201static const value_string ieee80211_vs_nintendo_type_vals[] = {
22202 { NINTENDO_SERVICES, "Services"},
22203 { NINTENDO_CONSOLEID, "ConsoleID"},
22204 { 0, NULL((void*)0) }
22205};
22206
22207static proto_tree*
22208dissect_vendor_ie_nintendo_tlv(const int hfindex, proto_tree *ietree,
22209 tvbuff_t *tvb, int offset, uint32_t sublen)
22210{
22211 proto_item *nintendo_item;
22212 proto_tree *nintendo_tree;
22213
22214 nintendo_item = proto_tree_add_item(ietree, hfindex, tvb, offset, sublen, ENC_NA0x00000000);
22215 nintendo_tree = proto_item_add_subtree(nintendo_item, ett_nintendo);
22216
22217 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_type, tvb, offset, 1, ENC_NA0x00000000);
22218 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_length, tvb, offset + 1, 1, ENC_NA0x00000000);
22219
22220 return nintendo_tree;
22221}
22222
22223static void
22224dissect_vendor_ie_nintendo(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
22225 tvbuff_t *tvb, int offset, uint32_t tag_len)
22226{
22227 proto_tree *nintendo_tree;
22228
22229 uint8_t subtype;
22230 uint8_t sublength;
22231 uint32_t length = tag_len;
22232
22233 /* Skip OUI type for now - the code is for type 1 (StreetPass) only */
22234 /* http://3dbrew.org/wiki/StreetPass */
22235 offset += 1;
22236 length -= 1;
22237
22238 while(length > 0 && length < 256) { /* otherwise we are < 0 but on unsigned */
22239 subtype = tvb_get_uint8(tvb, offset);
22240 sublength = tvb_get_uint8(tvb, offset + 1);
22241
22242 switch(subtype) {
22243 case NINTENDO_SERVICES:
22244 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_servicelist, ietree, tvb, offset, sublength + 2);
22245 offset += 2;
22246 length -= 2;
22247
22248 while (sublength > 4) {
22249
22250 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_service, tvb, offset, 5, ENC_NA0x00000000);
22251 offset += 5;
22252 length -= 5;
22253 sublength -= 5;
22254 }
22255 break;
22256 case NINTENDO_CONSOLEID:
22257 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_consoleid, ietree, tvb, offset, sublength + 2);
22258 offset += + 2;
22259 length -= + 2;
22260
22261 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_consoleid, tvb, offset, sublength, ENC_NA0x00000000);
22262 offset += sublength;
22263 length -= sublength;
22264 break;
22265 default:
22266 nintendo_tree = dissect_vendor_ie_nintendo_tlv(hf_ieee80211_vs_nintendo_unknown, ietree, tvb, offset, sublength + 2);
22267 offset += + 2;
22268 length -= + 2;
22269
22270 proto_tree_add_item(nintendo_tree, hf_ieee80211_vs_nintendo_unknown, tvb, offset, sublength, ENC_NA0x00000000);
22271 offset += sublength;
22272 length -= sublength;
22273 break;
22274 }
22275 }
22276}
22277
22278static void
22279dissect_vendor_ie_meru(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
22280 tvbuff_t *tvb, int offset, uint32_t tag_len,
22281 packet_info *pinfo)
22282{
22283 uint32_t type, length;
22284 proto_item *subitem, *ti_len;
22285 proto_tree *subtree;
22286
22287 while (tag_len >= 2) {
22288 subitem = proto_tree_add_item(ietree, hf_ieee80211_vs_meru_subitem, tvb, offset, 2, ENC_NA0x00000000);
22289 subtree = proto_item_add_subtree(subitem, ett_meru);
22290
22291 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_subtype, tvb, offset, 1, ENC_NA0x00000000, &type);
22292 offset += 1;
22293 tag_len -= 1;
22294
22295 ti_len = proto_tree_add_item_ret_uint(subtree, hf_ieee80211_vs_meru_sublength, tvb, offset, 1, ENC_NA0x00000000, &length);
22296 offset += 1;
22297 tag_len -= 1;
22298
22299 if (tag_len < length) {
22300 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < Sub Length");
22301 length = tag_len;
22302 }
22303
22304 proto_item_append_text(subitem, " (t=%d, l=%d)", type, length);
22305 proto_item_set_len(subitem, 2+length);
22306
22307 proto_tree_add_item(subtree, hf_ieee80211_vs_meru_subdata, tvb, offset, length, ENC_NA0x00000000);
22308 offset += length;
22309 tag_len -= length;
22310
22311 }
22312}
22313
22314static const value_string ieee80211_vs_extreme_subtype_vals[] = {
22315 { 1, "AP Name"},
22316 { 0, NULL((void*)0) }
22317};
22318
22319static void
22320dissect_vendor_ie_extreme(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
22321 tvbuff_t *tvb, int offset, uint32_t tag_len,
22322 packet_info *pinfo)
22323{
22324 uint32_t type, length;
22325 proto_item *ti_len;
22326
22327 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_subtype, tvb, offset, 1, ENC_NA0x00000000, &type);
22328 offset += 1;
22329 tag_len -= 1;
22330
22331 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_subdata, tvb, offset, tag_len, ENC_NA0x00000000);
22332
22333 switch(type){
22334 case 1: /* Unknown (7 bytes) + AP Name Length (1 byte) + AP Name */
22335
22336 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_unknown, tvb, offset, 7, ENC_NA0x00000000);
22337 offset += 7;
22338 tag_len -= 1;
22339
22340 ti_len = proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_extreme_ap_length, tvb, offset, 1, ENC_NA0x00000000, &length);
22341 offset += 1;
22342 tag_len -= 1;
22343
22344 if (tag_len < length) {
22345 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Tag length < AP Length");
22346 length = tag_len;
22347 }
22348
22349 proto_tree_add_item(ietree, hf_ieee80211_vs_extreme_ap_name, tvb, offset, length, ENC_ASCII0x00000000);
22350
22351 break;
22352 default:
22353 /* Expert info ? */
22354 break;
22355 }
22356}
22357
22358#define FORTINET_SYSTEM10 10
22359static const value_string ieee80211_vs_fortinet_subtype_vals[] = {
22360 { FORTINET_SYSTEM10, "SYSTEM"},
22361 { 0, NULL((void*)0) }
22362};
22363
22364#define FORTINET_SYSTEM_APNAME1 1
22365#define FORTINET_SYSTEM_APMODEL2 2
22366#define FORTINET_SYSTEM_APSERIAL3 3
22367static const value_string ieee80211_vs_fortinet_system_type_vals[] = {
22368 { FORTINET_SYSTEM_APNAME1, "AP NAME"},
22369 { FORTINET_SYSTEM_APMODEL2, "AP MODEL"},
22370 { FORTINET_SYSTEM_APSERIAL3, "AP SERIAL"},
22371 { 0, NULL((void*)0) }
22372};
22373
22374static void
22375dissect_vendor_ie_fortinet(proto_item *item, proto_tree *ietree,
22376 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22377{
22378 uint32_t type;
22379
22380
22381 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_subtype, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &type);
22382 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_fortinet_subtype_vals, "Unknown"));
22383 offset += 2;
22384 tag_len -= 2;
22385
22386 switch (type) {
22387 case FORTINET_SYSTEM10:
22388 while (tag_len > 2) {
22389 uint32_t system_type, system_length;
22390
22391 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_system_type, tvb, offset, 1, ENC_NA0x00000000, &system_type);
22392 proto_item_append_text(item, " - %s:", val_to_str_const(system_type, ieee80211_vs_fortinet_system_type_vals, "Unknown"));
22393 offset += 1;
22394 tag_len -= 1;
22395
22396 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_fortinet_system_length, tvb, offset, 1, ENC_NA0x00000000, &system_length);
22397 offset += 1;
22398 tag_len -= 1;
22399
22400 switch (system_type) {
22401 case FORTINET_SYSTEM_APNAME1:{
22402 const uint8_t* name;
22403 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apname, tvb,
22404 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
22405 proto_item_append_text(item, " %s", name);
22406 }
22407 break;
22408 case FORTINET_SYSTEM_APMODEL2:{
22409 const uint8_t* model;
22410 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apmodel, tvb,
22411 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &model);
22412 proto_item_append_text(item, " %s", model);
22413 }
22414 break;
22415 case FORTINET_SYSTEM_APSERIAL3:{
22416 const uint8_t* serial;
22417 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_fortinet_system_apserial, tvb,
22418 offset, system_length, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &serial);
22419 proto_item_append_text(item, " %s", serial);
22420 }
22421 break;
22422 }
22423 offset += system_length;
22424 tag_len -= system_length;
22425 }
22426 break;
22427
22428 default:
22429 proto_tree_add_item(ietree, hf_ieee80211_vs_fortinet_data, tvb, offset,
22430 tag_len, ENC_NA0x00000000);
22431 if (tag_len > 0)
22432 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22433 break;
22434 }
22435}
22436
22437#define ARISTA_APNAME6 6
22438static const value_string ieee80211_vs_arista_subtype_vals[] = {
22439 { ARISTA_APNAME6, "AP Name"},
22440 { 0, NULL((void*)0) }
22441};
22442static void
22443dissect_vendor_ie_arista(proto_item *item, proto_tree *ietree,
22444 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22445{
22446 uint8_t type;
22447 const uint8_t* name;
22448
22449 offset += 1; /* VS OUI Type */
22450 tag_len -= 1;
22451
22452 proto_tree_add_item_ret_uint8(ietree, hf_ieee80211_vs_arista_subtype, tvb, offset, 1, ENC_NA0x00000000, &type);
22453 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_arista_subtype_vals, "Unknown"));
22454 offset += 1;
22455 tag_len -= 1;
22456
22457 switch (type) {
22458 case ARISTA_APNAME6:
22459 offset += 1;
22460 tag_len -= 1;
22461
22462 proto_tree_add_item_ret_string(ietree, hf_ieee80211_vs_arista_apname, tvb,
22463 offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &name);
22464 proto_item_append_text(item, " (%s)", name);
22465 break;
22466
22467 default:
22468 proto_tree_add_item(ietree, hf_ieee80211_vs_arista_data, tvb, offset,
22469 tag_len, ENC_NA0x00000000);
22470 if (tag_len > 0)
22471 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22472 break;
22473 }
22474}
22475
22476#define WISUN_PTKID1 1
22477#define WISUN_GTKL2 2
22478#define WISUN_NR3 3
22479#define WISUN_LGTKL4 4
22480#define WISUN_LGTK5 5
22481
22482static const value_string ieee80211_vs_wisun_type_vals[] = {
22483 { WISUN_PTKID1, "PTKID" },
22484 { WISUN_GTKL2, "GTKL" },
22485 { WISUN_NR3, "NR" },
22486 { WISUN_LGTKL4, "LGTKL" },
22487 { WISUN_LGTK5, "LGTK" },
22488 { 0, NULL((void*)0) }
22489};
22490
22491#define WISUN_GTKL_GTK00x01 0x01
22492#define WISUN_GTKL_GTK10x02 0x02
22493#define WISUN_GTKL_GTK20x04 0x04
22494#define WISUN_GTKL_GTK30x08 0x08
22495
22496#define WISUN_NR_BR0 0
22497#define WISUN_NR_ROUTER1 1
22498#define WISUN_NR_LFN2 2
22499
22500static const value_string ieee80211_vs_wisun_nr_vals[] = {
22501 { WISUN_NR_BR0, "Border Router" },
22502 { WISUN_NR_ROUTER1, "Router" },
22503 { WISUN_NR_LFN2, "LFN" },
22504 { 0, NULL((void*)0) }
22505};
22506
22507#define WISUN_LGTKL_LGTK00x01 0x01
22508#define WISUN_LGTKL_LGTK10x02 0x02
22509#define WISUN_LGTKL_LGTK20x04 0x04
22510
22511static void
22512dissect_vendor_ie_wisun(proto_item *item, proto_tree *ietree,
22513 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22514{
22515 uint32_t type;
22516
22517 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_wisun_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
22518 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_wisun_type_vals, "Unknown"));
22519 offset += 1;
22520 tag_len -= 1;
22521
22522 switch(type) {
22523 case WISUN_PTKID1:
22524 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_ptkid, tvb, offset, 16, ENC_NA0x00000000);
22525 break;
22526 case WISUN_GTKL2: {
22527 static int * const wisun_gtkl[] = {
22528 &hf_ieee80211_vs_wisun_gtkl_gtk0,
22529 &hf_ieee80211_vs_wisun_gtkl_gtk1,
22530 &hf_ieee80211_vs_wisun_gtkl_gtk2,
22531 &hf_ieee80211_vs_wisun_gtkl_gtk3,
22532 NULL((void*)0),
22533 };
22534
22535 proto_tree_add_bitmask(ietree, tvb, offset, hf_ieee80211_vs_wisun_gtkl,
22536 ett_wisun_gtkl, wisun_gtkl, ENC_LITTLE_ENDIAN0x80000000);
22537 break;
22538 }
22539 case WISUN_NR3:
22540 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_nr, tvb,
22541 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
22542 break;
22543 case WISUN_LGTKL4: {
22544 static int * const wisun_lgtkl[] = {
22545 &hf_ieee80211_vs_wisun_lgtkl_lgtk0,
22546 &hf_ieee80211_vs_wisun_lgtkl_lgtk1,
22547 &hf_ieee80211_vs_wisun_lgtkl_lgtk2,
22548 NULL((void*)0),
22549 };
22550
22551 proto_tree_add_bitmask(ietree, tvb, offset, hf_ieee80211_vs_wisun_lgtkl,
22552 ett_wisun_lgtkl, wisun_lgtkl, ENC_LITTLE_ENDIAN0x80000000);
22553 break;
22554 }
22555 case WISUN_LGTK5:
22556 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_lgtk_key_id, tvb,
22557 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
22558 offset += 2;
22559 tag_len -= 2;
22560 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_lgtk_lgtk, tvb,
22561 offset, tag_len, ENC_NA0x00000000);
22562 break;
22563 default:
22564 proto_tree_add_item(ietree, hf_ieee80211_vs_wisun_data, tvb, offset, tag_len, ENC_NA0x00000000);
22565 if (tag_len > 0)
22566 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22567 break;
22568 }
22569}
22570
22571static const value_string ieee80211_vs_apple_subtype_vals[] = {
22572 { 0, NULL((void*)0) }
22573};
22574
22575static void
22576dissect_vendor_ie_apple(proto_item *item, proto_tree *ietree,
22577 tvbuff_t *tvb, int offset, uint32_t tag_len, packet_info *pinfo)
22578{
22579 uint32_t subtype, type, length;
22580
22581 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
22582 offset += 1;
22583 tag_len -= 1;
22584
22585 if(type == 6) { /* when type is 6, there is some subtype...*/
22586 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_subtype, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &subtype);
22587 proto_item_append_text(item, ": %s", val_to_str_const(type, ieee80211_vs_apple_subtype_vals, "Unknown"));
22588 offset += 2;
22589 tag_len -= 2;
22590
22591 proto_tree_add_item_ret_uint(ietree, hf_ieee80211_vs_apple_length, tvb, offset, 1, ENC_NA0x00000000, &length);
22592 offset += 1;
22593 tag_len -= 1;
22594
22595 switch (subtype) {
22596 default:
22597 proto_tree_add_item(ietree, hf_ieee80211_vs_apple_data, tvb, offset, tag_len, ENC_NA0x00000000);
22598 if (tag_len > 0)
22599 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22600 break;
22601 }
22602 } else{
22603 proto_tree_add_item(ietree, hf_ieee80211_vs_apple_data, tvb, offset, tag_len, ENC_NA0x00000000);
22604 if (tag_len > 0)
22605 proto_item_append_text(item, " (Data: %s)", tvb_bytes_to_str(pinfo->pool, tvb, offset, tag_len));
22606 }
22607
22608}
22609
22610/* 802.11-2012 8.4.2.37 QoS Capability element */
22611static int
22612dissect_qos_capability(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int offset, int ftype)
22613{
22614 switch (ftype) {
22615 case MGT_ASSOC_REQ0x00:
22616 case MGT_PROBE_REQ0x04:
22617 case MGT_REASSOC_REQ0x02:
22618 {
22619 /* To AP so decode Qos Info as STA */
22620 offset += add_ff_qos_info_sta(tree, tvb, pinfo, offset);
22621 break;
22622 }
22623
22624 case MGT_BEACON0x08:
22625 case MGT_PROBE_RESP0x05:
22626 case MGT_ASSOC_RESP0x01:
22627 case MGT_REASSOC_RESP0x03:
22628 {
22629 /* From AP so decode QoS Info as AP */
22630 offset += add_ff_qos_info_ap(tree, tvb, pinfo, offset);
22631 break;
22632 }
22633
22634 default:
22635 expert_add_info_format(pinfo, proto_tree_get_parent(tree), &ei_ieee80211_qos_info_bad_ftype,
22636 "Could not deduce direction to decode correctly, ftype %u", ftype);
22637 break;
22638 }
22639
22640 return offset;
22641}
22642
22643static ieee80211_packet_data_t* get_or_create_packet_data(packet_info *pinfo) {
22644 ieee80211_packet_data_t *packet_data =
22645 (ieee80211_packet_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY);
22646 if (!packet_data) {
22647 packet_data = wmem_new(pinfo->pool, ieee80211_packet_data_t)((ieee80211_packet_data_t*)wmem_alloc((pinfo->pool), sizeof
(ieee80211_packet_data_t)))
;
22648 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY, packet_data);
22649 memset(packet_data, 0, sizeof(ieee80211_packet_data_t));
22650 }
22651 return packet_data;
22652}
22653
22654/* See ieee80211_rsn_keymgmt_vals */
22655static bool_Bool is_ft_akm_suite(uint32_t akm_suite)
22656{
22657 switch (akm_suite) {
22658 case AKMS_FT_IEEE802_1X0x000FAC03:
22659 case AKMS_FT_PSK0x000FAC04:
22660 case AKMS_FT_SAE0x000FAC09:
22661 case AKMS_FT_IEEE802_1X_SHA3840x000FAC0D:
22662 case AKMS_FT_FILS_SHA2560x000FAC10:
22663 case AKMS_FT_FILS_SHA3840x000FAC11:
22664 case AKMS_FT_SAE_GROUP_DEPEND0x000FAC19:
22665 return true1;
22666 default:
22667 return false0;
22668 }
22669}
22670
22671static void
22672save_proto_data(tvbuff_t *tvb, packet_info *pinfo, int offset, size_t size, int key)
22673{
22674 uint8_t *data;
22675
22676 if (!enable_decryption) {
22677 return;
22678 }
22679 data = (uint8_t *)wmem_alloc(pinfo->pool, size);
22680 tvb_memcpy(tvb, data, offset, size);
22681 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, key, data);
22682}
22683
22684static void
22685save_proto_data_value(packet_info *pinfo, unsigned value, int key)
22686{
22687 if (!enable_decryption) {
22688 return;
22689 }
22690 p_add_proto_data(pinfo->pool, pinfo, proto_wlan, key, GUINT_TO_POINTER(value)((gpointer) (gulong) (value)));
22691}
22692
22693static void
22694save_tag_for_dot11decrypt(tvbuff_t *tvb, packet_info *pinfo, int offset)
22695{
22696 uint8_t tag_no;
22697 uint8_t tag_len;
22698
22699 if (!enable_decryption) {
22700 return;
22701 }
22702 tag_no = tvb_get_uint8(tvb, offset);
22703 tag_len = tvb_get_uint8(tvb, offset + 1);
22704
22705 switch (tag_no) {
22706 case TAG_MOBILITY_DOMAIN54:
22707 save_proto_data(tvb, pinfo, offset, tag_len + 2, MDE_TAG_KEY);
22708 break;
22709 case TAG_FAST_BSS_TRANSITION55:
22710 save_proto_data(tvb, pinfo, offset, tag_len + 2, FTE_TAG_KEY);
22711 break;
22712 case TAG_RIC_DATA57:
22713 save_proto_data(tvb, pinfo, offset, tag_len + 2, RDE_TAG_KEY);
22714 break;
22715 case TAG_RSN_IE48:
22716 save_proto_data(tvb, pinfo, offset, tag_len + 2, RSNE_TAG_KEY);
22717 break;
22718 case TAG_RSNX244:
22719 save_proto_data(tvb, pinfo, offset, tag_len + 2, RSNXE_TAG_KEY);
22720 break;
22721 default:
22722 break;
22723 }
22724}
22725
22726static void
22727set_packet_data_last_akm_suite(ieee80211_packet_data_t *packet_data,
22728 uint32_t last_akm_suite)
22729{
22730 packet_data->last_akm_suite_set = true1;
22731 packet_data->last_akm_suite = last_akm_suite;
22732}
22733
22734static void
22735set_conversation_last_akm_suite(ieee80211_conversation_data_t *conv,
22736 uint32_t last_akm_suite)
22737{
22738 conv->last_akm_suite_set = true1;
22739 conv->last_akm_suite = last_akm_suite;
22740}
22741
22742/*
22743 * 7.3.2.25 RSNE information element. Common format with OSEN except the
22744 * version... should refactor
22745 */
22746static int
22747dissect_rsn_ie(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
22748 int offset, uint32_t tag_len, association_sanity_check_t *association_sanity_check)
22749{
22750 proto_item *rsn_gcs_item, *rsn_pcs_item, *rsn_akms_item, *rsn_pmkid_item, *rsn_gmcs_item;
22751 proto_item *rsn_sub_pcs_item, *rsn_sub_akms_item;
22752 proto_item *rsn_pcs_count, *rsn_akms_count, *rsn_pmkid_count;
22753 proto_tree *rsn_gcs_tree, *rsn_pcs_tree, *rsn_akms_tree, *rsn_pmkid_tree, *rsn_gmcs_tree;
22754 proto_tree *rsn_sub_pcs_tree, *rsn_sub_akms_tree;
22755 uint16_t pcs_count, akms_count, pmkid_count;
22756 unsigned ii;
22757 int tag_end = offset + tag_len;
22758 static int * const ieee80211_rsn_cap[] = {
22759 &hf_ieee80211_rsn_cap_preauth,
22760 &hf_ieee80211_rsn_cap_no_pairwise,
22761 &hf_ieee80211_rsn_cap_ptksa_replay_counter,
22762 &hf_ieee80211_rsn_cap_gtksa_replay_counter,
22763 &hf_ieee80211_rsn_cap_mfpr,
22764 &hf_ieee80211_rsn_cap_mfpc,
22765 &hf_ieee80211_rsn_cap_jmr,
22766 &hf_ieee80211_rsn_cap_peerkey,
22767 &hf_ieee80211_rsn_cap_spp_amsdu_cap,
22768 &hf_ieee80211_rsn_cap_spp_amsdu_req,
22769 &hf_ieee80211_rsn_cap_pbac,
22770 &hf_ieee80211_rsn_cap_extended_key_id_iaf,
22771 &hf_ieee80211_rsn_cap_ocvc,
22772 NULL((void*)0)
22773 };
22774
22775 proto_tree_add_item(tree, hf_ieee80211_rsn_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
22776 offset += 2;
22777
22778 if (offset >= tag_end)
22779 return offset;
22780
22781 /* 7.3.2.25.1 Group Cipher suites */
22782 rsn_gcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22783 rsn_gcs_tree = proto_item_add_subtree(rsn_gcs_item, ett_rsn_gcs_tree);
22784 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22785
22786 /* Check if OUI is 00:0F:AC (ieee80211) */
22787 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22788 {
22789 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22790 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), GROUP_CIPHER_KEY);
22791 } else {
22792 proto_tree_add_item(rsn_gcs_tree, hf_ieee80211_rsn_gcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22793 }
22794 offset += 4;
22795
22796 if (offset >= tag_end)
22797 return offset;
22798
22799 /* 7.3.2.25.2 Pairwise Cipher suites */
22800 rsn_pcs_count = proto_tree_add_item_ret_uint16(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &pcs_count);
22801 offset += 2;
22802
22803 if (offset + (pcs_count * 4) > tag_end)
22804 {
22805 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
22806 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
22807 pcs_count = (tag_end - offset) / 4;
22808 }
22809
22810 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA0x00000000);
22811 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
22812 for (ii = 0; ii < pcs_count; ii++)
22813 {
22814 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22815 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
22816 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22817
22818 /* Check if OUI is 00:0F:AC (ieee80211) */
22819 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22820 {
22821 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22822 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
22823 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), CIPHER_KEY);
22824 } else {
22825 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22826 }
22827 offset += 4;
22828 }
22829
22830 if (offset >= tag_end)
22831 {
22832 return offset;
22833 }
22834
22835 /* 7.3.2.25.2 AKM suites */
22836 rsn_akms_count = proto_tree_add_item_ret_uint16(tree, hf_ieee80211_rsn_akms_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &akms_count);
22837 offset += 2;
22838
22839 if (offset + (akms_count * 4) > tag_end)
22840 {
22841 expert_add_info_format(pinfo, rsn_akms_count, &ei_ieee80211_rsn_pmkid_count,
22842 "Auth Key Management (AKM) Suite Count too large, 4*%u > %d", akms_count, tag_end - offset);
22843 akms_count = (tag_end - offset) / 4;
22844 }
22845
22846 rsn_akms_item = proto_tree_add_item(tree, hf_ieee80211_rsn_akms_list, tvb, offset, akms_count * 4, ENC_NA0x00000000);
22847 rsn_akms_tree = proto_item_add_subtree(rsn_akms_item, ett_rsn_akms_tree);
22848
22849 ieee80211_packet_data_t *packet_data = get_or_create_packet_data(pinfo);
22850
22851 for (ii = 0; ii < akms_count; ii++)
22852 {
22853 rsn_sub_akms_item = proto_tree_add_item(rsn_akms_tree, hf_ieee80211_rsn_akms, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22854 rsn_sub_akms_tree = proto_item_add_subtree(rsn_sub_akms_item, ett_rsn_sub_akms_tree);
22855 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22856
22857 /* Check if OUI is 00:0F:AC (ieee80211) */
22858 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22859 {
22860 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22861 proto_item_append_text(rsn_akms_item, " %s", rsn_akms_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
22862 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset + 3), AKM_KEY);
22863
22864 set_packet_data_last_akm_suite(packet_data, tvb_get_ntohl(tvb, offset));
22865 if (association_sanity_check) {
22866 uint32_t akm_suite = tvb_get_ntohl(tvb, offset);
22867 association_sanity_check->last_akm_suite = akm_suite;
22868
22869 if (is_ft_akm_suite(akm_suite)) {
22870 /* This is an FT AKM suite */
22871 association_sanity_check->has_ft_akm_suite = true1;
22872 if (association_sanity_check->rsn_first_ft_akm_suite == NULL((void*)0) && rsn_sub_akms_tree != NULL((void*)0)) {
22873 association_sanity_check->rsn_first_ft_akm_suite = rsn_sub_akms_tree->last_child;
22874 }
22875 } else {
22876 /* This is a non-FT AKM suite */
22877 association_sanity_check->has_non_ft_akm_suite = true1;
22878 if (association_sanity_check->rsn_first_non_ft_akm_suite == NULL((void*)0) && rsn_sub_akms_tree != NULL((void*)0)) {
22879 association_sanity_check->rsn_first_non_ft_akm_suite = rsn_sub_akms_tree->last_child;
22880 }
22881 }
22882 }
22883 } else {
22884 proto_tree_add_item(rsn_sub_akms_tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
22885 }
22886 offset += 4;
22887 }
22888
22889 /* 7.3.2.25.3 RSN capabilities */
22890 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_rsn_cap,
22891 ett_rsn_cap_tree, ieee80211_rsn_cap,
22892 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
22893 offset += 2;
22894 if (offset >= tag_end)
22895 {
22896 return offset;
22897 }
22898 /* 7.3.2.25.4 PMKID */
22899 rsn_pmkid_count = proto_tree_add_item_ret_uint16(tree, hf_ieee80211_rsn_pmkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &pmkid_count);
22900 offset += 2;
22901
22902 if (offset + (pmkid_count * 16) > tag_end)
22903 {
22904 expert_add_info_format(pinfo, rsn_pmkid_count, &ei_ieee80211_pmkid_count_too_large,
22905 "PMKID Count too large, 16*%u > %d", pmkid_count, tag_end - offset);
22906 pmkid_count = (tag_end - offset) / 16;
22907 }
22908
22909 rsn_pmkid_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid_list, tvb, offset, pmkid_count * 16, ENC_NA0x00000000);
22910 rsn_pmkid_tree = proto_item_add_subtree(rsn_pmkid_item, ett_rsn_pmkid_tree);
22911 for (ii = 0; ii < pmkid_count; ii++)
22912 {
22913 proto_tree_add_item(rsn_pmkid_tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA0x00000000);
22914 offset += 16;
22915 }
22916
22917 if (offset >= tag_end)
22918 {
22919 return offset;
22920 }
22921 /* Group Management Cipher Suite (802.11w)*/
22922 rsn_gmcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_gmcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
22923 rsn_gmcs_tree = proto_item_add_subtree(rsn_gmcs_item, ett_rsn_gmcs_tree);
22924 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
22925 /* Check if OUI is 00:0F:AC (ieee80211) */
22926 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
22927 {
22928 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_80211_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22929 } else {
22930 proto_tree_add_item(rsn_gmcs_tree, hf_ieee80211_rsn_gmcs_type, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
22931 }
22932 offset += 4;
22933
22934 return offset;
22935}
22936
22937/* 7.3.2.27 Extended Capabilities information element (127) */
22938static int
22939dissect_extended_capabilities_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
22940{
22941 int tag_len = tvb_reported_length(tvb);
22942 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
22943 int offset = 0;
22944 proto_item *ti_ex_cap;
22945 static int * const ieee80211_tag_extended_capabilities_byte1[] = {
22946 &hf_ieee80211_tag_extended_capabilities_b0,
22947 &hf_ieee80211_tag_extended_capabilities_b1,
22948 &hf_ieee80211_tag_extended_capabilities_b2,
22949 &hf_ieee80211_tag_extended_capabilities_b3,
22950 &hf_ieee80211_tag_extended_capabilities_b4,
22951 &hf_ieee80211_tag_extended_capabilities_b5,
22952 &hf_ieee80211_tag_extended_capabilities_b6,
22953 &hf_ieee80211_tag_extended_capabilities_b7,
22954 NULL((void*)0)
22955 };
22956 static int * const ieee80211_tag_extended_capabilities_byte2[] = {
22957 &hf_ieee80211_tag_extended_capabilities_b8,
22958 &hf_ieee80211_tag_extended_capabilities_b9,
22959 &hf_ieee80211_tag_extended_capabilities_b10,
22960 &hf_ieee80211_tag_extended_capabilities_b11,
22961 &hf_ieee80211_tag_extended_capabilities_b12,
22962 &hf_ieee80211_tag_extended_capabilities_b13,
22963 &hf_ieee80211_tag_extended_capabilities_b14,
22964 &hf_ieee80211_tag_extended_capabilities_b15,
22965 NULL((void*)0)
22966 };
22967 static int * const ieee80211_tag_extended_capabilities_byte3[] = {
22968 &hf_ieee80211_tag_extended_capabilities_b16,
22969 &hf_ieee80211_tag_extended_capabilities_b17,
22970 &hf_ieee80211_tag_extended_capabilities_b18,
22971 &hf_ieee80211_tag_extended_capabilities_b19,
22972 &hf_ieee80211_tag_extended_capabilities_b20,
22973 &hf_ieee80211_tag_extended_capabilities_b21,
22974 &hf_ieee80211_tag_extended_capabilities_b22,
22975 &hf_ieee80211_tag_extended_capabilities_b23,
22976 NULL((void*)0)
22977 };
22978 static int * const ieee80211_tag_extended_capabilities_byte4[] = {
22979 &hf_ieee80211_tag_extended_capabilities_b24,
22980 &hf_ieee80211_tag_extended_capabilities_b25,
22981 &hf_ieee80211_tag_extended_capabilities_b26,
22982 &hf_ieee80211_tag_extended_capabilities_b27,
22983 &hf_ieee80211_tag_extended_capabilities_b28,
22984 &hf_ieee80211_tag_extended_capabilities_b29,
22985 &hf_ieee80211_tag_extended_capabilities_b30,
22986 &hf_ieee80211_tag_extended_capabilities_b31,
22987 NULL((void*)0)
22988 };
22989 static int * const ieee80211_tag_extended_capabilities_byte5[] = {
22990 &hf_ieee80211_tag_extended_capabilities_b32,
22991 &hf_ieee80211_tag_extended_capabilities_b33,
22992 &hf_ieee80211_tag_extended_capabilities_b34,
22993 &hf_ieee80211_tag_extended_capabilities_b35,
22994 &hf_ieee80211_tag_extended_capabilities_b36,
22995 &hf_ieee80211_tag_extended_capabilities_b37,
22996 &hf_ieee80211_tag_extended_capabilities_b38,
22997 &hf_ieee80211_tag_extended_capabilities_b39,
22998 NULL((void*)0)
22999 };
23000 static int * const ieee80211_tag_extended_capabilities_byte6[] = {
23001 &hf_ieee80211_tag_extended_capabilities_b40,
23002 &hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
23003 &hf_ieee80211_tag_extended_capabilities_b44,
23004 &hf_ieee80211_tag_extended_capabilities_b45,
23005 &hf_ieee80211_tag_extended_capabilities_b46,
23006 &hf_ieee80211_tag_extended_capabilities_b47,
23007 NULL((void*)0)
23008 };
23009 static int * const ieee80211_tag_extended_capabilities_byte7[] = {
23010 &hf_ieee80211_tag_extended_capabilities_b48,
23011 &hf_ieee80211_tag_extended_capabilities_b49,
23012 &hf_ieee80211_tag_extended_capabilities_b50,
23013 &hf_ieee80211_tag_extended_capabilities_b51,
23014 &hf_ieee80211_tag_extended_capabilities_b52,
23015 &hf_ieee80211_tag_extended_capabilities_b53,
23016 &hf_ieee80211_tag_extended_capabilities_b54,
23017 &hf_ieee80211_tag_extended_capabilities_b55,
23018 NULL((void*)0)
23019 };
23020
23021 static int * const ieee80211_tag_extended_capabilities_byte8[] = {
23022 &hf_ieee80211_tag_extended_capabilities_b56,
23023 &hf_ieee80211_tag_extended_capabilities_b57,
23024 &hf_ieee80211_tag_extended_capabilities_b58,
23025 &hf_ieee80211_tag_extended_capabilities_b59,
23026 &hf_ieee80211_tag_extended_capabilities_b60,
23027 &hf_ieee80211_tag_extended_capabilities_b61,
23028 &hf_ieee80211_tag_extended_capabilities_b62,
23029 &hf_ieee80211_tag_extended_capabilities_b63,
23030 NULL((void*)0)
23031 };
23032
23033 static int * const ieee80211_tag_extended_capabilities_bytes89[] = {
23034 &hf_ieee80211_tag_extended_capabilities_b56_2,
23035 &hf_ieee80211_tag_extended_capabilities_b57_2,
23036 &hf_ieee80211_tag_extended_capabilities_b58_2,
23037 &hf_ieee80211_tag_extended_capabilities_b59_2,
23038 &hf_ieee80211_tag_extended_capabilities_b60_2,
23039 &hf_ieee80211_tag_extended_capabilities_b61_2,
23040 &hf_ieee80211_tag_extended_capabilities_b62_2,
23041 &hf_ieee80211_tag_extended_capabilities_max_num_msdus,
23042 &hf_ieee80211_tag_extended_capabilities_b65_2,
23043 &hf_ieee80211_tag_extended_capabilities_b66_2,
23044 &hf_ieee80211_tag_extended_capabilities_b67_2,
23045 &hf_ieee80211_tag_extended_capabilities_b68_2,
23046 &hf_ieee80211_tag_extended_capabilities_b69_2,
23047 &hf_ieee80211_tag_extended_capabilities_b70_2,
23048 &hf_ieee80211_tag_extended_capabilities_b71_2,
23049 NULL((void*)0)
23050 };
23051
23052 static int * const ieee80211_tag_extended_capabilities_byte10[] = {
23053 &hf_ieee80211_tag_extended_capabilities_b72,
23054 &hf_ieee80211_tag_extended_capabilities_b73,
23055 &hf_ieee80211_tag_extended_capabilities_b74,
23056 &hf_ieee80211_tag_extended_capabilities_b75,
23057 &hf_ieee80211_tag_extended_capabilities_b76,
23058 &hf_ieee80211_tag_extended_capabilities_b77,
23059 &hf_ieee80211_tag_extended_capabilities_b78,
23060 &hf_ieee80211_tag_extended_capabilities_b79,
23061 NULL((void*)0)
23062 };
23063
23064 static int * const ieee80211_tag_extended_capabilities_byte11[] = {
23065 &hf_ieee80211_tag_extended_capabilities_b80,
23066 &hf_ieee80211_tag_extended_capabilities_b81,
23067 &hf_ieee80211_tag_extended_capabilities_b82,
23068 &hf_ieee80211_tag_extended_capabilities_b83,
23069 &hf_ieee80211_tag_extended_capabilities_b84,
23070 &hf_ieee80211_tag_extended_capabilities_b85,
23071 &hf_ieee80211_tag_extended_capabilities_b86,
23072 &hf_ieee80211_tag_extended_capabilities_b87,
23073 NULL((void*)0)
23074 };
23075
23076 static int * const ieee80211_tag_extended_capabilities_byte12[] = {
23077 &hf_ieee80211_tag_extended_capabilities_b88,
23078 &hf_ieee80211_tag_extended_capabilities_b89,
23079 &hf_ieee80211_tag_extended_capabilities_b90,
23080 &hf_ieee80211_tag_extended_capabilities_b91,
23081 &hf_ieee80211_tag_extended_capabilities_b92,
23082 &hf_ieee80211_tag_extended_capabilities_b93,
23083 &hf_ieee80211_tag_extended_capabilities_b94,
23084 &hf_ieee80211_tag_extended_capabilities_b95,
23085 NULL((void*)0)
23086 };
23087
23088 static int * const ieee80211_tag_extended_capabilities_byte13[] = {
23089 &hf_ieee80211_tag_extended_capabilities_b96,
23090 &hf_ieee80211_tag_extended_capabilities_b97,
23091 &hf_ieee80211_tag_extended_capabilities_b98,
23092 &hf_ieee80211_tag_extended_capabilities_b99,
23093 &hf_ieee80211_tag_extended_capabilities_b100,
23094 &hf_ieee80211_tag_extended_capabilities_b101,
23095 &hf_ieee80211_tag_extended_capabilities_b102,
23096 &hf_ieee80211_tag_extended_capabilities_b103,
23097 NULL((void*)0)
23098 };
23099
23100 static int * const ieee80211_tag_extended_capabilities_byte14[] = {
23101 &hf_ieee80211_tag_extended_capabilities_b104,
23102 &hf_ieee80211_tag_extended_capabilities_b105,
23103 &hf_ieee80211_tag_extended_capabilities_reserved2,
23104 NULL((void*)0)
23105 };
23106
23107 if (tag_len < 1)
23108 {
23109 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);
23110 return 1;
23111 }
23112 proto_item_append_text(field_data->item_tag, " (%u octet%s)", tag_len, plurality(tag_len, "", "s")((tag_len) == 1 ? ("") : ("s")));
23113
23114 /* Extended Capability octet 1 */
23115 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23116 ett_tag_ex_cap1, ieee80211_tag_extended_capabilities_byte1,
23117 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23118 proto_item_append_text(ti_ex_cap, " (octet 1)");
23119 offset += 1;
23120
23121 /* Extended Capability octet 2 */
23122 if (offset >= tag_len) {
23123 return offset;
23124 }
23125 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23126 ett_tag_ex_cap2, ieee80211_tag_extended_capabilities_byte2,
23127 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23128 proto_item_append_text(ti_ex_cap, " (octet 2)");
23129 offset += 1;
23130
23131 /* Extended Capability octet 3 */
23132 if (offset >= tag_len) {
23133 return offset;
23134 }
23135 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23136 ett_tag_ex_cap3, ieee80211_tag_extended_capabilities_byte3,
23137 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23138 proto_item_append_text(ti_ex_cap, " (octet 3)");
23139 offset += 1;
23140
23141 /* Extended Capability octet 4 */
23142 if (offset >= tag_len) {
23143 return offset;
23144 }
23145 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23146 ett_tag_ex_cap4, ieee80211_tag_extended_capabilities_byte4,
23147 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23148 proto_item_append_text(ti_ex_cap, " (octet 4)");
23149 offset += 1;
23150
23151 /* Extended Capability octet 5 */
23152 if (offset >= tag_len) {
23153 return offset;
23154 }
23155 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23156 ett_tag_ex_cap5, ieee80211_tag_extended_capabilities_byte5,
23157 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23158 proto_item_append_text(ti_ex_cap, " (octet 5)");
23159 offset += 1;
23160
23161 /* Extended Capability octet 6 */
23162 if (offset >= tag_len) {
23163 return offset;
23164 }
23165
23166 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23167 ett_tag_ex_cap6, ieee80211_tag_extended_capabilities_byte6,
23168 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23169 proto_item_append_text(ti_ex_cap, " (octet 6)");
23170 offset += 1;
23171
23172
23173 /* Extended Capability octet 7 */
23174 if (offset >= tag_len) {
23175 return offset;
23176 }
23177 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23178 ett_tag_ex_cap7, ieee80211_tag_extended_capabilities_byte7,
23179 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23180 proto_item_append_text(ti_ex_cap, " (octet 7)");
23181 offset += 1;
23182
23183 /* Extended Capability octet 8 & 9 since two bits cross the boundary */
23184 if (offset >= tag_len) {
23185 return offset;
23186 }
23187
23188 /* If only the first of the two bytes is present, do the best we can */
23189 if (offset == tag_len - 1) {
23190 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23191 ett_tag_ex_cap8, ieee80211_tag_extended_capabilities_byte8,
23192 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23193 proto_item_append_text(ti_ex_cap, " (octet 8)");
23194 offset += 1;
23195 } else { /* Both bytes are there */
23196 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities_2,
23197 ett_tag_ex_cap89, ieee80211_tag_extended_capabilities_bytes89,
23198 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23199 proto_item_append_text(ti_ex_cap, " (octets 8 & 9)");
23200 offset += 2;
23201 }
23202
23203 if (offset >= tag_len) {
23204 return offset;
23205 }
23206
23207 /* Extended Capability octet 10 */
23208 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23209 ett_tag_ex_cap10, ieee80211_tag_extended_capabilities_byte10,
23210 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23211 proto_item_append_text(ti_ex_cap, " (octet 10)");
23212 offset += 1;
23213
23214 if (offset >= tag_len) {
23215 return offset;
23216 }
23217
23218 /* Extended Capability octet 11 */
23219#if 0
23220 /* Added for SAE support */
23221 sae_byte = tvb_get_uint8(tvb, offset);
23222 /*
23223 * If one of the SAE bits is set, assume we will see Password identifiers
23224 */
23225 if (sae_byte & 0x6) {
23226 bool_Bool sae_val = true1;
23227 uint64_t *key = NULL((void*)0);
23228
23229 /* Must be for the source of the request */
23230 key = (uint64_t *)wmem_new(wmem_file_scope(), uint64_t)((uint64_t*)wmem_alloc((wmem_file_scope()), sizeof(uint64_t))
)
;
23231 *key = *(uint64_t *)pinfo->src.data;
23232 wmem_map_insert(sae_prop_hash, key, GINT_TO_POINTER(sae_val)((gpointer) (glong) (sae_val)));
23233 }
23234#endif
23235 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_extended_capabilities,
23236 ett_tag_ex_cap11, ieee80211_tag_extended_capabilities_byte11,
23237 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23238 proto_item_append_text(ti_ex_cap, " (octet 11)");
23239 offset += 1;
23240
23241 if (offset >= tag_len) {
23242 return offset;
23243 }
23244
23245 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
23246 hf_ieee80211_tag_extended_capabilities,
23247 ett_tag_ex_cap12,
23248 ieee80211_tag_extended_capabilities_byte12,
23249 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23250 proto_item_append_text(ti_ex_cap, " (octet 12)");
23251 offset += 1;
23252
23253 if (offset >= tag_len) {
23254 return offset;
23255 }
23256
23257 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
23258 hf_ieee80211_tag_extended_capabilities,
23259 ett_tag_ex_cap13,
23260 ieee80211_tag_extended_capabilities_byte13,
23261 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23262 proto_item_append_text(ti_ex_cap, " (octet 13)");
23263 offset += 1;
23264
23265 if (offset >= tag_len) {
23266 return offset;
23267 }
23268
23269 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
23270 hf_ieee80211_tag_extended_capabilities,
23271 ett_tag_ex_cap14,
23272 ieee80211_tag_extended_capabilities_byte14,
23273 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23274 proto_item_append_text(ti_ex_cap, " (octet 14)");
23275 offset += 1;
23276
23277 return offset;
23278}
23279
23280static int
23281dissect_vht_mcs_set(proto_tree *tree, tvbuff_t *tvb, int offset)
23282{
23283 proto_item *ti;
23284 proto_tree *mcs_tree;
23285 static int * const ieee80211_vht_mcsset_rx_max_mcs[] = {
23286 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
23287 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
23288 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
23289 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
23290 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
23291 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
23292 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
23293 &hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
23294 NULL((void*)0)
23295 };
23296 static int * const ieee80211_vht_mcsset_tx_max_mcs[] = {
23297 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
23298 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
23299 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
23300 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
23301 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
23302 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
23303 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
23304 &hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
23305 NULL((void*)0)
23306 };
23307
23308 /* 8 byte Supported MCS set */
23309 ti = proto_tree_add_item(tree, hf_ieee80211_vht_mcsset, tvb, offset, 8, ENC_NA0x00000000);
23310
23311 mcs_tree = proto_item_add_subtree(ti, ett_vht_mcsset_tree);
23312
23313 /* B0 - B15 */
23314 proto_tree_add_bitmask_with_flags(mcs_tree, tvb, offset, hf_ieee80211_vht_mcsset_rx_mcs_map,
23315 ett_vht_rx_mcsbit_tree, ieee80211_vht_mcsset_rx_max_mcs,
23316 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23317 offset += 2;
23318
23319 /* B16 - B28 13 bits*/
23320 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_rx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23321
23322 /* B29 - B31 2 Max NSTS, total*/
23323
23324 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_max_nsts_total, tvb, offset,
23325 2, ENC_LITTLE_ENDIAN0x80000000);
23326 offset += 2;
23327
23328 /* B32 - B47 */
23329 proto_tree_add_bitmask_with_flags(mcs_tree, tvb, offset, hf_ieee80211_vht_mcsset_tx_mcs_map,
23330 ett_vht_tx_mcsbit_tree, ieee80211_vht_mcsset_tx_max_mcs,
23331 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23332 offset += 2;
23333 /* B48 - B60 13 bits */
23334 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_tx_highest_long_gi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23335 /* B61 */
23336 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_extended_nss_bw_capable,
23337 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23338
23339 /* B62 - B63 2 reserved bits*/
23340 proto_tree_add_item(mcs_tree, hf_ieee80211_vht_mcsset_reserved, tvb, offset, 2,
23341 ENC_LITTLE_ENDIAN0x80000000);offset += 2;
23342
23343 return offset;
23344}
23345
23346static int
23347dissect_vht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23348{
23349 int tag_len = tvb_reported_length(tvb);
23350 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23351 int offset = 0;
23352 static int * const ieee80211_vht_caps[] = {
23353 &hf_ieee80211_vht_max_mpdu_length,
23354 &hf_ieee80211_vht_supported_chan_width_set,
23355 &hf_ieee80211_vht_rx_ldpc,
23356 &hf_ieee80211_vht_short_gi_for_80,
23357 &hf_ieee80211_vht_short_gi_for_160,
23358 &hf_ieee80211_vht_tx_stbc,
23359 /* End of first byte */
23360 &hf_ieee80211_vht_rx_stbc,
23361 &hf_ieee80211_vht_su_beamformer_cap,
23362 &hf_ieee80211_vht_su_beamformee_cap,
23363 &hf_ieee80211_vht_beamformer_antennas,
23364 /* End of second byte */
23365 &hf_ieee80211_vht_sounding_dimensions,
23366 &hf_ieee80211_vht_mu_beamformer_cap,
23367 &hf_ieee80211_vht_mu_beamformee_cap,
23368 &hf_ieee80211_vht_txop_ps,
23369 &hf_ieee80211_vht_var_htc_field,
23370 &hf_ieee80211_vht_max_ampdu,
23371 &hf_ieee80211_vht_link_adaptation_cap,
23372 &hf_ieee80211_vht_rx_pattern,
23373 &hf_ieee80211_vht_tx_pattern,
23374 &hf_ieee80211_vht_ext_nss_bw_support,
23375 NULL((void*)0)
23376 };
23377
23378 if (tag_len != 12) {
23379 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23380 "VHT Capabilities IE length %u wrong, must be = 12", tag_len);
23381 return 1;
23382 }
23383
23384 /* 4 byte VHT Capabilities Info*/
23385 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_cap,
23386 ett_vht_cap_tree, ieee80211_vht_caps,
23387 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23388 offset += 4;
23389
23390 /* 8 byte MCS set */
23391 offset = dissect_vht_mcs_set(tree, tvb, offset);
23392
23393 return offset;
23394}
23395
23396static int
23397dissect_vht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23398{
23399 int tag_len = tvb_reported_length(tvb);
23400 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23401 int offset = 0;
23402 proto_item *op_item;
23403 proto_tree *op_tree;
23404 static int * const ieee80211_vht_op_max_basic_mcs[] = {
23405 &hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
23406 &hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
23407 &hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
23408 &hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
23409 &hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
23410 &hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
23411 &hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
23412 &hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
23413 NULL((void*)0)
23414 };
23415
23416 if (tag_len != 5) {
23417 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23418 "VHT Operation IE length %u wrong, must be = 5", tag_len);
23419 return 1;
23420 }
23421
23422 /* 3 byte VHT Operation Info*/
23423 op_item = proto_tree_add_item(tree, hf_ieee80211_vht_op, tvb, offset, 3, ENC_NA0x00000000);
23424 op_tree = proto_item_add_subtree(op_item, ett_vht_op_tree);
23425 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23426 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center0, tvb, offset+1, 1, ENC_LITTLE_ENDIAN0x80000000);
23427 proto_tree_add_item(op_tree, hf_ieee80211_vht_op_channel_center1, tvb, offset+2, 1, ENC_LITTLE_ENDIAN0x80000000);
23428
23429 offset += 3;
23430 /* VHT Basic MCS Set */
23431 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_vht_op_basic_mcs_map,
23432 ett_vht_basic_mcsbit_tree, ieee80211_vht_op_max_basic_mcs,
23433 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23434 offset += 2;
23435
23436 return offset;
23437}
23438
23439static int
23440dissect_vht_tx_pwr_envelope(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23441{
23442 int tag_len = tvb_reported_length(tvb);
23443 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23444 int offset = 0;
23445 proto_item *tx_pwr_item, *ti, *unit_ti;
23446 proto_tree *tx_pwr_info_tree;
23447 uint8_t opt_ie_cnt=0;
23448 uint8_t i;
23449 unsigned mtpi;
23450
23451 if (tag_len < 2 || tag_len > 18) {
23452 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23453 "VHT TX PWR Envelope IE length %u wrong, must be >= 2 and <= 18", tag_len);
23454 return 1;
23455 }
23456
23457 mtpi = (tvb_get_uint8(tvb, offset) >> 3) & 0x7;
23458 tx_pwr_item = proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_info, tvb, offset, 1, ENC_NA0x00000000);
23459 tx_pwr_info_tree = proto_item_add_subtree(tx_pwr_item, ett_vht_tpe_info_tree);
23460
23461 ti = proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23462 unit_ti = proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_unit, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23463 proto_tree_add_item(tx_pwr_info_tree, hf_ieee80211_vht_tpe_pwr_info_category, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23464
23465 opt_ie_cnt = tvb_get_uint8(tvb, offset) & 0x07;
23466
23467 offset += 1;
23468
23469 switch (mtpi) {
23470
23471 case 1:
23472 case 3:
23473 case 5:
23474 /* Is it a power spectral density? */
23475 /* Handle the zero case */
23476 if (opt_ie_cnt == 0) {
23477 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_any_bw_psd, tvb, offset,
23478 1, ENC_NA0x00000000);
23479 offset += 1;
23480 return offset;
23481 }
23482 switch (opt_ie_cnt) {
23483 case 0:
23484 opt_ie_cnt = 0;
23485 break;
23486 case 1:
23487 opt_ie_cnt = 1;
23488 break;
23489 case 2:
23490 opt_ie_cnt = 2;
23491 break;
23492 case 3:
23493 opt_ie_cnt = 4;
23494 break;
23495 case 4:
23496 opt_ie_cnt = 8;
23497 break;
23498 default:
23499 opt_ie_cnt = 1; /* Add an expert info here ... */
23500 break;
23501 }
23502 for (i = 0; i < opt_ie_cnt; i++) {
23503 proto_tree *psd_tree;
23504 psd_tree = proto_tree_add_subtree_format(tree, tvb, offset, 1,
23505 ett_tpe_psd, NULL((void*)0),
23506 "20 MHz Channel #%u", i);
23507 proto_tree_add_item(psd_tree, hf_ieee80211_vht_tpe_psd,
23508 tvb, offset, 1, ENC_NA0x00000000);
23509 offset += 1;
23510 }
23511 /* Extension Max Tx Power */
23512 if (offset < tag_len) {
23513 proto_tree *psd_tree;
23514 uint8_t j;
23515 uint8_t ext_cnt = tvb_get_uint8(tvb, offset) & 0x0f;
23516
23517 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_ext_count, tvb, offset, 1, ENC_NA0x00000000);
23518 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_ext_reserved, tvb, offset, 1, ENC_NA0x00000000);
23519 offset += 1;
23520 for (j = 0; j < ext_cnt; j++) {
23521 psd_tree = proto_tree_add_subtree_format(tree, tvb, offset, 1,
23522 ett_tpe_psd, NULL((void*)0),
23523 "20 MHz Channel #%u", i+j);
23524 proto_tree_add_item(psd_tree, hf_ieee80211_vht_tpe_psd,
23525 tvb, offset, 1, ENC_NA0x00000000);
23526 offset += 1;
23527 }
23528 }
23529 break;
23530
23531 case 0:
23532 case 2:
23533 case 4:
23534 /* Power Constraint info is mandatory only for 20MHz, others are optional*/
23535 /* Power is expressed in terms of 0.5dBm from -64 to 63 and is encoded
23536 * as 8-bit 2's complement */
23537 for (i = 0; i <= opt_ie_cnt; i++) {
23538 switch(i) {
23539 case 0:
23540 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_20, tvb, offset, 1, ENC_NA0x00000000);
23541 offset += 1;
23542 break;
23543 case 1:
23544 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_40, tvb, offset, 1, ENC_NA0x00000000);
23545 offset += 1;
23546 break;
23547 case 2:
23548 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_80, tvb, offset, 1, ENC_NA0x00000000);
23549 offset += 1;
23550 break;
23551 case 3:
23552 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_160, tvb, offset, 1, ENC_NA0x00000000);
23553 offset += 1;
23554 break;
23555 default:
23556 expert_add_info(pinfo, ti, &ei_ieee80211_vht_tpe_pwr_info_count);
23557 offset += 1;
23558 break;
23559 }
23560 }
23561 /* Extension Max Tx Power */
23562 if (offset < tag_len) {
23563 proto_tree_add_item(tree, hf_ieee80211_vht_tpe_pwr_constr_320, tvb, offset, 1, ENC_NA0x00000000);
23564 offset += 1;
23565 }
23566 break;
23567 default:
23568 /* Reserved in 802.11ax-2021. 802.11be? */
23569 expert_add_info(pinfo, unit_ti, &ei_ieee80211_vht_tpe_pwr_info_unit);
23570 }
23571
23572 return offset;
23573}
23574
23575static int
23576dissect_mobility_domain(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23577{
23578 int tag_len = tvb_reported_length(tvb);
23579 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23580 int offset = 0;
23581
23582 if (field_data->sanity_check != NULL((void*)0)) {
23583 field_data->sanity_check->association_has_mobility_domain_element = true1;
23584 }
23585
23586 if (tag_len < 3) {
23587 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23588 "MDIE content length must be at least 3 bytes");
23589 return 1;
23590 }
23591
23592 save_proto_data(tvb, pinfo, offset, 2, MDID_KEY);
23593 proto_tree_add_item(tree, hf_ieee80211_tag_mobility_domain_mdid,
23594 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23595 proto_tree_add_bitmask_with_flags(tree, tvb, offset + 2,
23596 hf_ieee80211_tag_mobility_domain_ft_capab,
23597 ett_tag_mobility_domain_ft_capab_tree,
23598 ieee80211_tag_mobility_domain_ft_capab_fields,
23599 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
23600 return tvb_captured_length(tvb);
23601}
23602
23603static uint16_t get_mic_len_owe(uint16_t group) {
23604 switch(group) {
23605 // FFC, len(p) <= 2048
23606 case 1:
23607 case 2:
23608 case 5:
23609 case 14:
23610 case 22:
23611 case 23:
23612 case 24:
23613 // ECC, len(p) <= 256
23614 case 19:
23615 case 25:
23616 case 26:
23617 case 27:
23618 case 28:
23619 case 31:
23620 // HMAC-SHA-256
23621 return 16;
23622
23623 // FFC, 2048 < len(p) <= 3072
23624 case 15:
23625 // ECC, 256 < len(p) <= 384
23626 case 20:
23627 case 29:
23628 // HMAC-SHA-384
23629 return 24;
23630
23631 // FCC, 3072 < len(p)
23632 case 16:
23633 case 17:
23634 case 18:
23635 // ECC, 384 < len(p)
23636 case 21:
23637 case 30:
23638 case 32:
23639 // HMAC-SHA-512
23640 return 32;
23641
23642 default:
23643 return 16;
23644 }
23645}
23646
23647static uint16_t get_mic_len(uint32_t akm_suite) {
23648 switch(akm_suite) {
23649 case AKMS_WPA_SHA384_SUITEB0x000FAC0C:
23650 case AKMS_FT_IEEE802_1X_SHA3840x000FAC0D:
23651 case AKMS_FT_FILS_SHA3840x000FAC11:
23652 // HMAC-SHA-384
23653 return 24;
23654
23655 case AKMS_FILS_SHA2560x000FAC0E:
23656 case AKMS_FILS_SHA3840x000FAC0F:
23657 // AES-SIV-256 and AES-SIV-512
23658 return 0;
23659
23660 default:
23661 // HMAC-SHA-1-128, AES-128-CMAC, HMAC-SHA-256, AKMS_FT_FILS_SHA256
23662 return 16;
23663 }
23664}
23665
23666static conversation_t *find_wlan_conversation_pinfo(packet_info *pinfo)
23667{
23668 /* HACK to avoid collision with conversation in EAP dissector */
23669 pinfo->srcport = GPOINTER_TO_UINT(((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
23670 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)))
;
23671 pinfo->destport = pinfo->srcport;
23672 return find_conversation_pinfo(pinfo, 0);
23673}
23674
23675static bool_Bool determine_nonce_is_set(tvbuff_t *tvb) {
23676 int offset;
23677
23678 for (offset = 12; offset < 12 + 32; offset++)
23679 if (tvb_get_uint8(tvb, offset))
23680 return true1;
23681 return false0;
23682}
23683
23684static uint16_t determine_mic_len(packet_info *pinfo, bool_Bool assoc_frame,
23685 bool_Bool *defaulted, bool_Bool *group_depend) {
23686 uint16_t eapol_key_mic_len = 16; /* Default MIC length */
23687 conversation_t *conversation = find_wlan_conversation_pinfo(pinfo);
23688 ieee80211_conversation_data_t *conversation_data = NULL((void*)0);
23689 ieee80211_packet_data_t *packet_data =
23690 (ieee80211_packet_data_t*)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, PACKET_DATA_KEY);
23691 if (conversation) {
23692 conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
23693 }
23694
23695 if (wlan_key_mic_len_enable) {
23696 /* 1st - Use user overridden MIC length setting */
23697 eapol_key_mic_len = wlan_key_mic_len;
23698 }
23699 else if (!assoc_frame && conversation_data &&
23700 conversation_data->discovered_key_mic_len) {
23701 /*
23702 * 2nd - Use the discovered key mic len.
23703 * We will only set the discovered key mic len if it was defaulted
23704 * in an earlier call to determine_mic_len, so it should be tested second.
23705 */
23706 eapol_key_mic_len = conversation_data->discovered_key_mic_len;
23707 }
23708 else if (!assoc_frame && conversation_data &&
23709 conversation_data->last_akm_suite_set) {
23710 /* 3rd - Use AKMS negotiated during association to determine MIC length */
23711 if (conversation_data->last_akm_suite == AKMS_OWE0x000FAC12) {
23712 /* For OWE the length of MIC depends on the selected group */
23713 *group_depend = true1;
23714 eapol_key_mic_len = get_mic_len_owe(conversation_data->owe_group);
23715 } else if (conversation_data->last_akm_suite == AKMS_SAE_GROUP_DEPEND0x000FAC18 ||
23716 conversation_data->last_akm_suite == AKMS_FT_SAE_GROUP_DEPEND0x000FAC19) {
23717 *group_depend = true1;
23718 *defaulted = true1;
23719 }
23720 else {
23721 eapol_key_mic_len = get_mic_len(conversation_data->last_akm_suite);
23722 }
23723 }
23724 else if (packet_data && packet_data->last_akm_suite_set) {
23725 /* 3rd - Use AKMS from current packet to determine MIC length */
23726 if (packet_data->last_akm_suite == AKMS_OWE0x000FAC12) {
23727 /* For OWE the length of MIC depends on the selected group */
23728 *group_depend = true1;
23729 eapol_key_mic_len = get_mic_len_owe(packet_data->owe_group);
23730 } else if (packet_data->last_akm_suite == AKMS_SAE_GROUP_DEPEND0x000FAC18 ||
23731 packet_data->last_akm_suite == AKMS_FT_SAE_GROUP_DEPEND0x000FAC19) {
23732 *group_depend = true1;
23733 *defaulted = true1;
23734 }
23735 else {
23736 eapol_key_mic_len = get_mic_len(packet_data->last_akm_suite);
23737 }
23738 } else {
23739 /*
23740 * We used the default so say so.
23741 */
23742 *defaulted = true1;
23743 }
23744 return eapol_key_mic_len;
23745}
23746
23747static int
23748dissect_fast_bss_transition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
23749{
23750 int tag_len = tvb_reported_length(tvb);
23751 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
23752 bool_Bool assoc_frame = field_data->sanity_check != NULL((void*)0);
23753 int offset = 0;
23754 uint64_t mic_control;
23755 if (tag_len < 82) {
23756 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
23757 "FTIE content length must be at least 82 bytes");
23758 return 1;
23759 }
23760
23761 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_ieee80211_tag_ft_mic_control,
23762 ett_tag_ft_mic_control_tree,
23763 ieee80211_tag_ft_mic_control_fields,
23764 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01, &mic_control);
23765 offset += 2;
23766
23767 bool_Bool defaulted_mic_len = false0, group_depended_mic_len = false0;
23768 int mic_len = determine_mic_len(pinfo, assoc_frame, &defaulted_mic_len, &group_depended_mic_len);
23769 if (group_depended_mic_len) {
23770 /* IEEE 802.11-2024 9.4.2.46 FTE, Table 9-220 MIC Length subfield values */
23771 uint8_t mic_len_field = (mic_control & 0x0e) >> 1; /* B1 to B3 */
23772 if (mic_len_field == 0)
23773 mic_len = 16;
23774 else if (mic_len_field == 1)
23775 mic_len = 24;
23776 else if (mic_len_field == 2)
23777 mic_len = 32;
23778 }
23779 save_proto_data(tvb, pinfo, offset, mic_len, FTE_MIC_KEY);
23780 save_proto_data_value(pinfo, mic_len, FTE_MIC_LEN_KEY);
23781 proto_tree_add_item(tree, hf_ieee80211_tag_ft_mic,
23782 tvb, offset, mic_len, ENC_NA0x00000000);
23783 offset += mic_len;
23784
23785 save_proto_data(tvb, pinfo, offset, 32, FTE_ANONCE_KEY);
23786 proto_tree_add_item(tree, hf_ieee80211_tag_ft_anonce,
23787 tvb, offset, 32, ENC_NA0x00000000);
23788 offset += 32;
23789
23790 save_proto_data(tvb, pinfo, offset, 32, FTE_SNONCE_KEY);
23791 proto_tree_add_item(tree, hf_ieee80211_tag_ft_snonce,
23792 tvb, offset, 32, ENC_NA0x00000000);
23793 offset += 32;
23794
23795 while (offset + 2 <= tag_len) {
23796 uint8_t id, len;
23797 int s_end;
23798 proto_item *ti;
23799 proto_tree *subtree;
23800 const char *subtree_name;
23801 proto_keydata_t *proto;
23802
23803 id = tvb_get_uint8(tvb, offset);
23804 len = tvb_get_uint8(tvb, offset + 1);
23805 subtree_name = val_to_str_const(id, ft_subelem_id_vals, "Unknown");
23806 subtree = proto_tree_add_subtree_format(tree, tvb, offset, len + 2,
23807 ett_tag_ft_subelem_tree, NULL((void*)0),
23808 "Subelement: %s", subtree_name);
23809
23810 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_id,
23811 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23812 offset += 1;
23813
23814 ti = proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_len,
23815 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23816 offset += 1;
23817
23818 if (offset + len > tag_len) {
23819 expert_add_info_format(pinfo, ti, &ei_ieee80211_tag_length,
23820 "FTIE subelement length is too large for the FTIE content length");
23821 return offset;
23822 }
23823
23824 s_end = offset + len;
23825 switch (id) {
23826 case 1:
23827 save_proto_data(tvb, pinfo, offset, len, FTE_R1KH_ID_KEY);
23828 save_proto_data_value(pinfo, len, FTE_R1KH_ID_LEN_KEY);
23829 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_r1kh_id,
23830 tvb, offset, len, ENC_NA0x00000000);
23831 break;
23832 case 2:
23833 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_info,
23834 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23835 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_id,
23836 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23837 offset += 2;
23838 if (offset > s_end)
23839 break;
23840 save_proto_data_value(pinfo, tvb_get_uint8(tvb, offset), GTK_SUBELEM_KEY_LEN_KEY);
23841 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_length,
23842 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23843 offset += 1;
23844 if (offset > s_end)
23845 break;
23846 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_rsc,
23847 tvb, offset, 8, ENC_NA0x00000000);
23848 offset += 8;
23849 if (offset > s_end)
23850 break;
23851 save_proto_data_value(pinfo, s_end - offset, GTK_LEN_KEY);
23852 save_proto_data(tvb, pinfo, offset, s_end - offset, GTK_KEY);
23853
23854 proto = (proto_keydata_t *)
23855 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_GTK_KEY);
23856 if (proto) {
23857 unsigned keydata_len = proto->keydata_len;
23858 tvbuff_t *next_tvb = tvb_new_child_real_data(tvb, proto->keydata,
23859 keydata_len, keydata_len);
23860 add_new_data_source(pinfo, next_tvb, "Decrypted GTK");
23861 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key,
23862 next_tvb, 0, keydata_len, ENC_NA0x00000000);
23863 add_ptk_analysis(tvb, subtree, &proto->used_key);
23864 } else {
23865 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_gtk_key_encrypted,
23866 tvb, offset, s_end - offset, ENC_NA0x00000000);
23867 }
23868 break;
23869 case 3:
23870 save_proto_data(tvb, pinfo, offset, len, FTE_R0KH_ID_KEY);
23871 save_proto_data_value(pinfo, len, FTE_R0KH_ID_LEN_KEY);
23872 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_r0kh_id,
23873 tvb, offset, len, ENC_NA0x00000000);
23874 break;
23875 case 4:
23876 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key_id,
23877 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23878 offset += 2;
23879 if (offset > s_end)
23880 break;
23881 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_ipn,
23882 tvb, offset, 6, ENC_NA0x00000000);
23883 offset += 6;
23884 if (offset > s_end)
23885 break;
23886 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key_length,
23887 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23888 offset += 1;
23889 if (offset > s_end)
23890 break;
23891 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_igtk_key,
23892 tvb, offset, 24, ENC_NA0x00000000);
23893 break;
23894 case 5:
23895 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_op_class,
23896 tvb, offset, 1, ENC_NA0x00000000);
23897 offset += 1;
23898 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_prim_chan_num,
23899 tvb, offset, 1, ENC_NA0x00000000);
23900 offset += 1;
23901 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_freq_seg_1,
23902 tvb, offset, 1, ENC_NA0x00000000);
23903 offset += 1;
23904 if (offset >= s_end)
23905 break;
23906 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_op_class,
23907 tvb, offset, 1, ENC_NA0x00000000);
23908 offset += 1;
23909 if (offset >= s_end)
23910 break;
23911 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num,
23912 tvb, offset, 1, ENC_NA0x00000000);
23913 offset += 1;
23914 if (offset >= s_end)
23915 break;
23916 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1,
23917 tvb, offset, 1, ENC_NA0x00000000);
23918 break;
23919 case 6:
23920 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key_id,
23921 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23922 offset += 2;
23923 if (offset > s_end)
23924 break;
23925 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_bipn,
23926 tvb, offset, 6, ENC_NA0x00000000);
23927 offset += 6;
23928 if (offset > s_end)
23929 break;
23930 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key_length,
23931 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23932 offset += 1;
23933 if (offset > s_end)
23934 break;
23935 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_bigtk_key,
23936 tvb, offset, s_end - offset, ENC_NA0x00000000);
23937 break;
23938 case 8: /* MLO GTK */
23939 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info,
23940 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23941 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id,
23942 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23943 offset += 2;
23944 if (offset > s_end)
23945 break;
23946 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info,
23947 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23948 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id,
23949 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23950 offset += 1;
23951 if (offset > s_end)
23952 break;
23953 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length,
23954 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23955 offset += 1;
23956 if (offset > s_end)
23957 break;
23958 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc,
23959 tvb, offset, 8, ENC_NA0x00000000);
23960 offset += 8;
23961 if (offset > s_end)
23962 break;
23963 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_gtk_key,
23964 tvb, offset, s_end - offset, ENC_NA0x00000000);
23965 break;
23966 case 9: /* MLO IGTK */
23967 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id,
23968 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23969 offset += 2;
23970 if (offset > s_end)
23971 break;
23972 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn,
23973 tvb, offset, 6, ENC_NA0x00000000);
23974 offset += 6;
23975 if (offset > s_end)
23976 break;
23977 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info,
23978 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23979 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id,
23980 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23981 offset += 1;
23982 if (offset > s_end)
23983 break;
23984 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length,
23985 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
23986 offset += 1;
23987 if (offset > s_end)
23988 break;
23989 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_igtk_key,
23990 tvb, offset, s_end - offset, ENC_NA0x00000000);
23991 break;
23992 case 10: /* MLO BIGTK */
23993 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id,
23994 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
23995 offset += 2;
23996 if (offset > s_end)
23997 break;
23998 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_bipn,
23999 tvb, offset, 6, ENC_NA0x00000000);
24000 offset += 6;
24001 if (offset > s_end)
24002 break;
24003 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info,
24004 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24005 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id,
24006 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24007 offset += 1;
24008 if (offset > s_end)
24009 break;
24010 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_length,
24011 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24012 offset += 1;
24013 if (offset > s_end)
24014 break;
24015 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_mlo_bigtk_key,
24016 tvb, offset, s_end - offset, ENC_NA0x00000000);
24017 break;
24018 default:
24019 proto_tree_add_item(subtree, hf_ieee80211_tag_ft_subelem_data,
24020 tvb, offset, len, ENC_NA0x00000000);
24021 break;
24022 }
24023 offset = s_end;
24024 }
24025
24026 return tvb_captured_length(tvb);
24027}
24028
24029static int
24030dissect_mmie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24031{
24032 int tag_len = tvb_reported_length(tvb);
24033 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24034 int offset = 0;
24035 int mic_len = 8;
24036
24037 if (!(tag_len == 16 || tag_len == 24)) {
24038 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24039 "MMIE content length must be 16 or 24 bytes");
24040 return 1;
24041 }
24042
24043 if (tag_len == 24) {
24044 mic_len = 16;
24045 }
24046 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_keyid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24047 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_ipn, tvb, offset + 2, 6,
24048 ENC_LITTLE_ENDIAN0x80000000);
24049 proto_tree_add_item(tree, hf_ieee80211_tag_mmie_mic, tvb, offset + 8, mic_len,
24050 ENC_NA0x00000000);
24051 return tvb_captured_length(tvb);
24052}
24053
24054static int
24055ieee80211_tag_dmg_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data);
24056
24057static int
24058dissect_no_bssid_capability(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data)
24059{
24060 int tag_len = tvb_reported_length(tvb);
24061 int offset = 0;
24062
24063 static int * const ieee80211_tag_no_bssid_capability_dmg_bss_control[] = {
24064 &hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type,
24065 &hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved,
24066 NULL((void*)0)
24067 };
24068
24069 add_ff_cap_info(tree, tvb, pinfo, offset);
24070 offset += 2;
24071 tag_len -= 2;
24072
24073 /* On nontransmitted BSSID, there is only DMG Capability Info */
24074 if (tag_len) {
24075 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_no_bssid_capability_dmg_bss_control,
24076 ett_tag_no_bssid_capability_dmg_bss_control_tree,
24077 ieee80211_tag_no_bssid_capability_dmg_bss_control,
24078 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24079 /* offset += 1; */
24080
24081 ieee80211_tag_dmg_capabilities(tvb, pinfo, tree, data);
24082 }
24083
24084 return tvb_captured_length(tvb);
24085}
24086
24087static int
24088dissect_ssid_list(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24089{
24090 int tag_len = tvb_reported_length(tvb);
24091 int offset = 0;
24092 proto_tree *entry;
24093 bool_Bool first = true1;
24094
24095 while (offset + 1 <= tag_len) {
24096 uint8_t len = tvb_get_uint8(tvb, offset + 1);
24097 char *str;
24098
24099 if (offset + 2 + len > tag_len)
24100 break;
24101
24102 str = tvb_format_text(pinfo->pool, tvb, offset + 2, len);
24103 proto_item_append_text(tree, "%c %s", (first ? ':' : ','), str);
24104 first = false0;
24105 entry = proto_tree_add_subtree_format(tree, tvb, offset, 2 + len, ett_ssid_list, NULL((void*)0), "SSID: %s", str);
24106 proto_tree_add_item(entry, hf_ieee80211_tag_number, tvb, offset, 1,
24107 ENC_LITTLE_ENDIAN0x80000000);
24108 offset++;
24109 proto_tree_add_uint(entry, hf_ieee80211_tag_length, tvb, offset, 1, len);
24110 offset++;
24111 /* XXX: IEEE 802.11-2020 seems to say that these SSIDs are also affected
24112 * by the UTF-8 Encoding bit in the Extended Capabilities element
24113 * (though at least SSID List comes after Extended Capabilities).
24114 */
24115 proto_tree_add_item(entry, hf_ieee80211_tag_ssid, tvb, offset, len,
24116 ENC_NA0x00000000);
24117 offset += len;
24118 }
24119
24120 return tvb_captured_length(tvb);
24121}
24122
24123static int
24124dissect_multiple_bssid_index(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24125{
24126 int tag_len = tvb_reported_length(tvb);
24127 int offset = 0;
24128
24129 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_bssid_index, tvb, offset, 1, ENC_NA0x00000000);
24130 offset += 1;
24131 tag_len -= 1;
24132
24133 if (tag_len) {
24134 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_dtim_period, tvb, offset, 1, ENC_NA0x00000000);
24135 offset += 1;
24136
24137 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid_index_dtim_count, tvb, offset, 1, ENC_NA0x00000000);
24138 offset += 1;
24139 }
24140
24141 return offset;
24142}
24143
24144static int
24145dissect_link_identifier(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24146{
24147 int tag_len = tvb_reported_length(tvb);
24148 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24149 int offset = 0;
24150
24151 if (tag_len < 18) {
24152 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24153 "Link Identifier content length must be at least "
24154 "18 bytes");
24155 return tvb_captured_length(tvb);
24156 }
24157
24158 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_bssid, tvb,
24159 offset, 6, ENC_NA0x00000000);
24160 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_init_sta, tvb,
24161 offset + 6, 6, ENC_NA0x00000000);
24162 proto_tree_add_item(tree, hf_ieee80211_tag_link_id_resp_sta, tvb,
24163 offset + 12, 6, ENC_NA0x00000000);
24164 return tvb_captured_length(tvb);
24165}
24166
24167static int
24168dissect_wakeup_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24169{
24170 int tag_len = tvb_reported_length(tvb);
24171 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24172 int offset = 0;
24173
24174 if (tag_len < 18) {
24175 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24176 "Wakeup Schedule content length must be at least "
24177 "18 bytes");
24178 return tvb_captured_length(tvb);
24179 }
24180
24181 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_offset, tvb,
24182 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24183 offset += 4;
24184
24185 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_interval, tvb,
24186 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24187 offset += 4;
24188
24189 proto_tree_add_item(tree,
24190 hf_ieee80211_tag_wakeup_schedule_awake_window_slots, tvb,
24191 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24192 offset += 4;
24193
24194 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
24195 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24196 offset += 4;
24197
24198 proto_tree_add_item(tree, hf_ieee80211_tag_wakeup_schedule_idle_count, tvb,
24199 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24200 return tvb_captured_length(tvb);
24201}
24202
24203static int
24204dissect_channel_switch_timing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24205{
24206 int tag_len = tvb_reported_length(tvb);
24207 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24208 int offset = 0;
24209
24210 if (tag_len < 4) {
24211 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24212 "Channel Switch Timing content length must be at "
24213 "least 4 bytes");
24214 return tvb_captured_length(tvb);
24215 }
24216
24217 proto_tree_add_item(tree, hf_ieee80211_tag_channel_switch_timing_switch_time,
24218 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24219 offset += 2;
24220
24221 proto_tree_add_item(tree,
24222 hf_ieee80211_tag_channel_switch_timing_switch_timeout,
24223 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24224 return tvb_captured_length(tvb);
24225}
24226
24227static int
24228dissect_pti_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24229{
24230 int tag_len = tvb_reported_length(tvb);
24231 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24232 int offset = 0;
24233
24234 if (tag_len < 3) {
24235 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "PTI Control content length must be at least 3 bytes");
24236 return tvb_captured_length(tvb);
24237 }
24238
24239 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_tid, tvb,
24240 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24241 offset += 1;
24242
24243 proto_tree_add_item(tree, hf_ieee80211_tag_pti_control_sequence_control, tvb,
24244 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24245 return tvb_captured_length(tvb);
24246}
24247
24248static int
24249dissect_pu_buffer_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24250{
24251 int tag_len = tvb_reported_length(tvb);
24252 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24253 int offset = 0;
24254 static int * const ieee80211_pu_buffer_status[] = {
24255 &hf_ieee80211_tag_pu_buffer_status_ac_bk,
24256 &hf_ieee80211_tag_pu_buffer_status_ac_be,
24257 &hf_ieee80211_tag_pu_buffer_status_ac_vi,
24258 &hf_ieee80211_tag_pu_buffer_status_ac_vo,
24259 NULL((void*)0)
24260 };
24261
24262 if (tag_len < 1) {
24263 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");
24264 return tvb_captured_length(tvb);
24265 }
24266
24267 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_pu_buffer_status, ENC_LITTLE_ENDIAN0x80000000);
24268 return tvb_captured_length(tvb);
24269}
24270
24271static int
24272dissect_timeout_interval(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
24273{
24274 int tag_len = tvb_reported_length(tvb);
24275 int offset = 0;
24276 proto_item *pi;
24277
24278 pi = proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_type, tvb,
24279 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24280 if (tag_len < 5) {
24281 expert_add_info_format(pinfo, pi, &ei_ieee80211_tag_length,
24282 "Timeout Interval content length must be at least "
24283 "5 bytes");
24284 return 1;
24285 }
24286
24287 proto_tree_add_item(tree, hf_ieee80211_tag_timeout_int_value, tvb,
24288 offset + 1, 4, ENC_LITTLE_ENDIAN0x80000000);
24289 return tvb_captured_length(tvb);
24290}
24291
24292static int
24293dissect_ric_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24294{
24295 int tag_len = tvb_reported_length(tvb);
24296 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24297 int offset = 0;
24298 proto_tree *sub_tree;
24299 uint8_t desc_cnt = 0;
24300 uint32_t next_ie;
24301 int offset_r = 0;
24302 const uint8_t ids[] = { TAG_RIC_DESCRIPTOR75 };
24303
24304 if (tag_len != 4) {
24305 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24306 "RIC Data Length must be 4 bytes");
24307 return 0;
24308 }
24309
24310 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_id, tvb,
24311 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24312 offset += 1;
24313
24314 desc_cnt = tvb_get_uint8(tvb, offset);
24315 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_desc_cnt, tvb,
24316 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24317 offset += 1;
24318
24319 proto_tree_add_item(tree, hf_ieee80211_tag_ric_data_status_code, tvb,
24320 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24321 offset += 2;
24322
24323 /* Our Design is such that all the Resource request IE's part of the RIC
24324 * must be in the sub tree of RIC for better readability
24325 * Even omnipeek does the same way.
24326 */
24327 sub_tree = proto_item_add_subtree(tree, ett_tag_ric_data_desc_ie);
24328
24329 proto_item_append_text(field_data->item_tag, " :Resource Descriptor List");
24330 if (desc_cnt == 0) {
24331 proto_item_append_text(field_data->item_tag, " :0 (Weird?)");
24332 }
24333
24334 while ( desc_cnt != 0 ) {
24335
24336 next_ie = tvb_get_uint8(tvb, offset);
24337 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)"));
24338 /* Recursive call to avoid duplication of code*/
24339 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));
24340 if (offset_r == 0 )/* should never happen, returns a min of 2*/
24341 break;
24342 /* This will ensure that the IE after RIC is processed
24343 * only once. This gives us a good looking RIC IE :-)
24344 */
24345 tag_len += offset_r;
24346 desc_cnt--;
24347 }
24348
24349 return tvb_captured_length(tvb);
24350}
24351
24352/* Overlapping BSS Scan Parameters (74) */
24353static int
24354dissect_overlap_bss_scan_par(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24355{
24356 int offset = 0;
24357 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24358 int tag_len = tvb_reported_length(tvb);
24359
24360 if (tag_len != 14) {
24361 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24362 "OBSS Length must be 14 bytes");
24363 return 1;
24364 }
24365
24366 proto_tree_add_item(tree, hf_ieee80211_tag_obss_spd, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24367 offset += 2;
24368
24369 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sad, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24370 offset += 2;
24371
24372 proto_tree_add_item(tree, hf_ieee80211_tag_obss_cwtsi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24373 offset += 2;
24374
24375 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sptpc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24376 offset += 2;
24377
24378 proto_tree_add_item(tree, hf_ieee80211_tag_obss_satpc, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24379 offset += 2;
24380
24381 proto_tree_add_item(tree, hf_ieee80211_tag_obss_wctdf, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24382 offset += 2;
24383
24384 proto_tree_add_item(tree, hf_ieee80211_tag_obss_sat, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24385 offset += 2;
24386
24387 return offset;
24388}
24389
24390/* RIC Descriptor (75) */
24391static int
24392dissect_ric_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
24393{
24394 int offset = 0;
24395 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
24396 int tag_len = tvb_reported_length(tvb);
24397 uint8_t rsrc_type = 0;
24398
24399 if (tag_len < 1) {
24400 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
24401 "RIC Data Length must be at least 1 byte");
24402 return 1;
24403 }
24404
24405 rsrc_type = tvb_get_uint8(tvb, offset);
24406 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_rsrc_type, tvb,
24407 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24408 offset += 1;
24409
24410 if (rsrc_type == 1) {
24411 /* Block ACK params
24412 * 802.11-2012: 8.4.2.53 RIC Descriptor element
24413 * Block Ack parameter set as defined in 8.4.1.14,
24414 * Block Ack timeout value as defined in 8.4.1.15, and
24415 * Block Ack starting sequence control as defined in 8.3.1.8
24416 */
24417 /* TODO: Still figuring out how to parse these ones,
24418 * need a sample capture with at least HEX Dump
24419 */
24420 proto_item_append_text(field_data->item_tag, " : Block ACK Params");
24421 proto_tree_add_item(tree, hf_ieee80211_tag_ric_desc_var_params, tvb,
24422 offset, tag_len-1, ENC_NA0x00000000);
24423 offset += tag_len -1;
24424 }else {
24425 /* 0, 2-255 are reserved*/
24426 proto_item_append_text(field_data->item_tag, " :Reserved (type != 1)");
24427 }
24428
24429 return offset;
24430}
24431
24432static int
24433dissect_ext_bss_load(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24434{
24435 int offset = 0;
24436 proto_tree_add_item(tree, hf_ieee80211_ext_bss_mu_mimo_capable_sta_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
24437 offset += 2;
24438 proto_tree_add_item(tree, hf_ieee80211_ext_bss_ss_underutilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24439 offset += 1;
24440 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_20mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24441 offset += 1;
24442 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_40mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24443 offset += 1;
24444 proto_tree_add_item(tree, hf_ieee80211_ext_bss_observable_sec_80mhz_utilization, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24445 offset += 1;
24446
24447 return offset;
24448}
24449
24450static int
24451dissect_wide_bw_channel_switch(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24452{
24453 int offset = 0;
24454
24455 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_width, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24456 offset += 1;
24457 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment0, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24458 offset += 1;
24459 proto_tree_add_item(tree, hf_ieee80211_wide_bw_new_channel_center_freq_segment1, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24460 offset += 1;
24461
24462 return offset;
24463}
24464
24465static int
24466dissect_channel_switch_wrapper(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24467{
24468 int tag_len = tvb_reported_length(tvb);
24469 int offset = 0;
24470 int tmp_sublen;
24471 const uint8_t ids[] = { TAG_COUNTRY_INFO7, TAG_WIDE_BW_CHANNEL_SWITCH194,
24472 TAG_TX_PWR_ENVELOPE195 };
24473 const uint8_t ext_ids[] = {ETAG_BANDWIDTH_INDICATION135};
24474
24475 /*
24476 Decode three subelement in IE-196(Channel Switch Wrapper element):
24477 (1) New Country subelement
24478 (2) Wide Bandwidth Channel Switch subelement
24479 (3) New VHT Transmit Power Envelope subelement
24480 (4) Bandwidth Indication subelement
24481 */
24482 while (tag_len > 0){
24483 tmp_sublen = tvb_get_uint8(tvb, offset + 1);
24484 if (add_tagged_field_with_validation(pinfo, tree, tvb, offset, 0, ids,
24485 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) {
24486 break;
24487 }
24488 tag_len -= (tmp_sublen + 2);
24489 offset += (tmp_sublen + 2);
24490 }
24491 return offset;
24492}
24493
24494static int
24495dissect_operating_mode_notification(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24496{
24497 int offset = 0;
24498 static int * const ieee80211_operat_mode_field[] = {
24499 &hf_ieee80211_operat_mode_field_channel_width,
24500 &hf_ieee80211_operat_mode_field_160_80plus80_bw,
24501 &hf_ieee80211_operat_mode_field_no_ldpc,
24502 &hf_ieee80211_operat_mode_field_rxnss,
24503 &hf_ieee80211_operat_mode_field_rxnsstype,
24504 NULL((void*)0)
24505 };
24506
24507 /* Operating Mode field */
24508 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_operat_notification_mode,
24509 ett_mcsbit_tree, ieee80211_operat_mode_field,
24510 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24511 offset += 1;
24512 return offset;
24513}
24514
24515static const range_string tbtt_info_length[] = {
24516 { 0, 0, "Reserved" },
24517 { 1, 1, "Neighbor AP TBTT Offset subfield" },
24518 { 2, 2, "Neighbor AP TBTT Offset subfield and the BSS Parameters subfield" },
24519 { 3, 4, "Reserved" },
24520 { 5, 5, "Neighbor AP TBTT Offset subfield and the Short-SSID subfield" },
24521 { 6, 6, "Neighbor AP TBTT offset subfield, the Short SSID subfield and the BSS Parameters subfield" },
24522 { 7, 7, "Neighbor AP TBTT Offset subfield and the BSSID subfield" },
24523 { 8, 8, "Neighbor AP TBTT Offset subfield, the BSSID subfield and the BSS Parameters subfield" },
24524 { 9, 9, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the BSS Parameters subfield and the 20 MHz PSD subfield" },
24525 { 10, 10, "Reserved" },
24526 { 11, 11, "Neighbor AP TBTT Offset subfield, the BSSID subfield and the Short-SSID subfield" },
24527 { 12, 12, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the Short SSID subfield and the BSS Parameters subfield" },
24528 { 13, 13, "Neighbor AP TBTT Offset subfield, the BSSID subfield, the Short SSID subfield, the BSS Parameters subfield and the 20 MHz PSD subfield" },
24529 { 14, 15, "Reserved" },
24530 { 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" },
24531 { 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"},
24532 { 0, 0, NULL((void*)0) }
24533};
24534
24535static int * const bss_params_headers[] = {
24536 &hf_ieee80211_rnr_oct_recommended,
24537 &hf_ieee80211_rnr_same_ssid,
24538 &hf_ieee80211_rnr_multiple_bssid,
24539 &hf_ieee80211_rnr_transmitted_bssid,
24540 &hf_ieee80211_rnr_ess_with_colocated_ap,
24541 &hf_ieee80211_rnr_unsolicited_probe_responses,
24542 &hf_ieee80211_rnr_same_colocated_ap,
24543 &hf_ieee80211_rnr_same_reserved,
24544 NULL((void*)0)
24545};
24546
24547static int * const mld_params_headers[] = {
24548 &hf_ieee80211_rnr_mld_id,
24549 &hf_ieee80211_rnr_mld_link_id,
24550 &hf_ieee80211_rnr_mld_bss_params_change_count,
24551 &hf_ieee80211_rnr_mld_all_updates_included,
24552 &hf_ieee80211_rnr_mld_disabled_link_indication,
24553 &hf_ieee80211_rnr_mld_reserved,
24554 NULL((void*)0)
24555};
24556
24557static int
24558dissect_neighbor_ap_info(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
24559 int offset)
24560{
24561 uint16_t tbtt_info_h;
24562 uint16_t tbtt_info_len;
24563 uint16_t tbtt_info_count;
24564 uint16_t len_remain = 0;
24565 int i = 0;
24566 bool_Bool display_tbtt_offset = false0;
24567 bool_Bool display_bssid_subfield = false0;
24568 bool_Bool display_short_bssid_subfield = false0;
24569 bool_Bool display_bss_parameters_subfield = false0;
24570 bool_Bool display_20mhz_psd_subfield = false0;
24571 bool_Bool display_mld_params_subfield = false0;
24572 bool_Bool display_reserved = false0;
24573
24574 proto_item *item;
24575 proto_tree *query;
24576
24577 tbtt_info_h = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
24578 tbtt_info_len = TBTT_INFO_LENGTH(tbtt_info_h)(((tbtt_info_h) & (0xff<<8)) >> 8);
24579 tbtt_info_count = TBTT_INFO_COUNT(tbtt_info_h)(((tbtt_info_h) & (0xf<<4)) >> 4);
24580 switch(tbtt_info_len) {
24581 case 0: case 3: case 4: case 10: case 14: case 15:
24582 /* Reserved cases */
24583 display_reserved = true1;
24584 len_remain = tbtt_info_len;
24585 break;
24586 case 1:
24587 display_tbtt_offset = true1;
24588 break;
24589 case 2:
24590 display_tbtt_offset = true1;
24591 display_bss_parameters_subfield = true1;
24592 break;
24593 case 5:
24594 display_tbtt_offset = true1;
24595 display_short_bssid_subfield = true1;
24596 break;
24597 case 6:
24598 display_tbtt_offset = true1;
24599 display_short_bssid_subfield = true1;
24600 display_bss_parameters_subfield = true1;
24601 break;
24602 case 7:
24603 display_tbtt_offset = true1;
24604 display_bssid_subfield = true1;
24605 break;
24606 case 8:
24607 display_tbtt_offset = true1;
24608 display_bssid_subfield = true1;
24609 display_bss_parameters_subfield = true1;
24610 break;
24611 case 9:
24612 display_tbtt_offset = true1;
24613 display_bssid_subfield = true1;
24614 display_bss_parameters_subfield = true1;
24615 display_20mhz_psd_subfield = true1;
24616 break;
24617 case 11:
24618 display_tbtt_offset = true1;
24619 display_bssid_subfield = true1;
24620 display_short_bssid_subfield = true1;
24621 break;
24622 case 12:
24623 display_tbtt_offset = true1;
24624 display_bssid_subfield = true1;
24625 display_short_bssid_subfield = true1;
24626 display_bss_parameters_subfield = true1;
24627 break;
24628 case 13:
24629 display_tbtt_offset = true1;
24630 display_bssid_subfield = true1;
24631 display_short_bssid_subfield = true1;
24632 display_bss_parameters_subfield = true1;
24633 display_20mhz_psd_subfield = true1;
24634 break;
24635 case 16: /* EHT stuff */
24636 display_tbtt_offset = true1;
24637 display_bssid_subfield = true1;
24638 display_short_bssid_subfield = true1;
24639 display_bss_parameters_subfield = true1;
24640 display_20mhz_psd_subfield = true1;
24641 display_mld_params_subfield = true1;
24642 break;
24643 default: /* 17- 255: Same as 16 but the remaining bytes are reserved. */
24644 display_tbtt_offset = true1;
24645 display_bssid_subfield = true1;
24646 display_short_bssid_subfield = true1;
24647 display_bss_parameters_subfield = true1;
24648 display_20mhz_psd_subfield = true1;
24649 display_mld_params_subfield = true1;
24650 display_reserved = true1;
24651 len_remain = tbtt_info_len - 16;
24652 break;
24653 }
24654
24655 proto_tree_add_item(tree, hf_ieee80211_tbtt_info, tvb, offset, 2,
24656 ENC_LITTLE_ENDIAN0x80000000);
24657 proto_tree_add_item(tree, hf_ieee80211_tbtt_filtered_nap, tvb, offset, 2,
24658 ENC_LITTLE_ENDIAN0x80000000);
24659 item = proto_tree_add_item(tree, hf_ieee80211_tbtt_info_count, tvb, offset, 2,
24660 ENC_LITTLE_ENDIAN0x80000000);
24661 proto_tree_add_item(tree, hf_ieee80211_tbtt_info_length, tvb, offset, 2,
24662 ENC_LITTLE_ENDIAN0x80000000);
24663 offset+=2;
24664
24665 proto_tree_add_item(tree, hf_ieee80211_tbtt_operating_class, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24666 offset+=1;
24667 proto_tree_add_item(tree, hf_ieee80211_tbtt_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24668 offset+=1;
24669
24670 for (i=0; i < tbtt_info_count + 1; i++) {
24671 query = proto_tree_add_subtree(tree, tvb, offset, tbtt_info_len,
24672 ett_tbtt_infos, &item, "TBTT Information");
24673
24674 if (display_tbtt_offset) {
24675 proto_tree_add_item(query, hf_ieee80211_tbtt_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
24676 offset+=1;
24677 }
24678 if (display_bssid_subfield) {
24679 proto_tree_add_item(query, hf_ieee80211_tbtt_bssid, tvb, offset, 6, ENC_NA0x00000000);
24680 offset+=6;
24681 }
24682 if (display_short_bssid_subfield) {
24683 proto_tree_add_item(query, hf_ieee80211_tbtt_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
24684 offset+=4;
24685 }
24686 if (display_bss_parameters_subfield) {
24687
24688 proto_tree_add_bitmask_with_flags(query, tvb, offset,
24689 hf_ieee80211_rnr_bss_params,
24690 ett_rnr_bss_params_tree,
24691 bss_params_headers,
24692 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24693 offset += 1;
24694 }
24695 if (display_20mhz_psd_subfield) {
24696 proto_tree_add_item(query, hf_ieee80211_rnr_20mhz_psd_subfield, tvb,
24697 offset, 1, ENC_NA0x00000000);
24698 offset += 1;
24699 }
24700 if (display_mld_params_subfield) {
24701
24702 proto_tree_add_bitmask_with_flags(query, tvb, offset,
24703 hf_ieee80211_rnr_mld_params,
24704 ett_rnr_mld_params_tree,
24705 mld_params_headers,
24706 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24707 offset += 3;
24708 }
24709 if (display_reserved) {
24710 proto_tree_add_item(query, hf_ieee80211_rnr_reserved_data, tvb, offset,
24711 len_remain, ENC_NA0x00000000);
24712 }
24713
24714 offset += len_remain;
24715 }
24716
24717 return offset;
24718}
24719
24720static int
24721dissect_reduced_neighbor_report(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24722{
24723 int offset = 0;
24724
24725 while (tvb_reported_length_remaining(tvb, offset)) {
24726 int start_offset;
24727 proto_tree *neighbor_ap_info = NULL((void*)0);
24728 proto_item *naii = NULL((void*)0);
24729
24730 start_offset = offset;
24731 neighbor_ap_info = proto_tree_add_subtree(tree, tvb, offset, -1,
24732 ett_neighbor_ap_info, &naii,
24733 "Neighbor AP Information");
24734 offset = dissect_neighbor_ap_info(tvb, pinfo, neighbor_ap_info, offset);
24735
24736 proto_item_set_len(naii, offset - start_offset);
24737 }
24738
24739 return tvb_reported_length(tvb);
24740}
24741
24742static const value_string s1g_supported_channel_width_vals[] = {
24743 { 0, "STA supports 1MHz and 2MHz operation" },
24744 { 1, "STA supports 1MHz, 2MHz and 4MHz operation" },
24745 { 2, "STA supports 1MHz, 2MHz, 4MHz and 8MHz operation" },
24746 { 3, "STA supports 1MHz, 2MHz, 4MHz, 8MHz and 16MHz operation" },
24747 { 0, NULL((void*)0) }
24748};
24749
24750static const value_string s1g_traveling_pilot_support_vals[] = {
24751 { 0, "Traveling Pilot Support not activated" },
24752 { 1, "Traveling Pilot Support activated for only one space-time stream" },
24753 { 2, "Reserved" },
24754 { 3, "Traveling Pilot Support activated for one and two space-time streams" },
24755 { 0, NULL((void*)0) }
24756};
24757
24758static const value_string s1g_max_mpdu_length_vals[] = {
24759 { 0, "3895" },
24760 { 1, "7991" },
24761 { 0, NULL((void*)0) }
24762};
24763
24764static const value_string s1g_min_mpdu_start_spacing_vals[] = {
24765 { 0, "No restriction" },
24766 { 1, "1/4 uS" },
24767 { 2, "1/2 uS" },
24768 { 3, "1 uS" },
24769 { 4, "2 uS" },
24770 { 5, "4 uS" },
24771 { 6, "8 uS" },
24772 { 7, "16 uS" },
24773 { 0, NULL((void*)0) }
24774};
24775
24776static const value_string s1g_sta_type_support_vals[] = {
24777 { 0, "AP-Only. Supports sensor and non-sensor STAs." },
24778 { 1, "AP supports only sensor STAs. STA is a sensor STA." },
24779 { 2, "AP supports only non-sensor STAs. STA is a non-sensor STA" },
24780 { 3, "Reserved" },
24781 { 0, NULL((void*)0) }
24782};
24783
24784static const value_string s1g_sectorized_beam_capable_vals[] = {
24785 { 0, "AP or non-AP: Not supported" },
24786 { 1, "AP: TXOP-based sectorization only. Non-AP: Both group and TXOP" },
24787 { 2, "AP: Group sectorization only. Non-AP: Reserved" },
24788 { 3, "AP: Both group and TXOP sectorization. Non-AP: Reserved" },
24789 { 0, NULL((void*)0) }
24790};
24791
24792static const value_string s1g_vht_link_adaptation_vals[] = {
24793 { 0, "STA does not provide VHT MFB" },
24794 { 1, "Reserved" },
24795 { 2, "STA can only provide unsolicited VHT MFB" },
24796 { 3, "STA can provide unsolicited and solicited VHT MFB" },
24797 { 0, NULL((void*)0) }
24798};
24799
24800#if 0
24801static const value_string s1g_mcs_map[] = {
24802 { 0, "Support for S1G-MCS 2 for n spatial streams" },
24803 { 1, "Support for S1G-MCS 7 for n spatial streamS" },
24804 { 2, "Support for S1G-MCS 9 for n spatial streams" },
24805 { 3, "n spatial streams not supported" },
24806 { 0, NULL((void*)0) }
24807};
24808#endif
24809
24810static int * const ieee80211_s1g_cap_byte1[] = {
24811 &hf_ieee80211_s1g_cap_s1g_long_support,
24812 &hf_ieee80211_s1g_cap_short_gi_for_1_mhz,
24813 &hf_ieee80211_s1g_cap_short_gi_for_2_mhz,
24814 &hf_ieee80211_s1g_cap_short_gi_for_4_mhz,
24815 &hf_ieee80211_s1g_cap_short_gi_for_8_mhz,
24816 &hf_ieee80211_s1g_cap_short_gi_for_16_mhz,
24817 &hf_ieee80211_s1g_cap_supported_channel_width,
24818 NULL((void*)0)
24819};
24820
24821static int * const ieee80211_s1g_cap_byte2[] = {
24822 &hf_ieee80211_s1g_cap_rx_ldpc,
24823 &hf_ieee80211_s1g_cap_tx_stbc,
24824 &hf_ieee80211_s1g_cap_rx_stbc,
24825 &hf_ieee80211_s1g_cap_su_beamformer_capable,
24826 &hf_ieee80211_s1g_cap_su_beamformee_capable,
24827 &hf_ieee80211_s1g_cap_beamformee_sts_capability, /* Needs global */
24828 NULL((void*)0)
24829};
24830
24831static int * const ieee80211_s1g_cap_byte3[] = {
24832 &hf_ieee80211_s1g_cap_number_sounding_dimensions,
24833 &hf_ieee80211_s1g_cap_mu_beamformer_capable,
24834 &hf_ieee80211_s1g_cap_mu_beamformee_capable,
24835 &hf_ieee80211_s1g_cap_htc_vht_capable,
24836 &hf_ieee80211_s1g_cap_travelling_pilot_support,
24837 NULL((void*)0)
24838};
24839
24840static int * const ieee80211_s1g_cap_byte4[] = {
24841 &hf_ieee80211_s1g_cap_rd_responder,
24842 &hf_ieee80211_s1g_cap_ht_delayed_block_ack,
24843 &hf_ieee80211_s1g_cap_maximum_mpdu_length,
24844 &hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp,
24845 &hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing,
24846 NULL((void*)0)
24847};
24848
24849static int * const ieee80211_s1g_cap_byte5[] = {
24850 &hf_ieee80211_s1g_cap_uplink_sync_capable,
24851 &hf_ieee80211_s1g_cap_dynamic_aid,
24852 &hf_ieee80211_s1g_cap_bat_support,
24853 &hf_ieee80211_s1g_cap_tim_ade_support,
24854 &hf_ieee80211_s1g_cap_non_tim_support,
24855 &hf_ieee80211_s1g_cap_group_aid_support,
24856 &hf_ieee80211_s1g_cap_sta_type_support,
24857 NULL((void*)0)
24858};
24859
24860static int * const ieee80211_s1g_cap_byte6[] = {
24861 &hf_ieee80211_s1g_cap_centralized_authentication_control,
24862 &hf_ieee80211_s1g_cap_distributed_authentication_control,
24863 &hf_ieee80211_s1g_cap_a_msdu_support,
24864 &hf_ieee80211_s1g_cap_a_mpdu_support,
24865 &hf_ieee80211_s1g_cap_asymmetic_block_ack_support,
24866 &hf_ieee80211_s1g_cap_flow_control_support,
24867 &hf_ieee80211_s1g_cap_sectorized_beam_capable,
24868 NULL((void*)0)
24869};
24870
24871static int * const ieee80211_s1g_cap_byte7[] = {
24872 &hf_ieee80211_s1g_cap_obss_mitigation_support,
24873 &hf_ieee80211_s1g_cap_fragment_ba_support,
24874 &hf_ieee80211_s1g_cap_ndp_ps_poll_supported,
24875 &hf_ieee80211_s1g_cap_raw_operation_support,
24876 &hf_ieee80211_s1g_cap_page_slicing_support,
24877 &hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support,
24878 &hf_ieee80211_s1g_cap_vht_link_adaptation_capable,
24879 NULL((void*)0)
24880};
24881
24882static int * const ieee80211_s1g_cap_byte8[] = {
24883 &hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response,
24884 &hf_ieee80211_s1g_cap_duplicate_1_mhz_support,
24885 &hf_ieee80211_s1g_cap_mcs_negotiation_support,
24886 &hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support,
24887 &hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support,
24888 &hf_ieee80211_s1g_cap_unsolicited_dynamic_aid,
24889 &hf_ieee80211_s1g_cap_sector_training_operation_supported,
24890 &hf_ieee80211_s1g_cap_temporary_ps_mode_switch,
24891 NULL((void*)0),
24892};
24893
24894static int * const ieee80211_s1g_cap_byte9[] = {
24895 &hf_ieee80211_s1g_cap_twt_grouping_support,
24896 &hf_ieee80211_s1g_cap_bdt_capable,
24897 &hf_ieee80211_s1g_cap_color,
24898 &hf_ieee80211_s1g_cap_twt_requester_support,
24899 &hf_ieee80211_s1g_cap_twt_responder_support,
24900 &hf_ieee80211_s1g_cap_pv1_frame_support,
24901 NULL((void*)0)
24902};
24903
24904static int * const ieee80211_s1g_cap_byte10[] = {
24905 &hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable,
24906 &hf_ieee80211_s1g_cap_reserved,
24907 NULL((void*)0)
24908};
24909
24910static int * const ieee80211_s1g_mcs_and_nss_set[] = {
24911 &hf_ieee80211_s1g_rx_s1g_mcs_map,
24912 &hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate,
24913 &hf_ieee80211_s1g_tx_s1g_mcs_map,
24914 &hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate,
24915 &hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz,
24916 &hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz,
24917 &hf_ieee80211_s1g_mcs_and_nss_reserved,
24918 NULL((void*)0)
24919};
24920
24921static int
24922dissect_s1g_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
24923{
24924 int offset = 0;
24925 proto_tree *s1g_cap_info = NULL((void*)0);
24926 proto_tree *s1g_caps = NULL((void*)0);
24927 proto_tree *sup_mcs_nss_set = NULL((void*)0);
24928
24929 s1g_cap_info = proto_tree_add_subtree(tree, tvb, offset, 15,
24930 ett_ieee80211_s1g_capabilities_info,
24931 NULL((void*)0), "S1G Capabilities Information");
24932
24933 s1g_caps = proto_tree_add_subtree(s1g_cap_info, tvb, offset, 10,
24934 ett_ieee80211_s1g_capabilities,
24935 NULL((void*)0), "S1G Capabilities");
24936
24937 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24938 hf_ieee80211_s1g_cap_byte1,
24939 ett_s1g_cap_byte1,
24940 ieee80211_s1g_cap_byte1,
24941 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24942 offset += 1;
24943
24944 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24945 hf_ieee80211_s1g_cap_byte2,
24946 ett_s1g_cap_byte2,
24947 ieee80211_s1g_cap_byte2,
24948 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24949 offset += 1;
24950
24951 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24952 hf_ieee80211_s1g_cap_byte3,
24953 ett_s1g_cap_byte3,
24954 ieee80211_s1g_cap_byte3,
24955 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24956 offset += 1;
24957
24958 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24959 hf_ieee80211_s1g_cap_byte4,
24960 ett_s1g_cap_byte4,
24961 ieee80211_s1g_cap_byte4,
24962 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24963 offset += 1;
24964
24965 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24966 hf_ieee80211_s1g_cap_byte5,
24967 ett_s1g_cap_byte5,
24968 ieee80211_s1g_cap_byte5,
24969 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24970 offset += 1;
24971
24972 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24973 hf_ieee80211_s1g_cap_byte6,
24974 ett_s1g_cap_byte6,
24975 ieee80211_s1g_cap_byte6,
24976 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24977 offset += 1;
24978
24979 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24980 hf_ieee80211_s1g_cap_byte7,
24981 ett_s1g_cap_byte7,
24982 ieee80211_s1g_cap_byte7,
24983 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24984 offset += 1;
24985
24986 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24987 hf_ieee80211_s1g_cap_byte8,
24988 ett_s1g_cap_byte8,
24989 ieee80211_s1g_cap_byte8,
24990 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24991 offset += 1;
24992
24993 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
24994 hf_ieee80211_s1g_cap_byte9,
24995 ett_s1g_cap_byte9,
24996 ieee80211_s1g_cap_byte9,
24997 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
24998 offset += 1;
24999
25000 proto_tree_add_bitmask_with_flags(s1g_caps, tvb, offset,
25001 hf_ieee80211_s1g_cap_byte10,
25002 ett_s1g_cap_byte10,
25003 ieee80211_s1g_cap_byte10,
25004 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25005 offset += 1;
25006
25007 sup_mcs_nss_set = proto_tree_add_subtree(s1g_cap_info, tvb, offset, 5,
25008 ett_ieee80211_s1g_sup_mcs_and_nss_set,
25009 NULL((void*)0), "Supported S1G-MCS and NSS Set");
25010
25011 proto_tree_add_bitmask_with_flags(sup_mcs_nss_set, tvb, offset,
25012 hf_ieee80211_s1g_mcs_and_nss_set,
25013 ett_s1g_mcs_and_mcs_set,
25014 ieee80211_s1g_mcs_and_nss_set,
25015 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25016 offset += 5;
25017
25018 return offset;
25019}
25020
25021static int * const s1g_subchannel_selective_transmission_headers0[] = {
25022 &hf_ieee80211_s1g_sst_sounding_option,
25023 &hf_ieee80211_s1g_channel_activity_bitmap,
25024 &hf_ieee80211_s1g_ul_activity,
25025 &hf_ieee80211_s1g_dl_activity,
25026 &hf_ieee80211_s1g_max_trans_width,
25027 &hf_ieee80211_s1g_activity_start_time,
25028 NULL((void*)0)
25029};
25030
25031static const value_string max_trans_width_vals[] = {
25032 { 0, "channel width unit" },
25033 { 1, "4MHz" },
25034 { 2, "8MHz" },
25035 { 3, "16MHz" },
25036 { 0, NULL((void*)0) }
25037};
25038
25039static int
25040dissect_subchannel_selective_transmission(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25041{
25042 int offset = 0;
25043 uint8_t control = tvb_get_uint8(tvb, offset);
25044
25045 /* Different if sounding option is 0 or 1 */
25046 if ((control & 0x01) == 0x00) {
25047 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25048 hf_ieee80211_s1g_subchannel_selective_transmission,
25049 ett_s1g_subchannel_selective_transmission,
25050 s1g_subchannel_selective_transmission_headers0,
25051 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25052 offset += 4;
25053 } else {
25054 uint8_t control2 = tvb_get_uint8(tvb, offset + 1);
25055 proto_item *pi = NULL((void*)0);
25056 proto_tree *chan_tree = NULL((void*)0);
25057
25058 chan_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
25059 ett_s1g_subchannel_selective_transmission,
25060 &pi , "Channel Activity Schedule");
25061 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sst_sounding_option1, tvb,
25062 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25063 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_channel_activity_bitmap1,
25064 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25065 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sounding_start_time_present,
25066 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25067 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_channel_activity_reserved,
25068 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25069 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_max_trans_width1, tvb,
25070 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25071 offset += 2;
25072 /* sounding_start_time_present */
25073 if (control2 & 0x02) {
25074 proto_tree_add_item(chan_tree, hf_ieee80211_s1g_sounding_start_time, tvb,
25075 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25076 offset += 2;
25077 proto_item_set_len(pi, 4);
25078 } else {
25079 proto_item_set_len(pi, 2);
25080 }
25081 }
25082
25083 return offset;
25084}
25085
25086static void
25087s1g_open_loop_link_margin_custom(char *result, uint8_t ollm_index)
25088{
25089 snprintf(result, ITEM_LABEL_LENGTH240, "%3.1f dB",
25090 (-128.0 + ollm_index * 0.5));
25091}
25092
25093static int
25094dissect_s1g_open_loop_link_margin_index(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25095{
25096 int offset = 0;
25097
25098 proto_tree_add_item(tree, hf_ieee80211_s1g_open_loop_link_margin, tvb,
25099 offset, 1, ENC_NA0x00000000);
25100 offset += 1;
25101
25102 return offset;
25103}
25104
25105#define RAW_START_TIME_INDICATION0x10 0x10
25106#define RAW_GROUP_INDICATION0x20 0x20
25107#define RAW_CHANNEL_INDICATION_PRESENCE0x40 0x40
25108#define RAW_PERIODIC_RAW_INDICATION0x80 0x80
25109
25110static const value_string s1g_raw_control_raw_type[] = {
25111 { 0, "Generic RAW" },
25112 { 1, "Sounding RAW" },
25113 { 2, "Simplex RAW" },
25114 { 3, "Triggering frame RAW" },
25115 { 0, NULL((void*)0) }
25116};
25117
25118static uint8_t global_s1g_raw_type;
25119
25120static void
25121s1g_raw_type_options_custom(char *result, uint8_t raw_type)
25122{
25123 switch (global_s1g_raw_type) {
25124 case 0x00:
25125 switch (raw_type) {
25126 case 0x00:
25127 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "None");
25128 break;
25129 case 0x01:
25130 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Paged STA");
25131 break;
25132 case 0x02:
25133 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "RA Frame");
25134 break;
25135 case 0x03:
25136 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Paged STA and RA Frame");
25137 break;
25138 }
25139 break;
25140 case 0x01:
25141 switch (raw_type) {
25142 case 0x00:
25143 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "SST sounding RAW");
25144 break;
25145 case 0x01:
25146 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "SST report RAW");
25147 break;
25148 case 0x02:
25149 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Sector sounding RAW");
25150 break;
25151 case 0x03:
25152 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Sector report RAW");
25153 break;
25154 }
25155 break;
25156 case 0x02:
25157 switch (raw_type) {
25158 case 0x00:
25159 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "AP PM RAW");
25160 break;
25161 case 0x01:
25162 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-TIM RAW");
25163 break;
25164 case 0x02:
25165 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Omni RAW");
25166 break;
25167 case 0x03:
25168 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
25169 break;
25170 }
25171 break;
25172 case 0x03:
25173 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
25174 break;
25175 }
25176}
25177
25178static void s1g_raw_slot_duration_custom(char *result, uint16_t slot_def)
25179{
25180 snprintf(result, ITEM_LABEL_LENGTH240, "%u (%u uS)", slot_def, (500 + slot_def * 120));
25181}
25182
25183static int * const s1g_raw_control_headers[] = {
25184 &hf_ieee80211_s1g_raw_type,
25185 &hf_ieee80211_s1g_raw_type_options,
25186 &hf_ieee80211_s1g_raw_start_time_indication,
25187 &hf_ieee80211_s1g_raw_raw_group_indication,
25188 &hf_ieee80211_s1g_raw_channel_indication_preference,
25189 &hf_ieee80211_s1g_raw_periodic_raw_indication,
25190 NULL((void*)0)
25191};
25192
25193static int * const s1g_slot_def_8_bit[] = {
25194 &hf_ieee80211_s1g_slot_def_format_indication,
25195 &hf_ieee80211_s1g_slot_def_cross_slot_boundary,
25196 &hf_ieee80211_s1g_slot_def_slot_duration_count8,
25197 &hf_ieee80211_s1g_slot_def_num_slots6,
25198 NULL((void*)0)
25199};
25200
25201static int * const s1g_slot_def_11_bit[] = {
25202 &hf_ieee80211_s1g_slot_def_format_indication,
25203 &hf_ieee80211_s1g_slot_def_cross_slot_boundary,
25204 &hf_ieee80211_s1g_slot_def_slot_duration_count11,
25205 &hf_ieee80211_s1g_slot_def_num_slots3,
25206 NULL((void*)0)
25207};
25208
25209static int * const s1g_raw_group_fields[] = {
25210 &hf_ieee80211_s1g_raw_group_page_index,
25211 &hf_ieee80211_s1g_raw_group_start_aid,
25212 &hf_ieee80211_s1g_raw_group_end_aid,
25213 NULL((void*)0)
25214};
25215
25216static int * const s1g_raw_channel_indication_fields[] = {
25217 &hf_ieee80211_s1g_raw_ci_channel_activity_bitmap,
25218 &hf_ieee80211_s1g_raw_ci_max_trans_width,
25219 &hf_ieee80211_s1g_raw_ci_ul_activity,
25220 &hf_ieee80211_s1g_raw_ci_dl_activity,
25221 &hf_ieee80211_s1g_raw_ci_reserved,
25222 NULL((void*)0)
25223};
25224
25225static int
25226dissect_rps(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25227{
25228 proto_tree *raw_assignment_tree;
25229 proto_tree *assn_tree;
25230 proto_item *rati;
25231 int offset = 0;
25232 int idx = 0;
25233 uint8_t rps_len = tvb_reported_length_remaining(tvb, offset);
25234
25235 raw_assignment_tree = proto_tree_add_subtree(tree, tvb, offset, rps_len,
25236 ett_s1g_raw_assignment, NULL((void*)0),
25237 "RAW assignments");
25238
25239 while (tvb_reported_length_remaining(tvb, offset) > 0) {
25240
25241 assn_tree = proto_tree_add_subtree_format(raw_assignment_tree, tvb, offset, -1,
25242 ett_s1g_raw_assn_tree, &rati,
25243 "Assignment %d", idx);
25244
25245 uint8_t raw_control = tvb_get_uint8(tvb, offset);
25246 uint8_t raw_slot_def = tvb_get_uint8(tvb, offset + 1);
25247
25248 global_s1g_raw_type = raw_control & 0x03;
25249
25250 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
25251 hf_ieee80211_s1g_raw_control,
25252 ett_s1g_raw_control,
25253 s1g_raw_control_headers,
25254 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25255 offset += 1;
25256
25257 if (((raw_slot_def & 0x01) == 0x00) || (global_s1g_raw_type == 0x01)) {
25258 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
25259 hf_ieee80211_s1g_raw_slot_def,
25260 ett_s1g_raw_slot_def,
25261 s1g_slot_def_8_bit,
25262 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25263 } else {
25264 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
25265 hf_ieee80211_s1g_raw_slot_def,
25266 ett_s1g_raw_slot_def,
25267 s1g_slot_def_11_bit,
25268 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25269 }
25270
25271 offset += 2;
25272
25273 if (raw_control & RAW_START_TIME_INDICATION0x10) {
25274 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_start_time, tvb, offset, 1,
25275 ENC_NA0x00000000);
25276 offset += 1;
25277 }
25278
25279 if (raw_control & RAW_GROUP_INDICATION0x20) {
25280 uint32_t raw_group = tvb_get_letoh24(tvb, offset);
25281
25282 if (raw_group == 0) {
25283 proto_item *it = NULL((void*)0);
25284
25285 it = proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_group_subfield, tvb,
25286 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25287 proto_item_append_text(it, ": All STAs allowed access within the RAW");
25288 } else {
25289 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
25290 hf_ieee80211_s1g_raw_group_subfield,
25291 ett_s1g_raw_group_subfield,
25292 s1g_raw_group_fields,
25293 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25294 }
25295 offset += 3;
25296 }
25297
25298 if (raw_control & RAW_CHANNEL_INDICATION_PRESENCE0x40) {
25299 proto_tree_add_bitmask_with_flags(assn_tree, tvb, offset,
25300 hf_ieee80211_s1g_raw_channel_indication,
25301 ett_s1g_raw_channel_indication,
25302 s1g_raw_channel_indication_fields,
25303 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25304 offset += 2;
25305 }
25306
25307 if (raw_control & RAW_PERIODIC_RAW_INDICATION0x80) {
25308 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_periodicity, tvb,
25309 offset, 1, ENC_NA0x00000000);
25310 offset += 1;
25311 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_validity, tvb,
25312 offset, 1, ENC_NA0x00000000);
25313 offset += 1;
25314 proto_tree_add_item(assn_tree, hf_ieee80211_s1g_raw_praw_start_offset, tvb,
25315 offset, 1, ENC_NA0x00000000);
25316 offset += 1;
25317 }
25318
25319 idx += 1;
25320 }
25321 return offset;
25322}
25323
25324static int * const s1g_page_slice_headers[] = {
25325 &hf_ieee80211_s1g_page_slice_page_index,
25326 &hf_ieee80211_s1g_page_slice_page_slice_length,
25327 &hf_ieee80211_s1g_page_slice_page_slice_count,
25328 &hf_ieee80211_s1g_page_slice_block_offset,
25329 &hf_ieee80211_s1g_page_slice_tim_offset,
25330 &hf_ieee80211_s1g_page_slice_reserved,
25331 NULL((void*)0)
25332};
25333
25334static int
25335dissect_page_slice(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25336{
25337 int offset = 0;
25338 int len = 0;
25339
25340 proto_tree_add_item(tree, hf_ieee80211_s1g_page_slice_page_period, tvb,
25341 offset, 1, ENC_NA0x00000000);
25342 offset += 1;
25343
25344 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25345 hf_ieee80211_s1g_page_slice_control,
25346 ett_s1g_page_slice_control,
25347 s1g_page_slice_headers,
25348 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25349
25350 offset += 3;
25351
25352 len = tvb_reported_length_remaining(tvb, offset);
25353 if (len > 0) {
25354 proto_tree_add_item(tree, hf_ieee80211_s1g_page_slice_page_bitmap, tvb,
25355 offset, len, ENC_NA0x00000000);
25356 offset += len;
25357 }
25358
25359 return offset;
25360}
25361
25362#define AID_REQUEST_INTERVAL_PRESENT0x01 0x01
25363#define PER_STA_ADDRESS_PRESENT0x02 0x02
25364#define SERVICE_CHARACTERISTIC_PRESENT0x04 0x04
25365#define GROUP_ADDRESS_PRESENT0x20 0x20
25366
25367static int * const s1g_aid_request_mode_headers[] = {
25368 &hf_ieee80211_s1g_aid_request_interval_present,
25369 &hf_ieee80211_s1g_aid_request_per_sta_address_present,
25370 &hf_ieee80211_s1g_aid_request_service_characteristic_present,
25371 &hf_ieee80211_s1g_aid_request_non_tim_mode_switch,
25372 &hf_ieee80211_s1g_aid_request_tim_mode_switch,
25373 &hf_ieee80211_s1g_aid_request_group_address_present,
25374 &hf_ieee80211_s1g_aid_request_reserved,
25375 NULL((void*)0)
25376};
25377
25378static int * const s1g_aid_request_characteristic_headers[] = {
25379 &hf_ieee80211_s1g_aid_request_characteristic_sensor,
25380 &hf_ieee80211_s1g_aid_request_characteristic_offload,
25381 &hf_ieee80211_s1g_aid_request_characteristic_official_service,
25382 &hf_ieee80211_s1g_aid_request_characteristic_reserved,
25383 NULL((void*)0)
25384};
25385
25386static int
25387dissect_aid_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25388{
25389 int offset = 0;
25390 uint8_t mode = tvb_get_uint8(tvb, offset);
25391
25392 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25393 hf_ieee80211_s1g_aid_request_mode,
25394 ett_s1g_aid_request_mode,
25395 s1g_aid_request_mode_headers,
25396 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25397 offset += 1;
25398
25399 if (mode & AID_REQUEST_INTERVAL_PRESENT0x01) {
25400 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_request_interval, tvb,
25401 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25402 offset += 2;
25403 }
25404
25405 if (mode & PER_STA_ADDRESS_PRESENT0x02) {
25406 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_req_peer_sta_addr, tvb,
25407 offset, 6, ENC_NA0x00000000);
25408 offset += 6;
25409 }
25410
25411 if (mode & SERVICE_CHARACTERISTIC_PRESENT0x04) {
25412 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25413 hf_ieee80211_s1g_aid_request_characteristic,
25414 ett_s1g_aid_characteristic,
25415 s1g_aid_request_characteristic_headers,
25416 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25417 offset += 1;
25418 }
25419
25420 if (mode & GROUP_ADDRESS_PRESENT0x20) {
25421 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_req_group_addr, tvb, offset,
25422 6, ENC_NA0x00000000);
25423 offset += 6;
25424 }
25425
25426 return offset;
25427}
25428
25429static int
25430dissect_aid_response(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25431{
25432 int offset = 0;
25433
25434 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_group_aid, tvb,
25435 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25436 offset += 2;
25437
25438 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_switch_count,
25439 tvb, offset, 1, ENC_NA0x00000000);
25440 offset += 1;
25441
25442 proto_tree_add_item(tree, hf_ieee80211_s1g_aid_rsp_aid_response_interval,
25443 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25444 offset += 2;
25445
25446 return offset;
25447}
25448
25449static int * const s1g_sector_op_control_headers[] = {
25450 &hf_ieee80211_s1g_sector_op_sectorization_type,
25451 &hf_ieee80211_s1g_sector_op_period,
25452 &hf_ieee80211_s1g_sector_op_omni,
25453 NULL((void*)0)
25454};
25455
25456static int * const s1g_txop_sector_op_control_headers[] = {
25457 &hf_ieee80211_s1g_sector_op_sectorization_type_b16,
25458 &hf_ieee80211_s1g_sector_op_periodic_training_indicator,
25459 &hf_ieee80211_s1g_sector_op_training_period,
25460 &hf_ieee80211_s1g_sector_op_remaining_beacon_interval,
25461 &hf_ieee80211_s1g_sector_op_reserved_b16,
25462 NULL((void*)0)
25463};
25464
25465static const true_false_string sectorization_type_tfs = {
25466 "Reserved",
25467 "Group Sectorization Operation"
25468};
25469
25470static const true_false_string sectorization_omni_tfs = {
25471 "Omnidirectional",
25472 "Sectorized"
25473};
25474
25475static int
25476dissect_s1g_sector_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25477{
25478 int offset = 0;
25479 int len = 0;
25480 uint8_t control = tvb_get_uint8(tvb, offset);
25481
25482 if (control & 0x01) {
25483 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25484 hf_ieee80211_s1g_sector_op_control_16b,
25485 ett_s1g_sector_operation,
25486 s1g_txop_sector_op_control_headers,
25487 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25488
25489 offset += 2;
25490 } else {
25491 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25492 hf_ieee80211_s1g_sector_op_control,
25493 ett_s1g_sector_operation,
25494 s1g_sector_op_control_headers,
25495 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25496 offset += 1;
25497 }
25498
25499 /* Break this out more */
25500 len = tvb_reported_length_remaining(tvb, offset);
25501 proto_tree_add_item(tree, hf_ieee80211_s1g_sector_op_group_info, tvb,
25502 offset, len, ENC_NA0x00000000);
25503 offset += len;
25504
25505 return offset;
25506}
25507
25508static int
25509dissect_s1g_beacon_compatibility(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25510{
25511 int offset = 0;
25512
25513 proto_tree_add_item(tree, hf_ieee80211_s1g_beacon_compatibility_info, tvb,
25514 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25515 offset += 2;
25516
25517 proto_tree_add_item(tree, hf_ieee80211_s1g_beacon_interval, tvb, offset,
25518 2, ENC_LITTLE_ENDIAN0x80000000);
25519 offset += 2;
25520
25521 proto_tree_add_item(tree, hf_ieee80211_s1g_tsf_completion, tvb, offset,
25522 4, ENC_LITTLE_ENDIAN0x80000000);
25523 offset += 4;
25524
25525 return offset;
25526}
25527
25528static int
25529dissect_s1g_short_beacon_interval(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25530{
25531 int offset = 0;
25532
25533 proto_tree_add_item(tree, hf_ieee80211_s1g_short_beacon_interval, tvb,
25534 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25535 offset += 2;
25536
25537 return offset;
25538}
25539
25540static int
25541dissect_s1g_change_sequence(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25542{
25543 int offset = 0;
25544
25545 proto_tree_add_item(tree, hf_ieee80211_s1g_change_sequence, tvb, offset, 1,
25546 ENC_NA0x00000000);
25547 offset += 1;
25548
25549 return offset;
25550}
25551
25552static int
25553dissect_authentication_control(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25554{
25555 int offset = 0;
25556 uint16_t control_params = tvb_get_letohs(tvb, offset);
25557 proto_tree *auth_tree = NULL((void*)0);
25558
25559 if ((control_params & 0x0001) == 0) {
25560 auth_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
25561 ett_ieee80211_s1g_auth_control,
25562 NULL((void*)0),
25563 "Centralized Authentication Control Parameters");
25564 } else {
25565 auth_tree = proto_tree_add_subtree(tree, tvb, offset, 3,
25566 ett_ieee80211_s1g_auth_control,
25567 NULL((void*)0),
25568 "Distributed Authentication Control Parameters");
25569 }
25570
25571 if ((control_params & 0x0001) == 0) { /* This is all there should be here */
25572 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_control,
25573 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25574 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_deferral,
25575 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25576 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_reserved,
25577 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25578
25579 if ((control_params & 0x0002) == 0) { /* Deferral or not */
25580 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_thresh,
25581 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25582 } else {
25583 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_thresh_tus,
25584 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25585 }
25586 offset += 2;
25587 } else {
25588 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_control_control,
25589 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25590 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_slot_duration, tvb,
25591 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25592 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_max_trans_int, tvb,
25593 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25594 proto_tree_add_item(auth_tree, hf_ieee80211_s1g_auth_min_trans_int, tvb,
25595 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
25596 offset += 3;
25597 }
25598 return offset;
25599}
25600
25601static int
25602dissect_tsf_timer_accuracy(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25603{
25604 int offset = 0;
25605
25606 proto_tree_add_item(tree, hf_ieee80211_s1g_tsf_timer_accuracy, tvb, offset,
25607 1, ENC_NA0x00000000);
25608 offset += 1;
25609
25610 return offset;
25611}
25612
25613static int * const relay_control_headers[] = {
25614 &hf_ieee80211_s1g_relay_hierarchy_identifier,
25615 &hf_ieee80211_s1g_relay_no_more_relay_flag,
25616 NULL((void*)0)
25617};
25618
25619static const range_string relay_hierarchy_rstrs[] = {
25620 { 0, 0, "Root AP" },
25621 { 1, 1, "S1G Relay AP" },
25622 { 2, 127, "Reserved" },
25623 { 0, 0, NULL((void*)0) }
25624};
25625
25626static const true_false_string no_more_relay_flag_tfs = {
25627 "AP does not accept any requests for relaying",
25628 "AP does accept requests for relaying"
25629};
25630
25631static int
25632dissect_s1g_relay(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25633{
25634 int offset = 0;
25635 uint8_t relay_control = tvb_get_uint8(tvb, offset);
25636
25637 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25638 hf_ieee80211_s1g_relay_control,
25639 ett_s1g_relay_control,
25640 relay_control_headers,
25641 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25642 offset += 1;
25643 if ((relay_control & 0x7F) == 1) {
25644 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_rootap_bssid,
25645 tvb, offset, 6, ENC_NA0x00000000);
25646 offset += 6;
25647 }
25648
25649 return offset;
25650}
25651
25652static const true_false_string relay_activation_mode_tfs = {
25653 "Relay Activation Request",
25654 "Relay Activation Response"
25655};
25656
25657static const true_false_string relay_direction_tfs = {
25658 "Sent by an AP",
25659 "Sent by a non-AP STA"
25660};
25661
25662static unsigned relay_function_field;
25663
25664static void
25665enable_relay_function_custom(char *result, uint8_t enable_relay_function)
25666{
25667 switch (relay_function_field & 0x03) {
25668 case 0x00: /* Relay Activation Mode == 0 && Direction == 0 */
25669 if (enable_relay_function)
25670 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA activates its relay function");
25671 else
25672 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA terminates its relay function");
25673 break;
25674 case 0x01: /* Relay Activation Mode == 1 && Direction == 0 */
25675 if (enable_relay_function)
25676 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA requests to activate relay function");
25677 else
25678 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA requests to terminate relay function");
25679 break;
25680 case 0x02: /* Relay Activation Mode == 0 && Direction == 1 */
25681 if (enable_relay_function)
25682 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA is allowed to operate as a relay");
25683 else
25684 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "non-AP STA must not operate as a relay");
25685 break;
25686 case 0x03: /* Relay Activation Mode == 1 && Direction == 1 */
25687 if (enable_relay_function)
25688 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-AP STA can operate as a relay");
25689 else
25690 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Non-AP STA must terminate relay function");
25691 break;
25692 }
25693}
25694
25695static int
25696dissect_s1g_relay_activation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25697{
25698 int offset = 0;
25699 proto_tree *relay_activ = NULL((void*)0);
25700
25701 relay_function_field = tvb_get_uint8(tvb, offset);
25702
25703 relay_activ = proto_tree_add_subtree_format(tree, tvb, offset, 1,
25704 ett_s1g_relay_function,
25705 NULL((void*)0), "Relay Activation: 0x%0x",
25706 relay_function_field);
25707
25708 proto_tree_add_item(relay_activ,
25709 hf_ieee80211_s1g_relay_function_activation_mode, tvb,
25710 offset, 1, ENC_NA0x00000000);
25711 proto_tree_add_item(relay_activ, hf_ieee80211_s1g_relay_function_direction,
25712 tvb, offset, 1, ENC_NA0x00000000);
25713 proto_tree_add_item(relay_activ,
25714 hf_ieee80211_s1g_relay_function_enable_relay_function,
25715 tvb, offset, 1, ENC_NA0x00000000);
25716 proto_tree_add_item(relay_activ,
25717 hf_ieee80211_s1g_relay_function_stas_present_indic,
25718 tvb, offset, 1, ENC_NA0x00000000);
25719 proto_tree_add_item(relay_activ, hf_ieee80211_s1g_relay_function_reserved,
25720 tvb, offset, 1, ENC_NA0x00000000);
25721 offset += 1;
25722
25723 if (relay_function_field & 0x04) {
25724 proto_tree_add_item(tree, hf_ieee80211_s1g_number_of_stas, tvb, offset,
25725 1, ENC_NA0x00000000);
25726 offset += 1;
25727 }
25728
25729 return offset;
25730}
25731
25732static const true_false_string reachable_address_add_remove_tfs = {
25733 "STA joining the relay",
25734 "STA leaving the relay"
25735};
25736
25737static int
25738dissect_reachable_address(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25739{
25740 int offset = 0;
25741 proto_tree *reach_list = NULL((void*)0);
25742 uint8_t addr_count = 0, addr_num = 0;
25743
25744 proto_tree_add_item(tree, hf_ieee80211_s1g_initiator_mac_address, tvb,
25745 offset, 6, ENC_NA0x00000000);
25746 offset += 6;
25747
25748 addr_count = tvb_get_uint8(tvb, offset);
25749 proto_tree_add_item(tree, hf_ieee80211_s1g_address_count, tvb, offset, 1,
25750 ENC_NA0x00000000);
25751 offset++;
25752
25753 reach_list = proto_tree_add_subtree(tree, tvb, offset, 7 * addr_count,
25754 ett_ieee80211_s1g_addr_list,
25755 NULL((void*)0), "Reachable Addresses");
25756 while (addr_count != 0) {
25757 proto_tree *reach_addr = NULL((void*)0);
25758
25759 reach_addr = proto_tree_add_subtree_format(reach_list, tvb, offset, 7,
25760 ett_ieee80211_s1g_reach_addr,
25761 NULL((void*)0), "Reachable Address %u", addr_num);
25762
25763 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_add_remove,
25764 tvb, offset, 1, ENC_NA0x00000000);
25765 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_relay_capable,
25766 tvb, offset, 1, ENC_NA0x00000000);
25767 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_reserved,
25768 tvb, offset, 1, ENC_NA0x00000000);
25769 offset += 1;
25770
25771 proto_tree_add_item(reach_addr, hf_ieee80211_s1g_reachable_mac_address,
25772 tvb, offset, 6, ENC_NA0x00000000);
25773 offset += 6;
25774
25775 addr_num++;
25776 addr_count--;
25777 }
25778 return offset;
25779}
25780
25781static int * const relay_discovery_control_headers[] = {
25782 &hf_ieee80211_s1g_min_data_rate_included,
25783 &hf_ieee80211_s1g_mean_data_rate_included,
25784 &hf_ieee80211_s1g_max_data_rate_included,
25785 &hf_ieee80211_s1g_delay_and_min_phy_rate,
25786 &hf_ieee80211_s1g_information_not_available,
25787 &hf_ieee80211_s1g_relay_discovery_reserved,
25788 NULL((void*)0)
25789};
25790
25791static int
25792dissect_s1g_relay_discovery(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25793{
25794 int offset = 0;
25795 uint8_t relay_discovery_control = tvb_get_uint8(tvb, offset);
25796
25797 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25798 hf_ieee80211_s1g_relay_discovery_control,
25799 ett_s1g_relay_discovery_control,
25800 relay_discovery_control_headers,
25801 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25802 offset += 1;
25803
25804 if (relay_discovery_control & 0x01) {
25805 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_min, tvb,
25806 offset, 1, ENC_NA0x00000000);
25807 offset += 1;
25808 }
25809
25810 if (relay_discovery_control & 0x02) {
25811 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_mean, tvb,
25812 offset, 1, ENC_NA0x00000000);
25813 offset += 1;
25814 }
25815
25816 if (relay_discovery_control & 0x04) {
25817 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_ul_max, tvb,
25818 offset, 1, ENC_NA0x00000000);
25819 offset += 1;
25820 }
25821
25822 if (relay_discovery_control & 0x01) {
25823 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_min, tvb,
25824 offset, 1, ENC_NA0x00000000);
25825 offset += 1;
25826 }
25827
25828 if (relay_discovery_control & 0x02) {
25829 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_mean, tvb,
25830 offset, 1, ENC_NA0x00000000);
25831 offset += 1;
25832 }
25833
25834 if (relay_discovery_control & 0x04) {
25835 proto_tree_add_item(tree, hf_ieee80211_s1g_relay_control_dl_max, tvb,
25836 offset, 1, ENC_NA0x00000000);
25837 offset += 1;
25838 }
25839
25840 if (relay_discovery_control & 0x08) {
25841
25842 }
25843
25844 return offset;
25845}
25846
25847static int
25848dissect_aid_announcement(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25849{
25850 int offset = 0;
25851 int entry_no = 0;
25852
25853 /*
25854 * There should be 8N bytes ...
25855 */
25856 while (tvb_reported_length_remaining(tvb, offset) >= 8) {
25857 proto_tree *aid_entry = NULL((void*)0);
25858
25859 aid_entry = proto_tree_add_subtree_format(tree, tvb, offset, 8,
25860 ett_ieee80211_s1g_aid_entry,
25861 NULL((void*)0), "AID Entry %d", entry_no++);
25862 proto_tree_add_item(aid_entry, hf_ieee80211_s1g_aid_entry_mac_addr,
25863 tvb, offset, 6, ENC_NA0x00000000);
25864 offset += 6;
25865
25866 proto_tree_add_item(aid_entry, hf_ieee80211_s1g_aid_entry_assoc_id,
25867 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25868 offset += 2;
25869 }
25870
25871 /* TODO: EI if bytes remaining. */
25872
25873 return offset;
25874}
25875
25876static int * const subfield_0[] = {
25877 &hf_ieee80211_pv1_probe_response_req_full_ssid,
25878 &hf_ieee80211_pv1_probe_response_req_next_tbtt,
25879 &hf_ieee80211_pv1_probe_response_req_access_network_option,
25880 &hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility,
25881 &hf_ieee80211_pv1_probe_response_req_supported_rates,
25882 &hf_ieee80211_pv1_probe_response_req_s1g_capability,
25883 &hf_ieee80211_pv1_probe_response_req_s1g_operation,
25884 &hf_ieee80211_pv1_probe_response_req_rsn,
25885 NULL((void*)0)
25886};
25887
25888static int
25889dissect_pv1_probe_response_option(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25890{
25891 int offset = 0;
25892
25893 /*
25894 * TODO: Check that the number of bytes matches what the probe response
25895 * group bitmap says should be there.
25896 */
25897 if (tvb_reported_length_remaining(tvb, offset) == 1) {
25898 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25899 hf_ieee80211_s1g_probe_resp_subfield_0,
25900 ett_s1g_probe_resp_subfield_0,
25901 subfield_0,
25902 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25903 offset += 1;
25904 } else if (tvb_reported_length_remaining(tvb, offset) > 1) {
25905 uint8_t opt_bitmaps = tvb_get_uint8(tvb, offset);
25906
25907 proto_tree_add_item(tree, hf_ieee80211_s1g_probe_response_group_bitmap,
25908 tvb, offset, 1, ENC_NA0x00000000);
25909 offset += 1;
25910 if (opt_bitmaps & 0x01) { /* Default Bitmap */
25911 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
25912 hf_ieee80211_s1g_probe_resp_subfield_0,
25913 ett_s1g_probe_resp_subfield_0,
25914 subfield_0,
25915 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
25916 offset += 1;
25917 }
25918 }
25919
25920 return offset;
25921}
25922
25923static void
25924s1g_max_awake_duration_custom(char *result, uint16_t duration)
25925{
25926 if (duration == 0)
25927 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "No limit applies");
25928 else
25929 snprintf(result, ITEM_LABEL_LENGTH240, "%d uS", (int)duration * 40);
25930}
25931
25932static void
25933s1g_recovery_time_duration_custom(char *result, uint16_t duration)
25934{
25935 snprintf(result, ITEM_LABEL_LENGTH240, "%d uS", (int)duration * 40);
25936}
25937
25938static int
25939dissect_el_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25940{
25941 int offset = 0;
25942
25943 proto_tree_add_item(tree, hf_ieee80211_s1g_el_op_max_awake_duration, tvb,
25944 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25945 offset += 2;
25946
25947 proto_tree_add_item(tree, hf_ieee80211_s1g_el_op_recovery_time_duration, tvb,
25948 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
25949 offset += 2;
25950
25951 return offset;
25952}
25953
25954static int
25955dissect_sectorized_group_id_list(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
25956{
25957 int offset = 0;
25958 int len = tvb_reported_length_remaining(tvb, offset);
25959
25960 /* Break this out some more */
25961 proto_tree_add_item(tree, hf_ieee80211_s1g_sectorized_group_id_list, tvb,
25962 offset, len, ENC_NA0x00000000);
25963 offset += len;
25964
25965 return offset;
25966}
25967
25968static int * const channel_width_fields[] = {
25969 &hf_ieee80211_s1g_primary_channel_width,
25970 &hf_ieee80211_s1g_bss_operating_channel_width,
25971 &hf_ieee80211_s1g_primary_channel_location,
25972 &hf_ieee80211_s1g_reserved_b6,
25973 &hf_ieee80211_s1g_mcs10_use,
25974 NULL((void*)0)
25975};
25976
25977static const value_string one_mhz_primary_channel_vals[] = {
25978 { 0, "1 MHz BSS operating channel width" },
25979 { 1, "2 MHz BSS operating channel width" },
25980 { 3, "4 MHz BSS operating channel width" },
25981 { 7, "8 MHz BSS operating channel width" },
25982 { 15, "16 MHz BSS operating channel width" },
25983 { 0, NULL((void*)0) },
25984};
25985
25986static const value_string two_mhz_primary_channel_vals[] = {
25987 { 1, "2 MHz BSS operating channel width" },
25988 { 3, "4 MHz BSS operating channel width" },
25989 { 7, "8 MHz BSS operating channel width" },
25990 { 15, "16 MHz BSS operating channel width" },
25991 { 0, NULL((void*)0) },
25992};
25993
25994static const value_string primary_channel_width_vals[] = {
25995 { 0, "2MHz BSS Primary Channel Width" },
25996 { 1, "1MHz BSS Primary Channel Width" },
25997 { 0, NULL((void*)0) }
25998};
25999
26000static const value_string one_mhz_primary_channel_location_vals[] = {
26001 { 0, "Located on lower side of 2MHz primary channel" },
26002 { 1, "Located on upper side of 2MHz primary channel" },
26003 { 0, NULL((void*)0) }
26004};
26005
26006static const value_string mcs10_use_vals[] = {
26007 { 0, "Use of MCS10 possible" },
26008 { 1, "Use of MCS10 not recommended" },
26009 { 0, NULL((void*)0) }
26010};
26011
26012static int
26013dissect_s1g_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26014{
26015 int offset = 0;
26016 proto_tree *s1g_op_info = NULL((void*)0);
26017 proto_item *cw_item = NULL((void*)0);
26018 uint8_t chan_width = 0;
26019
26020 s1g_op_info = proto_tree_add_subtree(tree, tvb, offset, 4,
26021 ett_s1g_operation_info,
26022 NULL((void*)0), "S1G Operation Information");
26023
26024 chan_width = tvb_get_uint8(tvb, offset);
26025 cw_item = proto_tree_add_bitmask_with_flags(s1g_op_info, tvb, offset,
26026 hf_ieee80211_s1g_channel_width,
26027 ett_s1g_channel_width,
26028 channel_width_fields,
26029 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26030 if (chan_width & 0x01) {
26031 proto_item_append_text(cw_item, ": %s",
26032 val_to_str(pinfo->pool, (chan_width >> 1) & 0x0F,
26033 one_mhz_primary_channel_vals,
26034 "Invalid BSS Channel Width value"));
26035 } else {
26036 proto_item_append_text(cw_item, ": %s",
26037 val_to_str(pinfo->pool, (chan_width >> 1) & 0x0F,
26038 two_mhz_primary_channel_vals,
26039 "Invalid BSS Channel Width value"));
26040 }
26041 offset += 1;
26042
26043 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_operating_class, tvb,
26044 offset, 1, ENC_NA0x00000000);
26045 offset += 1;
26046
26047 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_primary_channel_number, tvb,
26048 offset, 1, ENC_NA0x00000000);
26049 offset += 1;
26050
26051 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_channel_center_frequency,
26052 tvb, offset, 1, ENC_NA0x00000000);
26053 offset += 1;
26054
26055 proto_tree_add_item(s1g_op_info, hf_ieee80211_s1g_basic_mcs_and_nss_set,
26056 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26057 offset += 2;
26058
26059 return offset;
26060}
26061
26062#define HEADER_COMP_STORE_A30x02 0x02
26063#define HEADER_COMP_STORE_A40x04 0x04
26064#define HEADER_COMP_CCMP_UPDATE0x08 0x08
26065
26066static int * const header_compression_control_headers[] = {
26067 &hf_ieee80211_s1g_header_comp_req_resp,
26068 &hf_ieee80211_s1g_header_comp_store_a3,
26069 &hf_ieee80211_s1g_header_comp_store_a4,
26070 &hf_ieee80211_s1g_header_comp_ccmp_update_present,
26071 &hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported,
26072 &hf_ieee80211_s1g_header_comp_reserved,
26073 NULL((void*)0)
26074};
26075
26076static int
26077dissect_header_compression(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26078{
26079 int offset = 0;
26080 uint8_t control = tvb_get_uint8(tvb, offset);
26081
26082 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
26083 hf_ieee80211_s1g_header_comp_control,
26084 ett_s1g_header_comp_control,
26085 header_compression_control_headers,
26086 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26087 offset += 1;
26088
26089 if (control & HEADER_COMP_STORE_A30x02) {
26090 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_a3, tvb,
26091 offset, 6, ENC_NA0x00000000);
26092 offset += 6;
26093 }
26094
26095 if (control & HEADER_COMP_STORE_A40x04) {
26096 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_a4, tvb,
26097 offset, 6, ENC_NA0x00000000);
26098 offset += 6;
26099 }
26100
26101 /* TODO: Break this out */
26102 if (control & HEADER_COMP_CCMP_UPDATE0x08) {
26103 proto_tree_add_item(tree, hf_ieee80211_s1g_header_comp_ccmp_update, tvb,
26104 offset, 5, ENC_NA0x00000000);
26105 offset += 5;
26106 }
26107
26108 return offset;
26109}
26110
26111static const value_string sst_channel_unit_vals[] = {
26112 { 0, "Channel Width Unit is 2 MHz" },
26113 { 1, "Channel Width Unit is 1 MHz" },
26114 { 0, NULL((void*)0) }
26115};
26116
26117static int
26118dissect_sst_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26119{
26120 int offset = 0;
26121
26122 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_enabled_channel_bitmap, tvb,
26123 offset, 1, ENC_NA0x00000000);
26124 offset += 1;
26125
26126 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_primary_channel_offset, tvb,
26127 offset, 1, ENC_NA0x00000000);
26128 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_channel_unit, tvb, offset,
26129 1, ENC_NA0x00000000);
26130 proto_tree_add_item(tree, hf_ieee80211_s1g_sst_reserved, tvb, offset, 1,
26131 ENC_NA0x00000000);
26132 offset += 1;
26133
26134 return offset;
26135}
26136
26137static int
26138dissect_max_away_duration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26139{
26140 int offset = 0;
26141
26142 proto_tree_add_item(tree, hf_ieee80211_s1g_max_away_duration, tvb, offset,
26143 2, ENC_LITTLE_ENDIAN0x80000000);
26144 offset += 2;
26145
26146 return offset;
26147}
26148
26149static int
26150dissect_mcs_set(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, int offset, bool_Bool basic, bool_Bool vendorspecific)
26151{
26152 proto_item *ti;
26153 proto_tree *mcs_tree, *bit_tree;
26154 uint8_t rx_nss, tx_nss; /* 0-4 for HT and 0-8 for VHT*/
26155 uint32_t value_mcs_0_31, value_mcs_32_52, value_mcs_53_76;
26156 uint16_t tx_mcs_set;
26157 rx_nss = tx_nss = 8;
26158 /* 16 byte Supported MCS set */
26159 if (vendorspecific)
26160 {
26161 ti = proto_tree_add_item(tree, hf_ieee80211_mcsset_vs, tvb, offset, 16, ENC_NA0x00000000);
26162 } else
26163 {
26164 ti = proto_tree_add_item(tree, hf_ieee80211_mcsset, tvb, offset, 16, ENC_NA0x00000000);
26165 }
26166 proto_item_append_text(ti, ": %s", basic ? "Basic MCS Set" : "MCS Set");
26167 mcs_tree = proto_item_add_subtree(ti, ett_mcsset_tree);
26168
26169 /* Rx MCS Bitmask */
26170 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_rx_bitmask, tvb, offset, 10, ENC_NA0x00000000);
26171 bit_tree = proto_item_add_subtree(ti, ett_mcsbit_tree);
26172
26173 /* Bits 0 - 31 */
26174 value_mcs_0_31 = tvb_get_letohl(tvb, offset);
26175
26176 /* Handle all zeroes/ff's case..*/
26177 if (value_mcs_0_31 != 0x0)
26178 {
26179 if (!(value_mcs_0_31 & (0xffffff00))) {
26180 /*
26181 * At least one MCS from 0-7 is supported, but no MCS from 8-31 are
26182 * supported, so only 1 spatial stream is supported.
26183 */
26184 rx_nss = 0;
26185 } else if (!(value_mcs_0_31 & (0xffff0000))) {
26186 /*
26187 * At least one MCS from 8-15 is supported, but no MCS from 16-31 are
26188 * supported, so only 2 spatial streams are supported.
26189 */
26190 rx_nss = 1;
26191 } else if (!(value_mcs_0_31 & (0xff000000))) {
26192 /*
26193 * At least one MCS from 16-23 is supported, but no MCS from 24-31 are
26194 * supported, so only 3 spatial streams are supported.
26195 */
26196 rx_nss = 2;
26197 } else {
26198 /*
26199 * At least one MCS from 24-31 is supported, so 4 spatial streams
26200 * are supported.
26201 */
26202 rx_nss = 3;
26203 }
26204 }
26205
26206 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_0to7, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26207 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_8to15, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26208 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_16to23, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26209 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_24to31, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26210 offset += 4;
26211
26212 /* Should be we check UEQM Supported?*/
26213 /* Bits 32 - 52 */
26214 value_mcs_32_52 = tvb_get_letohl(tvb, offset);
26215 if (!(value_mcs_32_52 & (0x1ffffe))) {
26216 /*
26217 * MCS 33-52 aren't supported, so the number of spatial streams we get
26218 * from whichever MCSes from 0-31 that we support is the total number
26219 * of spatial streams we support.
26220 */
26221 ;
26222 } else if (!(value_mcs_32_52 & (0x1fff80))) {
26223 /*
26224 * At least one MCS from 33-38 is supported, but no MCS from 39-52 is
26225 * supported, so we have at least 2 spatial streams, but none of the
26226 * MCSs in that range give us any more.
26227 */
26228 rx_nss = MAX(1, rx_nss)(((1) > (rx_nss)) ? (1) : (rx_nss));
26229 } else {
26230 /*
26231 * At least one MCS from 39-52 is supported, so we have at least 3
26232 * spatial streams.
26233 */
26234 rx_nss = MAX(2, rx_nss)(((2) > (rx_nss)) ? (2) : (rx_nss));
26235 }
26236
26237 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_32, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26238 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_33to38, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26239 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_39to52, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26240 offset += 2;
26241
26242 /* Bits 53 - 76 */
26243 value_mcs_53_76 = tvb_get_letohl(tvb, offset);
26244 if ((value_mcs_53_76 & (0x1fffffe0))) {
26245 /*
26246 * At least one MCS from 53-76 is supported, so we have at least 4
26247 * spatial streams.
26248 */
26249 rx_nss = MAX(3, rx_nss)(((3) > (rx_nss)) ? (3) : (rx_nss));
26250 }
26251
26252 proto_tree_add_item(bit_tree, hf_ieee80211_mcsset_rx_bitmask_53to76, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
26253 offset += 4;
26254
26255 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_highest_data_rate, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26256 offset += 2;
26257
26258 /* Follow table 8-126 from 802.11-2012 */
26259 tx_mcs_set = tvb_get_letohs(tvb, offset);
26260
26261 if (!(tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
26262 {
26263 /* TX MCS Set is not defined
26264 * so there is no interpretation for Max Tx Spatial Streams
26265 */
26266 tx_nss = 4; /* Not Defined*/
26267 }
26268
26269 if ((tx_mcs_set & 0x0001) && !(tx_mcs_set & 0x0002))
26270 {
26271 /* TX MCS Set is defined to be equal to Rx MCS Set
26272 * So, get the Max Spatial Streams from Rx
26273 * MCS set
26274 */
26275 tx_nss = rx_nss;
26276 }
26277 proto_item_append_text(ti, ": %s", val_to_str(pinfo->pool, rx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
26278
26279 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_mcs_set_defined, tvb, offset, 1,
26280 ENC_LITTLE_ENDIAN0x80000000);
26281 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal, tvb, offset, 1,
26282 ENC_LITTLE_ENDIAN0x80000000);
26283 ti = proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_max_spatial_streams, tvb, offset, 1,
26284 ENC_LITTLE_ENDIAN0x80000000);
26285 proto_item_append_text(ti, ", %s", val_to_str(pinfo->pool, tx_nss, mcsset_tx_max_spatial_streams_flags, "Reserved:%d" ) );
26286 proto_tree_add_item(mcs_tree, hf_ieee80211_mcsset_tx_unequal_modulation, tvb, offset, 1,
26287 ENC_LITTLE_ENDIAN0x80000000);
26288 offset += 1;
26289
26290 offset += 3;
26291 return offset;
26292}
26293
26294/* 802.11n - HT Operation IE */
26295static int
26296dissect_ht_operation_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26297{
26298 int tag_len = tvb_reported_length(tvb);
26299 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26300 int offset = 0;
26301 static int * const ieee80211_ht_operation_info1_field[] = {
26302 &hf_ieee80211_ht_operation_info_secondary_channel_offset,
26303 &hf_ieee80211_ht_operation_info_sta_channel_width,
26304 &hf_ieee80211_ht_operation_info_rifs_mode,
26305 &hf_ieee80211_ht_operation_info_reserved_b4_b7,
26306 NULL((void*)0)
26307 };
26308
26309 static int * const ieee80211_ht_operation_info2_field[] = {
26310 &hf_ieee80211_ht_operation_info_protection,
26311 &hf_ieee80211_ht_operation_info_non_greenfield_sta_present,
26312 &hf_ieee80211_ht_operation_info_reserved_b11,
26313 &hf_ieee80211_ht_operation_info_obss_non_ht_stas_present,
26314 &hf_ieee80211_ht_operation_info_channel_center_freq_seg_2,
26315 &hf_ieee80211_ht_operation_info_reserved_b21_b23,
26316 NULL((void*)0)
26317 };
26318
26319 static int * const ieee80211_ht_operation_info3_field[] = {
26320 &hf_ieee80211_ht_operation_info_reserved_b24_b29,
26321 &hf_ieee80211_ht_operation_info_dual_beacon,
26322 &hf_ieee80211_ht_operation_info_dual_cts_protection,
26323 &hf_ieee80211_ht_operation_info_stbc_beacon,
26324 &hf_ieee80211_ht_operation_info_reserved_b33_b39,
26325 NULL((void*)0)
26326 };
26327
26328 if (tag_len < 22) {
26329 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26330 "HT Operation IE content length %u wrong, must be at least 22 bytes", tag_len);
26331 return 1;
26332 }
26333
26334 proto_tree_add_item(tree, hf_ieee80211_ht_operation_primary_channel, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26335 offset += 1;
26336
26337 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter1,
26338 ett_ht_operation_info_delimiter1_tree, ieee80211_ht_operation_info1_field,
26339 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26340 offset += 1;
26341
26342
26343 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter2,
26344 ett_ht_operation_info_delimiter2_tree, ieee80211_ht_operation_info2_field,
26345 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26346 offset += 2;
26347
26348 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_operation_info_delimiter3,
26349 ett_ht_operation_info_delimiter3_tree, ieee80211_ht_operation_info3_field,
26350 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26351 offset += 2;
26352
26353 /* Basic HT-MCS Set present in Beacon, Probe Response, Mesh Peering Open and Mesh Peering
26354 * Confirm frames. Otherwise reserved.
26355 */
26356 if ((field_data->ftype && (field_data->ftype == MGT_BEACON0x08 || field_data->ftype == MGT_PROBE_RESP0x05)) ||
26357 (field_data->sanity_check && field_data->sanity_check->ampe_frame &&
26358 (field_data->sanity_check->ampe_frame == SELFPROT_ACTION_MESH_PEERING_OPEN1 ||
26359 field_data->sanity_check->ampe_frame == SELFPROT_ACTION_MESH_PEERING_CONFIRM2))) {
26360 offset = dissect_mcs_set(tree, pinfo, tvb, offset, true1, false0);
26361 } else {
26362 proto_tree_add_item(tree, hf_ieee80211_ht_operation_mcsset_reserved,
26363 tvb, offset, 16, ENC_NA0x00000000);
26364 offset += 16;
26365 }
26366
26367 return offset;
26368}
26369
26370static int
26371dissect_wapi_param_set(tvbuff_t *tvb, packet_info *pinfo,
26372 proto_tree *tree, int offset, uint32_t tag_len, proto_item *ti_len,
26373 proto_item *ti, int ftype)
26374{
26375 /* Parse the WAPI Parameter Set IE Here*/
26376 proto_item *item;
26377 proto_tree *subtree;
26378 uint16_t loop_cnt, version, akm_cnt = 1, ucast_cnt = 1, bkid_cnt = 1;
26379 uint8_t akm_suite_type = 0, ucast_cipher_type = 0, mcast_cipher_type = 0;
26380 static int * const ieee80211_tag_wapi_param_set[] = {
26381 &hf_ieee80211_tag_wapi_param_set_capab_preauth,
26382 &hf_ieee80211_tag_wapi_param_set_capab_rsvd,
26383 NULL((void*)0)
26384 };
26385
26386 proto_tree_add_item_ret_uint16(tree, hf_ieee80211_tag_wapi_param_set_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &version);
26387 offset += 2;
26388
26389 /*MIN: 2 + (2+4)+ (2+4) + 4 + 2 + 0 (BKID CNT and LIST) =20*/
26390 if (tag_len < 20) {
26391 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
26392 "tag_len is %d, it's neither WAPI not BSS-AC-Access-Delay", tag_len);
26393 return offset;
26394 }
26395
26396 if (version != 1) {
26397 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
26398 "Version of WAPI protocol is %d, must be = 1", version);
26399 return offset;
26400 }
26401
26402 /* AKM Suites: list can't be 0*/
26403 akm_cnt = tvb_get_letohs(tvb, offset);
26404 item = proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_akm_suite_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26405 offset += 2;
26406 if (akm_cnt != 0) {
26407 proto_item_append_text(ti, " : AKM Suite List:");
26408 for (loop_cnt = 0; loop_cnt < akm_cnt; loop_cnt++) {
26409 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_akm_tree);
26410 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26411 offset += 3;
26412 proto_tree_add_item_ret_uint8(subtree, hf_ieee80211_tag_wapi_param_set_akm_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &akm_suite_type);
26413 offset += 1;
26414 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(pinfo->pool, akm_suite_type,
26415 ieee80211_wapi_suite_type_short, "Reserved: %d"));
26416 }
26417 proto_item_append_text(ti, " /");
26418 } else {
26419 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of AKM suites is 0, must be min 1");
26420 return offset;
26421
26422 }
26423 /* Unicast Cipher Suites: list can't be 0*/
26424 item = proto_tree_add_item_ret_uint16(tree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
26425 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &ucast_cnt);
26426 offset += 2;
26427 if (ucast_cnt != 0) {
26428 proto_item_append_text(ti, " Unicast Cipher List:");
26429 for (loop_cnt = 0; loop_cnt < ucast_cnt; loop_cnt++) {
26430 subtree = proto_item_add_subtree(item, ett_tag_wapi_param_set_ucast_tree);
26431 proto_tree_add_item(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26432 offset += 3;
26433 proto_tree_add_item_ret_uint8(subtree, hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &ucast_cipher_type);
26434 offset += 1;
26435 proto_item_append_text(ti, " (%d,%s)", loop_cnt+1, val_to_str(pinfo->pool, ucast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
26436 }
26437 proto_item_append_text(ti, " /");
26438 } else {
26439 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length, "Number of Unicast Cipher suites is 0, must be min 1");
26440 return offset;
26441
26442 }
26443
26444 /* Multicast Cipher Suites*/
26445 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
26446 offset += 3;
26447 mcast_cipher_type = tvb_get_uint8(tvb, offset);
26448 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26449 offset += 1;
26450 proto_item_append_text(ti, " Multicast Cipher: %s", val_to_str(pinfo->pool, mcast_cipher_type, ieee80211_wapi_cipher_type, "Reserved: %d"));
26451
26452 /* WAPI capability */
26453 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_wapi_param_set_capab,
26454 ett_tag_wapi_param_set_preauth_tree, ieee80211_tag_wapi_param_set,
26455 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26456 offset += 2;
26457
26458 /* BKID List: The list can be 0
26459 * Applicable only for assoc/re-assoc
26460 */
26461 if (ftype == MGT_ASSOC_REQ0x00 || ftype == MGT_REASSOC_REQ0x02 ) {
26462 bkid_cnt = tvb_get_letohs(tvb, offset);
26463 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26464 offset += 2;
26465 if (bkid_cnt != 0) {
26466 for (loop_cnt = 0; loop_cnt < bkid_cnt; loop_cnt++) {
26467 proto_tree_add_item(tree, hf_ieee80211_tag_wapi_param_set_bkid_list, tvb, offset, 16, ENC_NA0x00000000);
26468 offset += 16;
26469 }
26470 }
26471 }
26472 return offset;
26473}
26474
26475static int * const ieee80211_bss_max_idle_options[] = {
26476 &hf_ieee80211_tag_bss_max_idle_options_protected,
26477 &hf_ieee80211_tag_bss_idle_options_reserved,
26478 NULL((void*)0)
26479};
26480
26481static int
26482dissect_bss_max_idle_period(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26483{
26484 int offset = 0;
26485
26486 proto_tree_add_item(tree, hf_ieee80211_tag_bss_max_idle_period,
26487 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26488 offset += 2;
26489
26490 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
26491 hf_ieee80211_tag_bss_max_idle_options,
26492 ett_max_idle_period_options,
26493 ieee80211_bss_max_idle_options,
26494 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26495 offset++;
26496
26497 return offset;
26498}
26499
26500enum tfs_request_subelem_id {
26501 TFS_REQ_SUBELEM_TFS = 1,
26502 TFS_REQ_SUBELEM_VENDOR_SPECIFIC = 221
26503};
26504
26505static const value_string tfs_request_subelem_ids[] = {
26506 { TFS_REQ_SUBELEM_TFS, "TFS subelement" },
26507 { TFS_REQ_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
26508 { 0, NULL((void*)0) }
26509};
26510
26511static int
26512dissect_tfs_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26513{
26514 int tag_len = tvb_reported_length(tvb);
26515 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26516 int offset = 0;
26517 const uint8_t ids[] = {
26518 1, /* TFS Subelement */
26519 TAG_VENDOR_SPECIFIC_IE221
26520 };
26521
26522 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_id,
26523 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26524 offset++;
26525 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_delete_after_match,
26526 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26527 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_ac_notify,
26528 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26529 offset++;
26530 if (offset + 1 >= tag_len) {
26531 expert_add_info_format(pinfo, tree, &ei_ieee80211_missing_data,
26532 "No TFS Request subelements in TFS Request");
26533 return tvb_captured_length(tvb);
26534 }
26535
26536 while (offset + 1 < tag_len) {
26537 uint8_t id, len;
26538 int s_offset, s_end;
26539
26540 id = tvb_get_uint8(tvb, offset);
26541 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_id,
26542 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26543 offset++;
26544 len = tvb_get_uint8(tvb, offset);
26545 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem_len,
26546 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26547 offset++;
26548 if (offset + len > tag_len) {
26549 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
26550 "Not enough data for TFS Request subelement");
26551 return tvb_captured_length(tvb);
26552 }
26553 switch (id) {
26554 case TFS_REQ_SUBELEM_TFS:
26555 s_offset = offset;
26556 s_end = offset + len;
26557 while (s_offset < s_end) {
26558 /* TODO 1 is interpreted as TAG_SUPP_RATES, fix this! */
26559 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));
26560 if (tlen==0)
26561 break;
26562 s_offset += tlen;
26563 }
26564 break;
26565 default:
26566 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_request_subelem,
26567 tvb, offset, len, ENC_NA0x00000000);
26568 break;
26569 }
26570 offset += len;
26571 }
26572
26573 if (offset < tag_len) {
26574 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
26575 tvb, offset, tag_len - offset, "Extra data after TFS Subelements");
26576 }
26577
26578 return tvb_captured_length(tvb);
26579}
26580
26581enum tfs_response_subelem_id {
26582 TFS_RESP_SUBELEM_TFS_STATUS = 1,
26583 TFS_RESP_SUBELEM_TFS = 2,
26584 TFS_RESP_SUBELEM_VENDOR_SPECIFIC = 221
26585};
26586
26587static const value_string tfs_response_subelem_ids[] = {
26588 { TFS_RESP_SUBELEM_TFS_STATUS, "TFS Status subelement" },
26589 { TFS_RESP_SUBELEM_TFS, "TFS subelement" },
26590 { TFS_RESP_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific subelement" },
26591 { 0, NULL((void*)0) }
26592};
26593
26594static int
26595dissect_tfs_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26596{
26597 int tag_len = tvb_reported_length(tvb);
26598 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26599 int offset = 0;
26600 const uint8_t ids[] = {
26601 1, /* TFS Status subelement*/
26602 2, /* TFS subelement */
26603 TAG_VENDOR_SPECIFIC_IE221
26604 };
26605
26606 while (offset + 3 <= tag_len) {
26607 uint8_t id, len;
26608 int s_offset, s_end;
26609
26610 id = tvb_get_uint8(tvb, offset);
26611 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_id,
26612 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26613 offset++;
26614 len = tvb_get_uint8(tvb, offset);
26615 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem_len,
26616 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26617 offset++;
26618 if (offset + len > tag_len) {
26619 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
26620 "Not enough data for TFS Request subelement");
26621 return tvb_captured_length(tvb);
26622 }
26623 switch (id) {
26624 case TFS_RESP_SUBELEM_TFS_STATUS:
26625 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_status,
26626 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26627 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_id,
26628 tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
26629 break;
26630 case TFS_RESP_SUBELEM_TFS:
26631 s_offset = offset;
26632 s_end = offset + len;
26633 while (s_offset < s_end) {
26634 /* TODO Element IDs 1 and 2 are misinterpreted! */
26635 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));
26636 if (tlen==0)
26637 break;
26638 s_offset += tlen;
26639 }
26640 break;
26641 default:
26642 proto_tree_add_item(tree, hf_ieee80211_tag_tfs_response_subelem,
26643 tvb, offset, len, ENC_NA0x00000000);
26644 break;
26645 }
26646
26647 offset += len;
26648 }
26649
26650 if (offset < tag_len) {
26651 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
26652 tvb, offset, tag_len - offset, "Extra data after TFS Subelements");
26653 }
26654
26655 return tvb_captured_length(tvb);
26656}
26657
26658static const value_string wnm_sleep_mode_action_types[] = {
26659 { 0, "Enter WNM-Sleep Mode" },
26660 { 1, "Exit WNM-Sleep Mode" },
26661 { 0, NULL((void*)0) }
26662};
26663
26664static const value_string wnm_sleep_mode_response_status_vals[] = {
26665 { 0, "Enter/Exit WNM-Sleep Mode Accept" },
26666 { 1, "Exit WNM-Sleep Mode Accept, GTK/IGTK update required" },
26667 { 2, "Denied. The AP is unable to perform the requested action." },
26668 { 3, "Denied temporarily. The AP is unable to perform the requested action "
26669 "at the current time. The request can be submitted again at a later time."
26670 },
26671 { 4, "Denied. Due to the pending key expiration." },
26672 { 5, "Denied. The requested action was not granted due to other WNM services "
26673 "in use by the requesting STA." },
26674 { 0, NULL((void*)0) }
26675};
26676
26677static int
26678dissect_wnm_sleep_mode(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26679{
26680 int offset = 0;
26681 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_action_type,
26682 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26683 offset++;
26684 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_response_status,
26685 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26686 offset++;
26687 proto_tree_add_item(tree, hf_ieee80211_tag_wnm_sleep_mode_interval,
26688 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26689 offset += 2;
26690 return offset;
26691}
26692
26693static const value_string time_adv_timing_capab_vals[] = {
26694 { 0, "No standardized external time source" },
26695 { 1, "Timestamp offset based on UTC" },
26696 { 2, "UTC time at which the TSF timer is 0" },
26697 { 0, NULL((void*)0) }
26698};
26699
26700static int
26701dissect_time_adv(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26702{
26703 int offset = 0;
26704 uint8_t capab;
26705 proto_item *item;
26706 proto_tree *subtree;
26707 struct tm tm, *now;
26708 time_t t;
26709
26710 capab = tvb_get_uint8(tvb, offset);
26711 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_timing_capab,
26712 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26713 offset += 1;
26714
26715 switch (capab) {
26716 case 1:
26717 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
26718 tvb, offset, 10, ENC_NA0x00000000);
26719 offset += 10;
26720
26721 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
26722 tvb, offset, 5, ENC_NA0x00000000);
26723 offset += 5;
26724 break;
26725 case 2:
26726 item = proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_value,
26727 tvb, offset, 10, ENC_NA0x00000000);
26728 subtree = proto_item_add_subtree(item, ett_tag_time_adv_tree);
26729 memset(&tm, 0, sizeof(tm));
26730 tm.tm_year = tvb_get_letohs(tvb, offset) - 1900;
26731 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_year,
26732 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26733 offset += 2;
26734 tm.tm_mon = tvb_get_uint8(tvb, offset) - 1;
26735 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_month,
26736 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26737 offset += 1;
26738 tm.tm_mday = tvb_get_uint8(tvb, offset);
26739 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_day,
26740 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26741 offset += 1;
26742 tm.tm_hour = tvb_get_uint8(tvb, offset);
26743 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_hours,
26744 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26745 offset += 1;
26746 tm.tm_min = tvb_get_uint8(tvb, offset);
26747 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_minutes,
26748 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26749 offset += 1;
26750 tm.tm_sec = tvb_get_uint8(tvb, offset);
26751 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_seconds,
26752 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26753 offset += 1;
26754 proto_tree_add_item(subtree,
26755 hf_ieee80211_tag_time_adv_time_value_milliseconds,
26756 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
26757 offset += 2;
26758 proto_tree_add_item(subtree, hf_ieee80211_tag_time_adv_time_value_reserved,
26759 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26760 offset += 1;
26761
26762 tm.tm_isdst = -1;
26763 t = mktime(&tm);
26764 if (t != -1) {
26765 t += (time_t)(last_timestamp / 1000000);
26766 now = localtime(&t);
26767 if (now)
26768 proto_item_append_text(item,
26769 ": current time=%u-%02u-%02u %02u:%02u:%02u",
26770 now->tm_year + 1900, now->tm_mon + 1,
26771 now->tm_mday, now->tm_hour, now->tm_min,
26772 now->tm_sec);
26773 }
26774
26775 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_error,
26776 tvb, offset, 5, ENC_NA0x00000000);
26777 offset += 5;
26778
26779 proto_tree_add_item(tree, hf_ieee80211_tag_time_adv_time_update_counter,
26780 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26781 offset += 1;
26782 break;
26783 }
26784
26785 return offset;
26786}
26787
26788static int
26789dissect_time_zone(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26790{
26791 int tag_len = tvb_reported_length(tvb);
26792 int offset = 0;
26793
26794 proto_tree_add_item(tree, hf_ieee80211_tag_time_zone, tvb, offset, tag_len,
26795 ENC_ASCII0x00000000);
26796 return tvb_captured_length(tvb);
26797}
26798
26799static int
26800dissect_ap_channel_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26801{
26802 int tag_len = tvb_reported_length(tvb);
26803 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26804 int offset = 0;
26805
26806 if (tag_len < 1) {
26807 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26808 "AP Channel Report length %u wrong, must be > 1", tag_len);
26809 return tvb_captured_length(tvb);
26810 }
26811
26812 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_operating_class, tvb,
26813 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26814 proto_item_append_text(field_data->item_tag, ": Operating Class %u, Channel List :", tvb_get_uint8(tvb, offset));
26815 offset += 1;
26816
26817 while (offset < tag_len)
26818 {
26819 proto_tree_add_item(tree, hf_ieee80211_tag_ap_channel_report_channel_list, tvb, offset, 1, ENC_NA0x00000000);
26820 proto_item_append_text(field_data->item_tag, " %u,", tvb_get_uint8(tvb, offset));
26821 offset += 1;
26822 }
26823 return tvb_captured_length(tvb);
26824}
26825
26826static int
26827dissect_secondary_channel_offset_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26828{
26829 int tag_len = tvb_reported_length(tvb);
26830 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26831 int offset = 0;
26832 if (tag_len != 1) {
26833 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26834 "Secondary Channel Offset length %u wrong, must be = 1", tag_len);
26835 return 1;
26836 }
26837
26838 proto_tree_add_item(tree, hf_ieee80211_tag_secondary_channel_offset, tvb,
26839 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26840 return tvb_captured_length(tvb);
26841}
26842
26843/* RCPI (53) */
26844static int
26845dissect_rcpi_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26846{
26847 int tag_len = tvb_reported_length(tvb);
26848 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26849 int offset = 0;
26850
26851 if (tag_len != 1)
26852 {
26853 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26854 "RCPI length %u wrong, must = 1", tag_len);
26855 return 1;
26856 }
26857
26858 proto_tree_add_item(tree, hf_ieee80211_tag_rcpi, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26859 offset += 1;
26860
26861 return offset;
26862}
26863
26864/* BSS Average Access Delay element (63) */
26865static int
26866dissect_bss_avg_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26867{
26868 int tag_len = tvb_reported_length(tvb);
26869 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26870 int offset = 0;
26871 if (tag_len != 1) {
26872 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26873 "BSS Average Access Delay length %u wrong, must be = 1", tag_len);
26874 return 1;
26875 }
26876
26877 proto_tree_add_item(tree, hf_ieee80211_tag_bss_ap_avg_access_delay, tvb,
26878 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26879 return tvb_captured_length(tvb);
26880}
26881
26882static int
26883dissect_antenna_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26884{
26885 int tag_len = tvb_reported_length(tvb);
26886 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26887 int offset = 0;
26888
26889 if (tag_len != 1) {
26890 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26891 "Antenna length %u wrong, must be = 1", tag_len);
26892 return 1;
26893 }
26894
26895 proto_tree_add_item(tree, hf_ieee80211_tag_antenna_id, tvb,
26896 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26897
26898 return tvb_captured_length(tvb);
26899}
26900
26901static int
26902dissect_rsni_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26903{
26904 int tag_len = tvb_reported_length(tvb);
26905 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26906 int offset = 0;
26907
26908 if (tag_len != 1) {
26909 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26910 "RSNI length %u wrong, must be = 1", tag_len);
26911 return 1;
26912 }
26913
26914 proto_tree_add_item(tree, hf_ieee80211_tag_rsni, tvb,
26915 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
26916
26917 return tvb_captured_length(tvb);
26918}
26919
26920static int
26921dissect_measurement_pilot_trans_ie(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
26922{
26923 int tag_len = tvb_reported_length(tvb);
26924 int offset = 0;
26925 const uint8_t ids[] = { TAG_VENDOR_SPECIFIC_IE221 };
26926
26927 /* The tag len can be 1 or more if there are sub-elements */
26928
26929 proto_tree_add_item(tree, hf_ieee80211_ff_measurement_pilot_int, tvb, offset,
26930 1, ENC_NA0x00000000);
26931
26932 tag_len--;
26933 offset++;
26934
26935 /* Also handle the optional sub-elements */
26936
26937 if (tag_len > 0) {
26938 while (tag_len > 0) {
26939 uint8_t elt_len;
26940
26941 if (tvb_reported_length_remaining(tvb, offset) < 2) {
26942 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_bad_length,
26943 tvb, offset, tag_len - offset,
26944 "Remaining data does not include the tag length");
26945 break;
26946 }
26947 elt_len = tvb_get_uint8(tvb, offset + 1);
26948
26949 if(add_tagged_field(pinfo, tree, tvb, offset + 2, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
26950 /* TODO: Add an expert info here and skip the field. */
26951 break;
26952 }
26953
26954 tag_len -= elt_len + 2;
26955 offset += elt_len + 2;
26956 }
26957 }
26958
26959 return tvb_captured_length(tvb);
26960}
26961
26962static int
26963dissect_bss_available_admission_capacity_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
26964{
26965 int tag_len = tvb_reported_length(tvb);
26966 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
26967 int offset = 0;
26968 uint16_t bitmask;
26969 static int * const ieee80211_tag_bss_avb_adm_cap_bitmask[] = {
26970 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
26971 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
26972 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
26973 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
26974 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
26975 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
26976 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
26977 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
26978 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
26979 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
26980 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
26981 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
26982 &hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
26983 NULL((void*)0)
26984 };
26985
26986 if (tag_len < 2) {
26987 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
26988 "BSS Available Admission Capacity length %u wrong, must > = 2", tag_len);
26989 return offset;
26990 }
26991
26992 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
26993 ett_tag_bss_bitmask_tree, ieee80211_tag_bss_avb_adm_cap_bitmask,
26994 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
26995 bitmask = tvb_get_letohs(tvb, offset);
26996 offset += 2;
26997
26998 if(bitmask & BSS_BITMASK_UP00x0001)
26999 {
27000 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27001 offset += 2;
27002 }
27003 if(bitmask & BSS_BITMASK_UP10x0002)
27004 {
27005 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27006 offset += 2;
27007 }
27008 if(bitmask & BSS_BITMASK_UP20x0004)
27009 {
27010 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27011 offset += 2;
27012 }
27013 if(bitmask & BSS_BITMASK_UP30x0008)
27014 {
27015 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27016 offset += 2;
27017 }
27018 if(bitmask & BSS_BITMASK_UP40x0010)
27019 {
27020 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up4, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27021 offset += 2;
27022 }
27023 if(bitmask & BSS_BITMASK_UP50x0020)
27024 {
27025 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up5, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27026 offset += 2;
27027 }
27028 if(bitmask & BSS_BITMASK_UP60x0040)
27029 {
27030 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up6, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27031 offset += 2;
27032 }
27033 if(bitmask & BSS_BITMASK_UP70x0080)
27034 {
27035 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_up7, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27036 offset += 2;
27037 }
27038 if(bitmask & BSS_BITMASK_AC00x0100)
27039 {
27040 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac0, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27041 offset += 2;
27042 }
27043 if(bitmask & BSS_BITMASK_AC10x0200)
27044 {
27045 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac1, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27046 offset += 2;
27047 }
27048 if(bitmask & BSS_BITMASK_AC20x0400)
27049 {
27050 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac2, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27051 offset += 2;
27052 }
27053 if(bitmask & BSS_BITMASK_AC30x0800)
27054 {
27055 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avb_adm_cap_ac3, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
27056 offset += 2;
27057 }
27058 return offset;
27059}
27060
27061static int
27062dissect_bss_ac_access_delay_ie(tvbuff_t *tvb, packet_info *pinfo,
27063 proto_tree *tree, int offset, uint32_t tag_len, proto_item *ti_len)
27064{
27065
27066 if (tag_len != 4) {
27067 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
27068 "BSS AC Access Delay length %u wrong, must = 4", tag_len);
27069 return offset;
27070 }
27071
27072 /* TODO: Display the scaled representation of the average
27073 medium access delay (a big (precalculated) value_string ?)
27074 See 8.4.2.46 BSS AC Access Delay element ... */
27075
27076 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_be, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27077 offset += 1;
27078 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_bk, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27079 offset += 1;
27080 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vi, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27081 offset += 1;
27082 proto_tree_add_item(tree, hf_ieee80211_tag_bss_avg_ac_access_delay_vo, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27083 offset += 1;
27084
27085 return offset;
27086}
27087
27088/* RM Enabled Capabilities (70) */
27089static int
27090dissect_rm_enabled_capabilities_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27091{
27092 int tag_len = tvb_reported_length(tvb);
27093 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27094 int offset = 0;
27095 proto_item *ti_ex_cap;
27096 static int * const ieee80211_tag_rm_enabled_capabilities_octet1[] = {
27097 &hf_ieee80211_tag_rm_enabled_capabilities_b0,
27098 &hf_ieee80211_tag_rm_enabled_capabilities_b1,
27099 &hf_ieee80211_tag_rm_enabled_capabilities_b2,
27100 &hf_ieee80211_tag_rm_enabled_capabilities_b3,
27101 &hf_ieee80211_tag_rm_enabled_capabilities_b4,
27102 &hf_ieee80211_tag_rm_enabled_capabilities_b5,
27103 &hf_ieee80211_tag_rm_enabled_capabilities_b6,
27104 &hf_ieee80211_tag_rm_enabled_capabilities_b7,
27105 NULL((void*)0)
27106 };
27107
27108 static int * const ieee80211_tag_rm_enabled_capabilities_octet2[] = {
27109 &hf_ieee80211_tag_rm_enabled_capabilities_b8,
27110 &hf_ieee80211_tag_rm_enabled_capabilities_b9,
27111 &hf_ieee80211_tag_rm_enabled_capabilities_b10,
27112 &hf_ieee80211_tag_rm_enabled_capabilities_b11,
27113 &hf_ieee80211_tag_rm_enabled_capabilities_b12,
27114 &hf_ieee80211_tag_rm_enabled_capabilities_b13,
27115 &hf_ieee80211_tag_rm_enabled_capabilities_b14,
27116 &hf_ieee80211_tag_rm_enabled_capabilities_b15,
27117 NULL((void*)0)
27118 };
27119
27120 static int * const ieee80211_tag_rm_enabled_capabilities_octet3[] = {
27121 &hf_ieee80211_tag_rm_enabled_capabilities_b16,
27122 &hf_ieee80211_tag_rm_enabled_capabilities_b17,
27123 &hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
27124 &hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
27125 NULL((void*)0)
27126 };
27127
27128 static int * const ieee80211_tag_rm_enabled_capabilities_octet4[] = {
27129 &hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
27130 &hf_ieee80211_tag_rm_enabled_capabilities_b27,
27131 &hf_ieee80211_tag_rm_enabled_capabilities_b28,
27132 &hf_ieee80211_tag_rm_enabled_capabilities_b29,
27133 &hf_ieee80211_tag_rm_enabled_capabilities_b30,
27134 &hf_ieee80211_tag_rm_enabled_capabilities_b31,
27135 NULL((void*)0)
27136 };
27137
27138 static int * const ieee80211_tag_rm_enabled_capabilities_octet5[] = {
27139 &hf_ieee80211_tag_rm_enabled_capabilities_b32,
27140 &hf_ieee80211_tag_rm_enabled_capabilities_b33,
27141 &hf_ieee80211_tag_rm_enabled_capabilities_b34,
27142 &hf_ieee80211_tag_rm_enabled_capabilities_b35,
27143 &hf_ieee80211_tag_rm_enabled_capabilities_o5,
27144 NULL((void*)0)
27145 };
27146
27147 if (tag_len != 5)
27148 {
27149 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "RM Enabled Capabilities length %u wrong, must = 5", tag_len);
27150 return 1;
27151 }
27152 proto_item_append_text(field_data->item_tag, " (%d octets)", tag_len);
27153
27154 /* RM Enabled Capability octet 1 */
27155 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
27156 ett_tag_rm_cap1, ieee80211_tag_rm_enabled_capabilities_octet1,
27157 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27158 proto_item_append_text(ti_ex_cap, " (octet 1)");
27159 offset += 1;
27160
27161 /* RM Enabled Capability octet 2 */
27162 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
27163 ett_tag_rm_cap2, ieee80211_tag_rm_enabled_capabilities_octet2,
27164 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27165 proto_item_append_text(ti_ex_cap, " (octet 2)");
27166 offset += 1;
27167
27168 /* RM Enabled Capability octet 3 */
27169 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
27170 ett_tag_rm_cap3, ieee80211_tag_rm_enabled_capabilities_octet3,
27171 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27172 proto_item_append_text(ti_ex_cap, " (octet 3)");
27173 offset += 1;
27174
27175 /* RM Enabled Capability octet 4 */
27176 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
27177 ett_tag_rm_cap4, ieee80211_tag_rm_enabled_capabilities_octet4,
27178 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27179 proto_item_append_text(ti_ex_cap, " (octet 4)");
27180 offset += 1;
27181
27182 /* RM Enabled Capability octet 5 */
27183 ti_ex_cap = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rm_enabled_capabilities,
27184 ett_tag_rm_cap5, ieee80211_tag_rm_enabled_capabilities_octet5,
27185 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27186 proto_item_append_text(ti_ex_cap, " (octet 5)");
27187 offset += 1;
27188
27189 return offset;
27190}
27191
27192/* Multiple BSSID (71) */
27193enum multiple_bssid_subelem_id {
27194 MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE = 0,
27195 MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC = 221
27196};
27197
27198static const value_string multiple_bssid_subelem_ids[] = {
27199 { MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE, "Nontransmitted BSSID Profile" },
27200 { MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC, "Vendor Specific" },
27201 { 0, NULL((void*)0) }
27202};
27203
27204static int
27205dissect_multiple_bssid_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27206{
27207 unsigned tag_len = tvb_reported_length(tvb);
27208 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27209 unsigned offset = 0;
27210 uint8_t sub_tag_id, sub_tag_len;
27211 const char *sub_tag_name;
27212 proto_tree *sub_tag_tree;
27213 const uint8_t valid_ids[] = { TAG_VENDOR_SPECIFIC_IE221 };
27214 const uint8_t invalid_ids[] = { TAG_TIM5, TAG_DS_PARAMETER3, TAG_IBSS_PARAMETER6,
27215 TAG_COUNTRY_INFO7, TAG_CHANNEL_SWITCH_ANN37, TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60,
27216 TAG_WIDE_BW_CHANNEL_SWITCH194, TAG_TX_PWR_ENVELOPE195, TAG_SUPPORTED_OPERATING_CLASSES59, TAG_IBSS_DFS41,
27217 TAG_ERP_INFO42, TAG_ERP_INFO_OLD47, TAG_HT_CAPABILITY45, TAG_HT_OPERATION61, TAG_VHT_CAPABILITY191,
27218 TAG_VHT_OPERATION192, TAG_S1G_BEACON_COMPATIBILITY213, TAG_SHORT_BEACON_INTERVAL214,
27219 TAG_S1G_CAPABILITIES217, TAG_S1G_OPERATION232 };
27220 const uint8_t invalid_ext_ids[] = { ETAG_HE_CAPABILITIES35, ETAG_HE_OPERATION36,
27221 ETAG_HE_6GHZ_BAND_CAPABILITIES59, ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42, ETAG_SPATIAL_REUSE_PARAMETER_SET39 };
27222 uint32_t s_offset, s_end;
27223
27224 if (tag_len < 1)
27225 {
27226 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);
27227 return 1;
27228 }
27229
27230 proto_tree_add_item(tree, hf_ieee80211_tag_multiple_bssid, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27231 offset++;
27232
27233 /* Optional sub-elements */
27234
27235 while (offset + 1 < tag_len) {
27236 sub_tag_id = tvb_get_uint8(tvb, offset);
27237 sub_tag_len = tvb_get_uint8(tvb, offset + 1);
27238 sub_tag_name = val_to_str_const(sub_tag_id, multiple_bssid_subelem_ids, "Unknown");
27239
27240 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);
27241
27242 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27243 offset += 1;
27244
27245 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_len, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27246 offset += 1;
27247
27248 if (offset + sub_tag_len > tag_len) {
27249 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length, "Not enough data for subelement");
27250 break;
27251 }
27252
27253 switch (sub_tag_id)
27254 {
27255 case MULTIPLE_BSSID_SUBELEM_NO_BSSID_PROFILE:
27256 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile, tvb, offset, sub_tag_len, ENC_NA0x00000000);
27257
27258 s_offset = offset;
27259 s_end = offset + sub_tag_len;
27260 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
27261 while (s_offset < s_end) {
27262 int tlen = add_tagged_field_with_validation(pinfo, sub_tag_tree, tvb, s_offset, 0,
27263 invalid_ids, G_N_ELEMENTS(invalid_ids)(sizeof (invalid_ids) / sizeof ((invalid_ids)[0])), true1,
27264 invalid_ext_ids, G_N_ELEMENTS(invalid_ext_ids)(sizeof (invalid_ext_ids) / sizeof ((invalid_ext_ids)[0])), true1, NULL((void*)0));
27265 if (tlen==0)
27266 break;
27267 s_offset += tlen;
27268 }
27269
27270 break;
27271
27272 case MULTIPLE_BSSID_SUBELEM_VENDOR_SPECIFIC:
27273 /*
27274 * add_tagged_field will insert expert info if there is a problem so
27275 * we ignore the return value.
27276 */
27277 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));
27278 break;
27279
27280 default:
27281 /* RESERVED */
27282 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_multiple_bssid_subelem_reserved, tvb, offset, sub_tag_len, ENC_NA0x00000000);
27283 break;
27284 }
27285
27286 offset += sub_tag_len;
27287
27288 }
27289
27290 if (offset < tag_len) {
27291 proto_tree_add_expert_format(tree, pinfo, &ei_ieee80211_extra_data,
27292 tvb, offset, tag_len - offset, "Extra data after subelements");
27293 }
27294
27295 return tvb_captured_length(tvb);
27296}
27297
27298/* 20/40 BSS Coexistence (72) */
27299static int
27300dissect_20_40_bss_coexistence(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27301{
27302 int tag_len = tvb_reported_length(tvb);
27303 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27304 int offset = 0;
27305 static int * const ieee80211_20_40_bss_coexistence_fields[] = {
27306 &hf_ieee80211_tag_20_40_bc_information_request,
27307 &hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
27308 &hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request,
27309 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
27310 &hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
27311 &hf_ieee80211_tag_20_40_bc_reserved,
27312 NULL((void*)0)
27313 };
27314
27315 if (tag_len != 1)
27316 {
27317 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);
27318 return 1;
27319 }
27320
27321 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_20_40_bc,
27322 ett_tag_20_40_bc, ieee80211_20_40_bss_coexistence_fields,
27323 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27324
27325 offset += 1;
27326
27327 return offset;
27328}
27329
27330/* 20/40 BSS Intolerant Channel Report (73) */
27331static int
27332dissect_20_40_bss_intolerant(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27333{
27334 proto_item *intolerant_item;
27335 proto_tree *intolerant_tree;
27336 int tag_len = tvb_reported_length(tvb);
27337 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27338 int offset = 0;
27339 int channel_report_size = tag_len - 1; // minus regulator_class field
27340 int i;
27341
27342 if (tag_len < 2) {
27343 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
27344 "20/40 BSS Intolerant Channel Report length %u wrong, must > 1", tag_len);
27345 }
27346
27347 proto_tree_add_item(tree, hf_ieee80211_tag_intolerant_operating_class, tvb, offset, 1, ENC_NA0x00000000);
27348 offset += 1;
27349
27350 intolerant_item = proto_tree_add_item(tree, hf_ieee80211_tag_intolerant_channel_list, tvb, offset, channel_report_size, ENC_NA0x00000000);
27351 intolerant_tree = proto_item_add_subtree(intolerant_item, ett_tag_intolerant_tree);
27352 for (i = 0; i < channel_report_size; i++)
27353 {
27354 proto_tree_add_item(intolerant_tree, hf_ieee80211_tag_intolerant_channel, tvb, offset, 1, ENC_NA0x00000000);
27355 offset += 1;
27356 }
27357
27358 return offset;
27359}
27360
27361static int
27362dissect_ht_capability_ie_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
27363 uint32_t tag_len, proto_item *ti_len, bool_Bool vendorspecific)
27364{
27365 proto_item *cap_item, *ti;
27366 proto_tree *cap_tree;
27367 static int * const ieee80211_ht[] = {
27368 &hf_ieee80211_ht_ldpc_coding,
27369 &hf_ieee80211_ht_chan_width,
27370 &hf_ieee80211_ht_sm_pwsave,
27371 &hf_ieee80211_ht_green,
27372 &hf_ieee80211_ht_short20,
27373 &hf_ieee80211_ht_short40,
27374 &hf_ieee80211_ht_tx_stbc,
27375 &hf_ieee80211_ht_rx_stbc,
27376 &hf_ieee80211_ht_reserved_b10,
27377 &hf_ieee80211_ht_max_amsdu,
27378 &hf_ieee80211_ht_dss_cck_40,
27379 &hf_ieee80211_ht_reserved_b13,
27380 &hf_ieee80211_ht_40_mhz_intolerant,
27381 &hf_ieee80211_ht_reserved_b15,
27382 NULL((void*)0)
27383 };
27384
27385 static int * const ieee80211_htex[] = {
27386 &hf_ieee80211_htex_reserved_b0_b7,
27387 &hf_ieee80211_htex_mcs,
27388 &hf_ieee80211_htex_htc_support,
27389 &hf_ieee80211_htex_rd_responder,
27390 &hf_ieee80211_htex_reserved_b12_b15,
27391 NULL((void*)0)
27392 };
27393
27394 static int * const ieee80211_txbf[] = {
27395 &hf_ieee80211_txbf_cap,
27396 &hf_ieee80211_txbf_rcv_ssc,
27397 &hf_ieee80211_txbf_tx_ssc,
27398 &hf_ieee80211_txbf_rcv_ndp,
27399 &hf_ieee80211_txbf_tx_ndp,
27400 &hf_ieee80211_txbf_impl_txbf,
27401 &hf_ieee80211_txbf_calib,
27402 &hf_ieee80211_txbf_expl_csi,
27403 &hf_ieee80211_txbf_expl_uncomp_fm,
27404 &hf_ieee80211_txbf_expl_comp_fm,
27405 &hf_ieee80211_txbf_expl_bf_csi,
27406 &hf_ieee80211_txbf_expl_uncomp_fm_feed,
27407 &hf_ieee80211_txbf_expl_comp_fm_feed,
27408 &hf_ieee80211_txbf_min_group,
27409 &hf_ieee80211_txbf_csi_num_bf_ant,
27410 &hf_ieee80211_txbf_uncomp_sm_bf_ant,
27411 &hf_ieee80211_txbf_comp_sm_bf_ant,
27412 &hf_ieee80211_txbf_csi_max_rows_bf,
27413 &hf_ieee80211_txbf_chan_est,
27414 &hf_ieee80211_txbf_resrv,
27415 NULL((void*)0)
27416 };
27417
27418 static int * const ieee80211_antsel[] = {
27419 &hf_ieee80211_antsel_b0,
27420 &hf_ieee80211_antsel_b1,
27421 &hf_ieee80211_antsel_b2,
27422 &hf_ieee80211_antsel_b3,
27423 &hf_ieee80211_antsel_b4,
27424 &hf_ieee80211_antsel_b5,
27425 &hf_ieee80211_antsel_b6,
27426 &hf_ieee80211_antsel_b7,
27427 NULL((void*)0)
27428 };
27429
27430 if (tag_len != 26) {
27431 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
27432 "HT Capabilities IE length %u wrong, must be = 26", tag_len);
27433 return (offset > 0) ? offset : 1;
27434 }
27435
27436 if (wlan_ignore_draft_ht && vendorspecific)
27437 return (offset > 0) ? offset : 1;
27438
27439 /* 2 byte HT Capabilities Info*/
27440 if (vendorspecific)
27441 {
27442 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_vs_cap,
27443 ett_ht_cap_tree, ieee80211_ht,
27444 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27445 }
27446 else
27447 {
27448 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ht_cap,
27449 ett_ht_cap_tree, ieee80211_ht,
27450 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27451 }
27452 offset += 2;
27453
27454 /* 1 byte A-MPDU Parameters */
27455 if (vendorspecific)
27456 {
27457 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam_vs, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27458 } else
27459 {
27460 cap_item = proto_tree_add_item(tree, hf_ieee80211_ampduparam, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27461 }
27462 cap_tree = proto_item_add_subtree(cap_item, ett_ampduparam_tree);
27463 ti = proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27464 proto_item_append_text(ti, " (%04.0f[Bytes])", pow(2, 13+(tvb_get_uint8(tvb, offset) & 0x3))-1);
27465 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_mpdu_start_spacing, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27466 proto_tree_add_item(cap_tree, hf_ieee80211_ampduparam_reserved, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27467 offset += 1;
27468
27469 /* 16 byte MCS set */
27470 offset = dissect_mcs_set(tree, pinfo, tvb, offset, false0, vendorspecific);
27471
27472
27473 /* 2 byte HT Extended Capabilities */
27474 if (vendorspecific)
27475 {
27476 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_htex_vs_cap,
27477 ett_htex_cap_tree, ieee80211_htex,
27478 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27479 } else {
27480 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_htex_cap,
27481 ett_htex_cap_tree, ieee80211_htex,
27482 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27483 }
27484 offset += 2;
27485
27486
27487 /* 4 byte TxBF capabilities */
27488 if (vendorspecific)
27489 {
27490 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_txbf_vs,
27491 ett_txbf_tree, ieee80211_txbf,
27492 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27493 } else {
27494 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_txbf,
27495 ett_txbf_tree, ieee80211_txbf,
27496 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27497 }
27498 offset += 4;
27499
27500 /* 1 byte Antenna Selection (ASEL) capabilities */
27501 if (vendorspecific)
27502 {
27503 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_antsel_vs,
27504 ett_antsel_tree, ieee80211_antsel,
27505 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27506 }
27507 else
27508 {
27509 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_antsel,
27510 ett_antsel_tree, ieee80211_antsel,
27511 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27512 }
27513 offset += 1;
27514
27515 return offset;
27516}
27517
27518static int
27519dissect_ht_capability_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
27520{
27521 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
27522
27523 return dissect_ht_capability_ie_common(tvb, pinfo, tree, 0, tvb_reported_length(tvb),
27524 field_data->item_tag_length, false0);
27525}
27526
27527static int
27528dissect_ht_info_ie_1_0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
27529 uint32_t tag_len, proto_item *ti_len)
27530{
27531 static int * const ieee80211_hta1[] = {
27532 &hf_ieee80211_hta_ext_chan_offset,
27533 &hf_ieee80211_hta_rec_tx_width,
27534 &hf_ieee80211_hta_rifs_mode,
27535 &hf_ieee80211_hta_controlled_access,
27536 &hf_ieee80211_hta_service_interval,
27537 NULL((void*)0)
27538 };
27539
27540 static int * const ieee80211_hta2[] = {
27541 &hf_ieee80211_hta_operating_mode,
27542 &hf_ieee80211_hta_non_gf_devices,
27543 NULL((void*)0)
27544 };
27545
27546 static int * const ieee80211_hta3[] = {
27547 &hf_ieee80211_hta_basic_stbc_mcs,
27548 &hf_ieee80211_hta_dual_stbc_protection,
27549 &hf_ieee80211_hta_secondary_beacon,
27550 &hf_ieee80211_hta_lsig_txop_protection,
27551 &hf_ieee80211_hta_pco_active,
27552 &hf_ieee80211_hta_pco_phase,
27553 NULL((void*)0)
27554 };
27555
27556 if (tag_len != 22) {
27557 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
27558 "Tag length %u wrong, must be = 22", tag_len);
27559 return offset;
27560 }
27561
27562 if (wlan_ignore_draft_ht)
27563 return offset;
27564
27565 /* 1 HT Control Channel */
27566 proto_tree_add_item(tree, hf_ieee80211_hta_cc, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
27567 offset += 1;
27568
27569 /* 1 byte HT additional capabilities */
27570 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap1,
27571 ett_hta_cap_tree, ieee80211_hta1,
27572 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27573 offset += 1;
27574
27575 /* 2 byte HT additional capabilities */
27576 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap2,
27577 ett_hta_cap1_tree, ieee80211_hta2,
27578 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27579 offset += 2;
27580
27581 /* 2 byte HT additional capabilities */
27582 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_hta_cap2,
27583 ett_hta_cap2_tree, ieee80211_hta3,
27584 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
27585 offset += 2;
27586
27587 /* 16 byte Supported MCS set */
27588 offset = dissect_mcs_set(tree, pinfo, tvb, offset, false0, true1);
27589
27590 return offset;
27591}
27592
27593/* 802.11n-D1.10 and 802.11n-D2.0, 7.1.3.5a */
27594
27595/*
27596 * IEEE 802.11-2016 section 9.2.4.6 "HT Control field" says that B0 of
27597 * the field is 0 for HT and 1 for VHT, bits B1 through B29 are the
27598 * "HT Control Middle" subfield, the format of which differs between
27599 * HT and VHT, bit B30 is the "AC Constraint" subfield, and bit B31
27600 * is the "RDG/More PPDU" subfield.
27601 *
27602 * 802.11ax changes the meaning of the first two bits:
27603 *
27604 * B0 = 0 means High Throughput
27605 * B0 = 1, B1 = 0 means Very High Throughput
27606 * B0 = 1, B1 = 1 means High Efficiency
27607 *
27608 * taking a reserved bit from the VHT version of the "HT Control Middle"
27609 * field.
27610 */
27611#define A_CONTROL_TRS0 0
27612#define A_CONTROL_OM1 1
27613#define A_CONTROL_HLA2 2
27614#define A_CONTROL_BSR3 3
27615#define A_CONTROL_UPH4 4
27616#define A_CONTROL_BQR5 5
27617#define A_CONTROL_CCI6 6
27618#define A_CONTROL_EHT_OM7 7
27619#define A_CONTROL_SRS8 8
27620#define A_CONTROL_AAR9 9
27621#define A_CONTROL_ONES15 15
27622
27623static const value_string a_control_control_id_vals[] = {
27624 { A_CONTROL_TRS0, "Triggered response scheduling" },
27625 { A_CONTROL_OM1, "Operating mode" },
27626 { A_CONTROL_HLA2, "HE link adaptation" },
27627 { A_CONTROL_BSR3, "Buffer status report" },
27628 { A_CONTROL_UPH4, "UL power headroom" },
27629 { A_CONTROL_BQR5, "Bandwidth query report" },
27630 { A_CONTROL_CCI6, "Command Control Indication" },
27631 { A_CONTROL_EHT_OM7, "EHT operating mode" },
27632 { A_CONTROL_SRS8, "Single response scheduling" },
27633 { A_CONTROL_AAR9, "AP assistance request" },
27634 { A_CONTROL_ONES15, "Ones need expansion surely" },
27635 { 0, NULL((void*)0) }
27636};
27637
27638/*
27639 * Print the UL target RSSI field as per the spec.
27640 * 0->30 map to -90 to -30 dBm.
27641 * 31 maps to Max ransmit power
27642 */
27643static void
27644ul_target_rssi_base_custom(char *result, uint32_t target_rssi)
27645{
27646 if (target_rssi <= 30) {
27647 snprintf(result, ITEM_LABEL_LENGTH240, "%ddBm", -90 + (2 * target_rssi));
27648 } else if (target_rssi == 31) {
27649 snprintf(result, ITEM_LABEL_LENGTH240, "Max transmit power");
27650 }
27651}
27652
27653static void
27654dissect_a_control_padding(proto_tree *tree, tvbuff_t *tvb, int offset,
27655 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27656{
27657 proto_tree *trs_tree = NULL((void*)0);
27658 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27659 unsigned offset_in_bits = (offset << 3) + start_bit;
27660
27661 /*
27662 * We isolated the bits and moved them to the bottom ... so display them
27663 */
27664 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27665 ett_ieee80211_a_control_padding,
27666 NULL((void*)0), "Padding: 0x%x(%u bits)", the_bits, 32 - start_bit);
27667
27668 proto_tree_add_bits_item(trs_tree, hf_ieee80211_he_a_control_padding, tvb, offset_in_bits,
27669 32 - start_bit, ENC_LITTLE_ENDIAN0x80000000);
27670}
27671
27672static void
27673dissect_a_control_ones(proto_tree *tree, tvbuff_t *tvb, int offset,
27674 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27675{
27676 proto_tree *trs_tree = NULL((void*)0);
27677 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27678
27679 /*
27680 * We isolated the bits and moved them to the bottom ... so display them
27681 */
27682 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27683 ett_ieee80211_a_control_ones,
27684 NULL((void*)0), "ONES: 0x%0x", the_bits);
27685
27686 proto_tree_add_uint(trs_tree, hf_ieee80211_he_a_control_ones, tvb,
27687 offset, 4, the_bits);
27688}
27689
27690static void
27691dissect_a_control_trs(proto_tree *tree, tvbuff_t *tvb, int offset,
27692 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27693{
27694 proto_tree *trs_tree = NULL((void*)0);
27695 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27696
27697 /*
27698 * We isolated the bits and moved them to the bottom ... so display them
27699 */
27700 trs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27701 ett_ieee80211_triggered_response_schedule,
27702 NULL((void*)0), "TRS Control: 0x%08x", the_bits);
27703
27704 proto_tree_add_uint(trs_tree, hf_ieee80211_he_trs_he_tb_ppdu_len, tvb,
27705 offset, 4, the_bits);
27706 proto_tree_add_uint(trs_tree, hf_ieee80211_he_trs_ru_allocation, tvb,
27707 offset, 4, the_bits);
27708 proto_tree_add_uint(trs_tree, hf_ieee80211_he_dl_tx_power, tvb,
27709 offset, 4, the_bits);
27710 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_target_rssi, tvb,
27711 offset, 4, the_bits);
27712 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_mcs, tvb,
27713 offset, 4, the_bits);
27714 proto_tree_add_uint(trs_tree, hf_ieee80211_he_ul_reserved, tvb,
27715 offset, 4, the_bits);
27716}
27717
27718static void
27719dissect_a_control_om(proto_tree *tree, tvbuff_t *tvb, int offset,
27720 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27721{
27722 proto_tree *om_tree = NULL((void*)0);
27723 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x00000FFF;
27724
27725 /*
27726 * We isolated the bits and moved them to the bottom ... so display them
27727 */
27728 om_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27729 ett_ieee80211_control_om,
27730 NULL((void*)0), "OM Control: 0x%04x", the_bits);
27731
27732 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_rx_nss, tvb,
27733 offset, 4, the_bits);
27734 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_channel_width, tvb,
27735 offset, 4, the_bits);
27736 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_ul_mu_disable, tvb,
27737 offset, 4, the_bits);
27738 proto_tree_add_uint(om_tree, hf_ieee80211_he_om_tx_nsts, tvb,
27739 offset, 4, the_bits);
27740 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_er_su_disable, tvb,
27741 offset, 4, the_bits);
27742 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_dl_mu_mimo_resound, tvb,
27743 offset, 4, the_bits);
27744 proto_tree_add_boolean(om_tree, hf_ieee80211_he_om_ul_mu_data_disable, tvb,
27745 offset, 4, the_bits);
27746}
27747
27748static const true_false_string he_hla_tx_bf_tfs = {
27749 "beamformed PPDU",
27750 "non-beamformed PPDU"
27751};
27752
27753static void
27754dissect_a_control_hla(proto_tree *tree, tvbuff_t *tvb, int offset,
27755 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27756{
27757 proto_tree *hla_tree = NULL((void*)0);
27758 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27759
27760 /*
27761 * We isolated the bits and moved them to the bottom ... so display them
27762 */
27763 hla_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27764 ett_ieee80211_hla_control,
27765 NULL((void*)0), "HLA Control: 0x%08x", the_bits);
27766
27767 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_unsolicited_mfb, tvb,
27768 offset, 4, the_bits);
27769 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_mrq, tvb,
27770 offset, 4, the_bits);
27771 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_nss, tvb,
27772 offset, 4, the_bits);
27773 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_he_mcs, tvb,
27774 offset, 4, the_bits);
27775 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_dcm, tvb,
27776 offset, 4, the_bits);
27777 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_ru, tvb,
27778 offset, 4, the_bits);
27779 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_bw, tvb,
27780 offset, 4, the_bits);
27781 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_msi_ppdu_type, tvb,
27782 offset, 4, the_bits);
27783 proto_tree_add_boolean(hla_tree, hf_ieee80211_he_hla_tx_bf, tvb,
27784 offset, 4, the_bits);
27785 proto_tree_add_uint(hla_tree, hf_ieee80211_he_hla_reserved, tvb,
27786 offset, 4, the_bits);
27787}
27788
27789static void
27790dissect_a_control_bsr(proto_tree *tree, tvbuff_t *tvb, int offset,
27791 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27792{
27793 proto_tree *bsr_tree = NULL((void*)0);
27794 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FFFFFF;
27795
27796 /*
27797 * We isolated the bits and moved them to the bottom ... so display them
27798 */
27799 bsr_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27800 ett_ieee80211_buffer_status_report,
27801 NULL((void*)0), "Buffer Status Report: 0x%08x", the_bits);
27802
27803 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_aci_bitmap, tvb,
27804 offset, 4, the_bits);
27805 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_delta_tid, tvb,
27806 offset, 4, the_bits);
27807 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_aci_high, tvb,
27808 offset, 4, the_bits);
27809 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_scaling_factor, tvb,
27810 offset, 4, the_bits);
27811 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_queue_size_high, tvb,
27812 offset, 4, the_bits);
27813 proto_tree_add_uint(bsr_tree, hf_ieee80211_he_bsr_queue_size_all, tvb,
27814 offset, 4, the_bits);
27815}
27816
27817static void
27818dissect_a_control_uph(proto_tree *tree, tvbuff_t *tvb, int offset,
27819 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27820{
27821 proto_tree *uph_tree = NULL((void*)0);
27822 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000000FF;
27823
27824 /*
27825 * We isolated the bits and moved them to the bottom ... so display them
27826 */
27827 uph_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27828 ett_ieee80211_control_uph,
27829 NULL((void*)0), "UPH Control: 0x%02x", the_bits);
27830
27831 proto_tree_add_uint(uph_tree, hf_ieee80211_he_uph_ul_power_headroom, tvb,
27832 offset, 4, the_bits);
27833 proto_tree_add_boolean(uph_tree, hf_ieee80211_he_uph_ul_min_transmit_power_flag,
27834 tvb, offset, 4, the_bits);
27835 proto_tree_add_uint(uph_tree, hf_ieee80211_he_uph_reserved,
27836 tvb, offset, 4, the_bits);
27837}
27838
27839static void
27840dissect_a_control_bqr(proto_tree *tree, tvbuff_t *tvb, int offset,
27841 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27842{
27843 proto_tree *bqr_tree = NULL((void*)0);
27844 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x03FF;
27845
27846 /*
27847 * We isolated the bits and moved them to the bottom ... so display them
27848 */
27849 bqr_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27850 ett_ieee80211_buffer_control_bqr,
27851 NULL((void*)0), "BQR Control: 0x%04x", the_bits);
27852
27853 proto_tree_add_uint(bqr_tree, hf_ieee80211_he_btc_avail_chan, tvb,
27854 offset, 4, the_bits);
27855 proto_tree_add_uint(bqr_tree, hf_ieee80211_he_btc_reserved, tvb,
27856 offset, 4, the_bits);
27857}
27858
27859static void
27860dissect_a_control_cci(proto_tree *tree, tvbuff_t *tvb, int offset,
27861 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27862{
27863 proto_tree *cci_tree = NULL((void*)0);
27864 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000000FF;
27865
27866 /*
27867 * We isolated the bits and moved them to the bottom ... so display them
27868 */
27869 cci_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27870 ett_ieee80211_control_cci,
27871 NULL((void*)0), "Command and status: 0x%02x", the_bits);
27872
27873 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_ac_constraint, tvb,
27874 offset, 4, the_bits);
27875 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_rdg_more_ppdu, tvb,
27876 offset, 4, the_bits);
27877 proto_tree_add_boolean(cci_tree, hf_ieee80211_he_cci_sr_ppdu_indic, tvb,
27878 offset, 4, the_bits);
27879 proto_tree_add_uint(cci_tree, hf_ieee80211_he_cci_reserved, tvb,
27880 offset, 4, the_bits);
27881}
27882
27883static void
27884dissect_a_control_eht_om(proto_tree *tree, tvbuff_t *tvb, int offset,
27885 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27886{
27887 proto_tree *eht_om_tree = NULL((void*)0);
27888 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x0000003F;
27889
27890 /*
27891 * We isolated the bits and moved them to the bottom ... so display them
27892 */
27893 eht_om_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27894 ett_ieee80211_control_eht_om,
27895 NULL((void*)0), "EHT operating mode: 0x%02x", the_bits);
27896 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_rx_nss_ext, tvb,
27897 offset, 4, the_bits);
27898 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_chan_w_ext, tvb,
27899 offset, 4, the_bits);
27900 proto_tree_add_boolean(eht_om_tree, hf_ieee80211_he_eht_om_tx_nsts_ext, tvb,
27901 offset, 4, the_bits);
27902 proto_tree_add_uint(eht_om_tree, hf_ieee80211_he_eht_om_reserved, tvb,
27903 offset, 4, the_bits);
27904
27905}
27906
27907static void
27908dissect_a_control_srs(proto_tree *tree, tvbuff_t *tvb, int offset,
27909 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27910{
27911 proto_tree *srs_tree = NULL((void*)0);
27912 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000003FF;
27913
27914 srs_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27915 ett_ieee80211_control_srs,
27916 NULL((void*)0), "Simple response scheduling: 0x%02x",
27917 the_bits);
27918 proto_tree_add_uint(srs_tree, hf_ieee80211_he_srs_ppdu_resp_dur, tvb,
27919 offset, 4, the_bits);
27920 proto_tree_add_uint(srs_tree, hf_ieee80211_he_srs_reserved, tvb, offset, 4,
27921 the_bits);
27922}
27923
27924static void
27925dissect_a_control_aar(proto_tree *tree, tvbuff_t *tvb, int offset,
27926 uint32_t bits _U___attribute__((unused)), uint32_t start_bit)
27927{
27928 proto_tree *aar_tree = NULL((void*)0);
27929 unsigned the_bits = (tvb_get_letohl(tvb, offset) >> start_bit) & 0x000FFFFF;
27930
27931 aar_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4,
27932 ett_ieee80211_control_aar,
27933 NULL((void*)0), "AP assistance request: 0x%02x",
27934 the_bits);
27935 proto_tree_add_uint(aar_tree, hf_ieee80211_he_aar_assisted_ap_bitmap, tvb,
27936 offset, 4, the_bits);
27937 proto_tree_add_uint(aar_tree, hf_ieee80211_he_aar_reserved, tvb, offset, 4,
27938 the_bits);
27939}
27940
27941static void
27942dissect_ht_control(packet_info* pinfo, proto_tree *tree, tvbuff_t *tvb, int offset)
27943{
27944 proto_item *ti;
27945 proto_tree *htc_tree, *lac_subtree, *mfb_subtree;
27946 uint32_t htc;
27947 bool_Bool is_s1g = sta_is_s1g(pinfo);
27948
27949 ti = proto_tree_add_item_ret_uint(tree, hf_ieee80211_htc, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000, &htc);
27950 htc_tree = proto_item_add_subtree(ti, ett_htc_tree);
27951
27952 /* Check the HT vs. VHT bit. */
27953 proto_tree_add_item(htc_tree, hf_ieee80211_htc_vht, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27954 if (htc & HTC_VHT0x00000001) {
27955 /* VHT or HE */
27956 proto_tree_add_item(htc_tree, hf_ieee80211_htc_he, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
27957 if (htc & HTC_HE0x00000002) {
27958 /*
27959 * We have a 30-bit field, of which the first is a 4-bit Control ID which
27960 * determines how the rest is handled. There can be multiple fields.
27961 */
27962 proto_tree *a_control_tree = NULL((void*)0);
27963 proto_item *pi = NULL((void*)0);
27964 uint8_t start_bit_offset = 2;
27965
27966 a_control_tree = proto_tree_add_subtree_format(htc_tree, tvb, offset, 4,
27967 ett_htc_he_a_control, NULL((void*)0),
27968 "Aggregate Control: 0x%0x", htc >> 2);
27969 while (start_bit_offset < 32) {
27970 /* No enough space for Control ID */
27971 if (start_bit_offset >= 28) {
27972 dissect_a_control_padding(a_control_tree, tvb, offset, htc,
27973 start_bit_offset);
27974 break;
27975 }
27976 uint8_t control_id = (htc >> start_bit_offset) & 0x0F;
27977 start_bit_offset += 4;
27978 if (control_id != 0 || start_bit_offset == 6) {
27979 pi = proto_tree_add_uint(a_control_tree, hf_ieee80211_htc_he_ctrl_id,
27980 tvb, offset, 4, control_id);
27981 proto_item_append_text(pi, ": %s",
27982 val_to_str(pinfo->pool, control_id, a_control_control_id_vals,
27983 "Reserved (%u)"));
27984 }
27985 if (start_bit_offset > 31) {
27986 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_word);
27987 break;
27988 }
27989 switch (control_id) {
27990 case A_CONTROL_TRS0:
27991 /*
27992 * Padding looks like TRS ... so distinguish. If there are not
27993 * enough bits left it must be padding
27994 */
27995 if (start_bit_offset == 6)
27996 dissect_a_control_trs(a_control_tree, tvb, offset, htc,
27997 start_bit_offset);
27998 else
27999 dissect_a_control_padding(a_control_tree, tvb, offset, htc,
28000 start_bit_offset - 4);
28001 start_bit_offset += 26;
28002 break;
28003 case A_CONTROL_OM1:
28004 dissect_a_control_om(a_control_tree, tvb, offset, htc,
28005 start_bit_offset);
28006 start_bit_offset += 12;
28007 break;
28008 case A_CONTROL_HLA2:
28009 dissect_a_control_hla(a_control_tree, tvb, offset, htc,
28010 start_bit_offset);
28011 start_bit_offset += 26;
28012 break;
28013 case A_CONTROL_BSR3:
28014 dissect_a_control_bsr(a_control_tree, tvb, offset, htc,
28015 start_bit_offset);
28016 start_bit_offset += 26;
28017 break;
28018 case A_CONTROL_UPH4:
28019 dissect_a_control_uph(a_control_tree, tvb, offset, htc,
28020 start_bit_offset);
28021 start_bit_offset += 8;
28022 break;
28023 case A_CONTROL_BQR5:
28024 dissect_a_control_bqr(a_control_tree, tvb, offset, htc,
28025 start_bit_offset);
28026 start_bit_offset += 10;
28027 break;
28028 case A_CONTROL_CCI6:
28029 dissect_a_control_cci(a_control_tree, tvb, offset, htc,
28030 start_bit_offset);
28031 start_bit_offset += 8;
28032 break;
28033 case A_CONTROL_EHT_OM7:
28034 dissect_a_control_eht_om(a_control_tree, tvb, offset, htc,
28035 start_bit_offset);
28036 start_bit_offset += 6;
28037 break;
28038 case A_CONTROL_SRS8:
28039 dissect_a_control_srs(a_control_tree, tvb, offset, htc,
28040 start_bit_offset);
28041 start_bit_offset += 10;
28042 break;
28043 case A_CONTROL_AAR9:
28044 dissect_a_control_aar(a_control_tree, tvb, offset, htc,
28045 start_bit_offset);
28046 start_bit_offset += 20;
28047 break;
28048 case A_CONTROL_ONES15:
28049 if (start_bit_offset == 6) {
28050 dissect_a_control_ones(a_control_tree, tvb, offset, htc,
28051 start_bit_offset);
28052 } else {
28053 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_length);
28054 }
28055 start_bit_offset += 26;
28056 break;
28057 default:
28058 expert_add_info(pinfo, a_control_tree, &ei_ieee80211_invalid_control_id);
28059 start_bit_offset += 32; /* Abandon */
28060 break;
28061 }
28062 }
28063 } else {
28064 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mrq, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28065 if (!(htc & HTC_UNSOLICITED_MFB0x20000000)) {
28066 if (htc & HTC_MRQ0x00000004) {
28067 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28068 } else {
28069 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28070 }
28071 proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfsi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28072 } else {
28073 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))((((((htc) >> 9) & 0x7FFF)) & 0x7F) == 0x7F)) {
28074 proto_tree_add_item(htc_tree, hf_ieee80211_htc_compressed_msi, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28075 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ppdu_stbc_encoded, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28076 } else {
28077 proto_tree_add_item(htc_tree, hf_ieee80211_htc_msi_stbc_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28078 }
28079 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_l, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28080 }
28081 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28082 mfb_subtree = proto_item_add_subtree(ti, ett_mfb_subtree);
28083 if (is_s1g) {
28084 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28085 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28086 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_s1g_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28087 } else {
28088 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_num_sts, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28089 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_vht_mcs, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28090 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_bw, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28091 }
28092 /* This should be converted to dB by adding 22 */
28093 proto_tree_add_item(mfb_subtree, hf_ieee80211_htc_snr, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28094 if (!HTC_NO_FEEDBACK_PRESENT(HTC_MFB(htc))((((((htc) >> 9) & 0x7FFF)) & 0x7F) == 0x7F)) {
28095 proto_tree_add_item(htc_tree, hf_ieee80211_htc_gid_h, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28096 proto_tree_add_item(htc_tree, hf_ieee80211_htc_coding_type, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28097 proto_tree_add_item(htc_tree, hf_ieee80211_htc_fb_tx_type, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28098 } else {
28099 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved3, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28100 }
28101 proto_tree_add_item(htc_tree, hf_ieee80211_htc_unsolicited_mfb, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28102 }
28103 } else {
28104 /* Start: Link Adaptation Control */
28105 ti = proto_tree_add_item(htc_tree, hf_ieee80211_htc_ht_lac, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28106 lac_subtree = proto_item_add_subtree(ti, ett_lac_subtree);
28107 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_trq, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28108
28109 if (HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE)) {
28110 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_aseli, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28111 } else {
28112 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_mrq, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28113 if (HTC_LAC_MAI_MRQ(htc)(((((htc) >> 2) & 0xF)) & 0x1)) {
28114 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_msi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28115 } else {
28116 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mai_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28117 }
28118 }
28119
28120 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfsi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28121
28122 if (HTC_IS_ASELI(htc)((((htc) >> 2) & 0xF) == 0xE)) {
28123 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_command, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28124 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_asel_data, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28125 } else {
28126 proto_tree_add_item(lac_subtree, hf_ieee80211_htc_lac_mfb, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28127 }
28128 /* End: Link Adaptation Control */
28129
28130 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_pos, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28131 proto_tree_add_item(htc_tree, hf_ieee80211_htc_cal_seq, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28132 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved1, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28133 proto_tree_add_item(htc_tree, hf_ieee80211_htc_csi_steering, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28134
28135 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ndp_announcement, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28136 proto_tree_add_item(htc_tree, hf_ieee80211_htc_reserved2, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28137 }
28138
28139 /*
28140 * These bits are part of the Aggregate Control field for 802.11ax
28141 */
28142 if (!(htc & HTC_HE0x00000002)) {
28143 proto_tree_add_item(htc_tree, hf_ieee80211_htc_ac_constraint, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28144 proto_tree_add_item(htc_tree, hf_ieee80211_htc_rdg_more_ppdu, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
28145 }
28146
28147 /* offset += 2; */
28148}
28149
28150static int
28151dissect_mesh_control(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, int meshoff)
28152{
28153 proto_item *msh_fields;
28154 proto_tree *msh_tree;
28155 int meshctl_len;
28156
28157 msh_fields = proto_tree_add_item(tree, hf_ieee80211_mesh_control_field, tvb, meshoff, 6, ENC_NA0x00000000);
28158 msh_tree = proto_item_add_subtree(msh_fields, ett_msh_control);
28159 meshctl_len = add_ff_mesh_control(msh_tree, tvb, pinfo, meshoff);
28160 proto_item_set_len(msh_fields, meshctl_len);
28161 return meshctl_len;
28162}
28163
28164#define IEEE80211_COMMON_OPT_BROKEN_FC0x00000001 0x00000001
28165#define IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002 0x00000002
28166#define IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004 0x00000004
28167
28168static void
28169dissect_frame_control(proto_tree *tree, tvbuff_t *tvb, uint32_t option_flags,
28170 uint32_t offset, packet_info *pinfo, bool_Bool isDMG)
28171{
28172 uint16_t fcf, flags, frame_type_subtype;
28173 proto_tree *fc_tree, *flag_tree;
28174 proto_item *fc_item, *flag_item, *hidden_item, *ti;
28175 uint32_t swap_offset = 0;
28176 bool_Bool is_s1g = sta_is_s1g(pinfo);
28177 bool_Bool s1g_has_protected_htc_order;
28178
28179 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))
;
28180
28181 flags = FCF_FLAGS(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))
;
28182 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)))
;
28183
28184 /* Swap offset... */
28185 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001)
28186 {
28187 swap_offset += 1;
28188 }
28189
28190 proto_tree_add_uint(tree, hf_ieee80211_fc_frame_type_subtype, tvb, offset + swap_offset, 1, frame_type_subtype);
28191
28192 fc_item = proto_tree_add_item(tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
28193
28194 fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
28195
28196 /* at this point, we can permanently fix the offset, so that it will be used to parse the fcf first 8 bits */
28197 offset += swap_offset;
28198
28199 proto_tree_add_item(fc_tree, hf_ieee80211_fc_proto_version, tvb, offset, 1, ENC_NA0x00000000);
28200 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_type, tvb, offset, 1, ENC_NA0x00000000);
28201 proto_tree_add_item(fc_tree, hf_ieee80211_fc_frame_subtype, tvb, offset, 1, ENC_NA0x00000000);
28202 /* Changing control frame extension for extension frames */
28203 if(IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 1) {
28204 proto_tree_add_uint(fc_tree, hf_ieee80211_fc_frame_extension, tvb, offset, 1, FCF_FRAME_EXTENSION(fcf)(((fcf) & 0xF00) >> 8));
28205 }
28206
28207 /* Reswap offset...*/
28208 if(option_flags & IEEE80211_COMMON_OPT_BROKEN_FC0x00000001)
28209 {
28210 offset -= 1;
28211 proto_item_append_text(fc_item, "(Swapped)");
28212 } else {
28213 offset += 1;
28214 }
28215
28216 /*
28217 * S1G has a different format in the flags portion.
28218 */
28219 if (frame_type_subtype == EXTENSION_S1G_BEACON0x31) {
28220 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_next_tbtt_present, tvb,
28221 offset, 1, ENC_NA0x00000000);
28222 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_compressed_ssid_present,
28223 tvb, offset, 1, ENC_NA0x00000000);
28224 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_ano_present, tvb,
28225 offset, 1, ENC_NA0x00000000);
28226 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_bss_bw, tvb, offset, 1,
28227 ENC_NA0x00000000);
28228 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_security, tvb, offset, 1,
28229 ENC_NA0x00000000);
28230 proto_tree_add_item(fc_tree, hf_ieee80211_fc_s1g_ap_pm, tvb, offset, 1,
28231 ENC_NA0x00000000);
28232
28233 return;
28234 }
28235
28236 /* Flags */
28237 flag_item = proto_tree_add_item(fc_tree, hf_ieee80211_fc_flags, tvb, offset, 1, ENC_NA0x00000000);
28238 flag_tree = proto_item_add_subtree(flag_item, ett_proto_flags);
28239 if (is_s1g && FCF_FRAME_TYPE(fcf)(((fcf) & 0xC) >> 2) == CONTROL_FRAME0x01) {
28240 proto_tree_add_item(flag_tree, hf_ieee80211_fc_s1g_bw_indication, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28241 proto_tree_add_item(flag_tree, hf_ieee80211_fc_s1g_dynamic_indication, tvb, offset, 1, ENC_NA0x00000000);
28242 } else if(IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 0) {
28243 /* Changing control frame flags for extension frames */
28244 proto_tree_add_item(flag_tree, hf_ieee80211_fc_data_ds, tvb, offset, 1, ENC_NA0x00000000);
28245 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_to_ds, tvb, offset, 1, ENC_NA0x00000000);
28246 proto_item_set_hidden(hidden_item);
28247 hidden_item = proto_tree_add_item(flag_tree, hf_ieee80211_fc_from_ds, tvb, offset, 1, ENC_NA0x00000000);
28248 proto_item_set_hidden(hidden_item);
28249 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_frag, tvb, offset, 1, ENC_NA0x00000000);
28250 ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_retry, tvb, offset, 1, ENC_NA0x00000000);
28251 if( IS_RETRY(flags)((flags) & 0x08) )
28252 {
28253 expert_add_info(pinfo, ti, &ei_ieee80211_fc_retry);
28254 wlan_stats.fc_retry = 1;
28255 }
28256 }
28257 proto_tree_add_item(flag_tree, hf_ieee80211_fc_pwr_mgt, tvb, offset, 1, ENC_NA0x00000000);
28258 proto_tree_add_item(flag_tree, hf_ieee80211_fc_more_data, tvb, offset, 1, ENC_NA0x00000000);
28259 /* Changing control frame flags for extension frames */
28260 /* TODO: add support for S1G subtypes 3 and 10 fields: flow control, next TWT
28261 info present, more data, poll type */
28262 /* All S1G frames have the Protected Frame and +HTC/Order subfields except for
28263 Control frames with subtypes 3 and 10 */
28264 s1g_has_protected_htc_order = is_s1g && (FCF_FRAME_TYPE(fcf)(((fcf) & 0xC) >> 2) != CONTROL_FRAME0x01
28265 || (FCF_FRAME_SUBTYPE(fcf)(((fcf) & 0xF0) >> 4) != 3 && FCF_FRAME_SUBTYPE(fcf)(((fcf) & 0xF0) >> 4) != 10));
28266 if (s1g_has_protected_htc_order || (!is_s1g && IS_FRAME_EXTENSION(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? 1 : 0)
== 0)) {
28267 proto_tree_add_item(flag_tree, hf_ieee80211_fc_protected, tvb, offset, 1, ENC_NA0x00000000);
28268 }
28269 if (s1g_has_protected_htc_order || !is_s1g) {
28270 ti = proto_tree_add_item(flag_tree, hf_ieee80211_fc_order, tvb, offset, 1, ENC_NA0x00000000);
28271 if (option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) {
28272 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
28273 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
28274 /*
28275 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
28276 *
28277 * The +HTC/Order subfield is 1 bit in length. It is used for two
28278 * purposes:
28279 *
28280 * -- It is set to 1 in a non-QoS Data frame transmitted by a
28281 * non-QoS STA to indicate that the frame contains an MSDU,
28282 * or fragment thereof, that is being transferred using the
28283 * StrictlyOrdered service class.
28284 *
28285 * -- It is set to 1 in a QoS Data or Management frame transmitted
28286 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
28287 * of the TXVECTOR to indicate that the frame contains an
28288 * HT Control field.
28289 *
28290 * Otherwise, the +HTC/Order subfield is set to 0.
28291 *
28292 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
28293 * transmitted by a DMG STA.
28294 *
28295 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
28296 * QoS frames, also indicates that there's an HT Control field.
28297 *
28298 * For DMG frames, we flag this as an error.
28299 *
28300 * XXX - as I read the above, this shouldn't be set except for
28301 * HT, VHT, or HE PHYs; however, some QoS frames appear to have
28302 * it set, and have an HT Control field, even though they don't
28303 * have HT/VHT/HE radiotap fields. That might be because the
28304 * code that provided the header didn't provide those radiotap
28305 * fields, or because there is no radiotap header, meaning that
28306 * they might still be HT/VHT/HE frames, so we don't report it
28307 * as an error.
28308 */
28309 if (isDMG) {
28310 /*
28311 * DMG, so flag this as having +HTC/Order set, as it's not supposed
28312 * to be set.
28313 */
28314 expert_add_info(pinfo, ti, &ei_ieee80211_htc_in_dmg_packet);
28315 }
28316 }
28317 }
28318 }
28319 }
28320}
28321
28322static void
28323dissect_durid(proto_tree *hdr_tree, tvbuff_t *tvb, uint16_t fts, int offset)
28324{
28325 uint16_t durid = tvb_get_letohs(tvb, offset);
28326
28327 if (durid < 0x8000) {
28328 proto_tree_add_uint_format_value(hdr_tree, hf_ieee80211_did_duration, tvb,
28329 offset, 2, durid, "%u microseconds", durid);
28330 } else if (((durid & 0xC000) == 0xC000) &&
28331 ((durid & 0x3FFF) > 0) && ((durid & 0x3FFF) <= 2007) &&
28332 (fts == CTRL_PS_POLL0x1A)) {
28333 proto_tree_add_item(hdr_tree, hf_ieee80211_assoc_id, tvb, offset, 2,
28334 ENC_LITTLE_ENDIAN0x80000000);
28335 } else if (durid == 0x8000) {
28336 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
28337 offset, 2, durid, "Duration/ID: %u", durid);
28338 } else {
28339 proto_tree_add_uint_format(hdr_tree, hf_ieee80211_did_duration, tvb,
28340 offset, 2, durid, "Duration/ID: %u (reserved)", durid & 0x3FFF);
28341 }
28342}
28343
28344
28345static void
28346dissect_vendor_ie_ht(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
28347 unsigned offset, proto_item *item, proto_item *ti_len, int tag_len)
28348{
28349
28350 uint8_t type;
28351
28352 proto_tree_add_item_ret_uint8(tree, hf_ieee80211_ht_pren_type, tvb, offset, 1, ENC_NA0x00000000, &type);
28353 offset += 1;
28354 tag_len -= 1;
28355
28356
28357 switch(type){
28358 case 51:
28359 dissect_ht_capability_ie_common(tvb, pinfo, tree, offset, tag_len, ti_len, true1);
28360 proto_item_append_text(item, ": HT Capabilities (802.11n D1.10)");
28361 break;
28362
28363 case 52:
28364 dissect_ht_info_ie_1_0(tvb, pinfo, tree, offset, tag_len, ti_len);
28365 proto_item_append_text(item, ": HT Additional Capabilities (802.11n D1.00)");
28366 break;
28367
28368 default:
28369 proto_tree_add_item(tree, hf_ieee80211_ht_pren_unknown, tvb, offset, tag_len, ENC_NA0x00000000);
28370 break;
28371 }
28372
28373}
28374
28375static int
28376dissect_interworking(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28377{
28378 int tag_len = tvb_reported_length(tvb);
28379 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28380 int offset = 0;
28381 static int * const ieee80211_tag_interworking[] = {
28382 &hf_ieee80211_tag_interworking_access_network_type,
28383 &hf_ieee80211_tag_interworking_internet,
28384 &hf_ieee80211_tag_interworking_asra,
28385 &hf_ieee80211_tag_interworking_esr,
28386 &hf_ieee80211_tag_interworking_uesa,
28387 NULL((void*)0)
28388 };
28389
28390 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_interworking, ENC_LITTLE_ENDIAN0x80000000);
28391 offset += 1;
28392
28393 if ((tag_len == (1 + 2)) || (tag_len == (1 + 2 + 6))) {
28394 dissect_venue_info(tree, tvb, offset);
28395 offset += 2;
28396 }
28397
28398 if ((tag_len == (1 + 6)) || (tag_len == (1 + 2 + 6))) {
28399 proto_tree_add_item(tree, hf_ieee80211_tag_interworking_hessid,
28400 tvb, offset, 6, ENC_NA0x00000000);
28401 offset += 6;
28402 }
28403
28404 if ((tag_len != 1) && (tag_len != (1 + 2)) && (tag_len != (1 + 6)) && (tag_len != (1 + 2 + 6))) {
28405 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28406 "Invalid Interworking element length");
28407 }
28408
28409 return offset;
28410}
28411
28412static int
28413dissect_qos_map_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28414{
28415 int tag_len = tvb_reported_length(tvb);
28416 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28417 int offset = 0;
28418 uint8_t left;
28419 uint8_t val, val2;
28420 int i;
28421 proto_item *dscp_item, *item;
28422 proto_tree *dscp_tree;
28423
28424 if (tag_len < 16 || tag_len & 1) {
28425 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_bad_length,
28426 "Truncated QoS Map Set element");
28427 return tvb_captured_length(tvb);
28428 }
28429
28430 left = tag_len - 16;
28431 while (left >= 2) {
28432 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_dscp_exc,
28433 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28434 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
28435
28436 item = proto_tree_add_item(dscp_tree,
28437 hf_ieee80211_tag_qos_map_set_dscp_exc_val,
28438 tvb, offset, 1, ENC_NA0x00000000);
28439 val = tvb_get_uint8(tvb, offset);
28440 if (val > 63 && val != 255) {
28441 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28442 "Invalid DSCP Value");
28443 }
28444 offset++;
28445
28446 item = proto_tree_add_item(dscp_tree,
28447 hf_ieee80211_tag_qos_map_set_dscp_exc_up,
28448 tvb, offset, 1, ENC_NA0x00000000);
28449 val2 = tvb_get_uint8(tvb, offset);
28450 if (val2 > 7) {
28451 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28452 "Invalid User Priority");
28453 }
28454 offset++;
28455
28456 proto_item_append_text(dscp_item, " (0x%02x: UP %u)", val, val2);
28457
28458 left -= 2;
28459 }
28460
28461 for (i = 0; i < 8; i++) {
28462 dscp_item = proto_tree_add_item(tree, hf_ieee80211_tag_qos_map_set_range,
28463 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28464 dscp_tree = proto_item_add_subtree(dscp_item, ett_qos_map_set_exception);
28465
28466 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_low,
28467 tvb, offset, 1, ENC_NA0x00000000);
28468 val = tvb_get_uint8(tvb, offset);
28469 if (val > 63 && val != 255) {
28470 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28471 "Invalid DSCP Value");
28472 }
28473 offset++;
28474
28475 item = proto_tree_add_item(dscp_tree, hf_ieee80211_tag_qos_map_set_high,
28476 tvb, offset, 1, ENC_NA0x00000000);
28477 val2 = tvb_get_uint8(tvb, offset);
28478 if ((val2 > 63 && val2 != 255) || val2 < val ||
28479 (val == 255 && val2 != 255) || (val != 255 && val2 == 255)) {
28480 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
28481 "Invalid DSCP Value");
28482 }
28483 offset++;
28484
28485 if (val == 255 && val2 == 255) {
28486 proto_item_append_text(dscp_item, " (UP %u not in use)", i);
28487 } else {
28488 proto_item_append_text(dscp_item, " (0x%02x-0x%02x: UP %u)",
28489 val, val2, i);
28490 }
28491 }
28492
28493 return tvb_captured_length(tvb);
28494}
28495
28496static int
28497dissect_roaming_consortium(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
28498{
28499 int tag_len = tvb_reported_length(tvb);
28500 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
28501 int offset = 0;
28502 proto_item* item;
28503 uint8_t oi_lens, oi1_len, oi2_len;
28504
28505 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
28506 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28507 offset += 1;
28508
28509 oi_lens = tvb_get_uint8(tvb, offset);
28510 oi1_len = oi_lens & 0x0f;
28511 oi2_len = (oi_lens & 0xf0) >> 4;
28512 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1_len,
28513 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28514 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2_len,
28515 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
28516 offset += 1;
28517
28518 if (offset + oi1_len > tag_len) {
28519 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28520 "Truncated Roaming Consortium element");
28521 return tvb_captured_length(tvb);
28522 }
28523
28524 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi1,
28525 tvb, offset, oi1_len, ENC_NA0x00000000);
28526 add_manuf(item, tvb, offset);
28527 offset += oi1_len;
28528
28529 if (offset + oi2_len > tag_len) {
28530 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
28531 "Truncated Roaming Consortium element");
28532 return tvb_captured_length(tvb);
28533 }
28534
28535 if (oi2_len > 0) {
28536 item = proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi2,
28537 tvb, offset, oi2_len, ENC_NA0x00000000);
28538 add_manuf(item, tvb, offset);
28539 offset += oi2_len;
28540 }
28541
28542 if (tag_len > offset) {
28543 proto_tree_add_item(tree, hf_ieee80211_tag_roaming_consortium_oi3,
28544 tvb, offset, tag_len - offset, ENC_NA0x00000000);
28545 }
28546
28547 return tvb_captured_length(tvb);
28548}
28549
28550static void
28551dissect_extended_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28552{
28553 if (len < 2) {
28554 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28555 "Extended Request must be at least 2 octets long");
28556 return;
28557 }
28558
28559 proto_tree_add_item(tree, hf_ieee80211_tag_extended_request_id, tvb, offset, 1, ENC_NA0x00000000);
28560 offset += 1;
28561 len -= 1;
28562
28563 while (len--) {
28564 proto_tree_add_item(tree, hf_ieee80211_tag_extended_request_extension, tvb, offset, 1, ENC_NA0x00000000);
28565 offset += 1;
28566 }
28567}
28568
28569static void
28570dissect_he_6ghz_band_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28571{
28572 if (len != 2) {
28573 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28574 "HE 6 GHz Band Capabilities must be at 2 octets long");
28575 return;
28576 }
28577
28578 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_he_6ghz_cap_inf,
28579 ett_tag_he_6ghz_cap_inf_tree,
28580 ieee80211_tag_he_6ghz_cap_inf,
28581 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
28582}
28583
28584static void
28585dissect_secure_ltf_parameters(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28586 proto_tree *tree, int offset, int len _U___attribute__((unused)))
28587{
28588 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_params_counter, tvb,
28589 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
28590 offset += 6;
28591
28592 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_generation_sac, tvb,
28593 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28594 offset += 2;
28595
28596 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_management_sac, tvb,
28597 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28598 offset += 2;
28599
28600 proto_tree_add_item(tree, hf_ieee80211_tag_secure_ltf_result_ltf_ofs, tvb,
28601 offset, 1, ENC_NA0x00000000);
28602}
28603
28604static void
28605dissect_ista_availability_window(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, int offset, int len)
28606{
28607 uint16_t count = tvb_get_letohs(tvb, offset) & 0x1FF;
28608 char avail_string[513];
28609 char pad_string[8];
28610 int i = 0, j;
28611 int avail_bits_offset;
28612 int8_t bits;
28613
28614 memset(avail_string, 0x0, sizeof(avail_string));
28615 memset(pad_string, 0x0, sizeof(pad_string));
28616
28617 /* These are at the same level as the avail bits */
28618 proto_tree_add_item(tree, hf_ieee80211_ftm_ista_availability_count,
28619 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28620 proto_tree_add_item(tree, hf_ieee80211_ftm_ista_availability_reserved,
28621 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28622 offset += 2;
28623
28624 avail_bits_offset = offset;
28625
28626 /* Now, extract count bits and set up the string 8-bits at a time */
28627 for (i = 1; i <= (count / 8); i++) {
28628 bits = tvb_get_uint8(tvb, offset);
28629
28630 for (j = 0; j < 8; j++) {
28631 avail_string[(i - 1) * 8 + j] = (bits & 0x01) ? '1' : '0';
28632 bits = bits >> 1;
28633 }
28634
28635 offset += 1;
28636 }
28637
28638 avail_string[i * 8] = 0;
28639
28640 if (count % 8) {
28641 /* Deal with the remaining bits */
28642 bits = tvb_get_uint8(tvb, offset);
28643
28644 for (j = (i - 1) * 8; j < count; j++) {
28645 avail_string[j] = (bits & 0x01) ? '1' : '0';
28646 bits = bits >> 1;
28647 }
28648
28649 avail_string[j] = 0;
28650
28651 /* Deal with the padding */
28652 for (j = 0; j < 8 - (count % 8); j++) {
28653 pad_string[j] = (bits & 0x01) ? '1' : '0';
28654 bits = bits >> 1;
28655 }
28656
28657 pad_string[j] = 0;
28658 }
28659
28660 proto_tree_add_string(tree, hf_ieee80211_ftm_ista_avail_bits, tvb,
28661 avail_bits_offset, (count + 7) / 8, avail_string);
28662
28663 if (((len - 2) * 8) != count) {
28664 proto_tree_add_string(tree, hf_ieee80211_ftm_ista_avail_pad, tvb,
28665 offset, 1, pad_string);
28666 }
28667}
28668
28669static int * const rsta_avail_info_header[] = {
28670 &hf_ieee80211_ftm_rsta_count,
28671 &hf_ieee80211_ftm_rsta_avail_window_bcast_fmt,
28672 NULL((void*)0)
28673};
28674
28675static int * const rsta_availability_subfield_hdr1[] = {
28676 &hf_ieee80211_ftm_rsta_partial_tsf_timer1,
28677 &hf_ieee80211_ftm_rsta_duration1,
28678 &hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1,
28679 &hf_ieee80211_ftm_rsta_periodicity1,
28680 NULL((void*)0)
28681};
28682
28683static int * const rsta_availability_subfield_hdr2[] = {
28684 &hf_ieee80211_ftm_rsta_partial_tsf_timer,
28685 &hf_ieee80211_ftm_rsta_duration,
28686 &hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved,
28687 &hf_ieee80211_ftm_rsta_periodicity,
28688 &hf_ieee80211_ftm_rsta_format_and_bandwidth,
28689 &hf_ieee80211_ftm_rsta_reserved,
28690 NULL((void*)0)
28691};
28692
28693static void
28694dissect_rsta_availability_window(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28695 proto_tree *tree, int offset, int len _U___attribute__((unused)))
28696{
28697 uint8_t count = tvb_get_uint8(tvb, offset) &0x7F;
28698 int i;
28699
28700 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_ftm_rsta_header,
28701 ett_rsta_avail_header, rsta_avail_info_header, ENC_NA0x00000000);
28702
28703 offset += 1;
28704
28705 for (i = 0; i < count; i++) {
28706 proto_tree *subfield_tree = NULL((void*)0);
28707 bool_Bool has_passive_ranging_params =
28708 (tvb_get_letohl(tvb, offset) >> 23) & 1;
28709
28710 subfield_tree = proto_tree_add_subtree_format(tree, tvb, offset,
28711 has_passive_ranging_params ? 5 : 4,
28712 ett_rsta_avail_tree, NULL((void*)0),
28713 "Availability Window Information %d",
28714 i);
28715 if (has_passive_ranging_params) {
28716 proto_tree_add_bitmask(subfield_tree, tvb, offset,
28717 hf_ieee80211_ftm_rsta_avail_subfield_long,
28718 ett_rsta_avail_subfield,
28719 rsta_availability_subfield_hdr2,
28720 ENC_LITTLE_ENDIAN0x80000000);
28721 offset += 5;
28722 } else {
28723 proto_tree_add_bitmask(subfield_tree, tvb, offset,
28724 hf_ieee80211_ftm_rsta_avail_subfield_short,
28725 ett_rsta_avail_subfield,
28726 rsta_availability_subfield_hdr1,
28727 ENC_LITTLE_ENDIAN0x80000000);
28728 offset += 4;
28729 }
28730 }
28731}
28732
28733/*
28734 * "Comeback after subfield shall not be present (ie, zero octets) in PASN
28735 * authentication frames from a non-AP STA."
28736 *
28737 * Attempt to figure out if the Comeback After field is present.
28738 */
28739#define PASN_COMEBACK_INFO_PRESENT0x01 0x01
28740#define PASN_GROUP_KEY_PRESENT0x02 0x02
28741
28742static bool_Bool
28743has_comeback_after(uint8_t flags, tvbuff_t *tvb, int offset, int len _U___attribute__((unused)))
28744{
28745 int tvb_left = tvb_captured_length_remaining(tvb, offset);
28746 bool_Bool comeback_after = false0;
28747 //int cookie_len = 0;
28748 int fixed_len = 0;
28749
28750 if (flags & PASN_GROUP_KEY_PRESENT0x02) { /* Group and Key present */
28751 fixed_len += 2;
28752 }
28753
28754 /*
28755 * If there is a comeback field and the comeback_after is present ...
28756 */
28757 if (flags & 0x01) {
28758 /* Check if the comeback_after field is there? */
28759 if (tvb_get_letohs(tvb, offset) <= (tvb_left - fixed_len)) {
28760 comeback_after = true1;
28761 }
28762 }
28763
28764 return comeback_after;
28765}
28766
28767static int * const pasn_params_fields[] = {
28768 &hf_ieee80211_tag_pasn_params_comeback_info_present,
28769 &hf_ieee80211_tag_pasn_params_group_and_key_present,
28770 &hf_ieee80211_tag_pasn_parameters_reserved,
28771 NULL((void*)0)
28772};
28773
28774static const range_string wrapped_data_fmt_rvals[] = {
28775 { 0, 0, "No wrapped data" },
28776 { 1, 1, "Fast BSS Transition Wrapped Data" },
28777 { 2, 2, "FILS Shared Key authentication without PFS Wrapped Data" },
28778 { 3, 3, "SAE Wrapped Data" },
28779 { 4, 255, "Reserved" },
28780 { 0, 0, NULL((void*)0) }
28781};
28782
28783static void
28784dissect_pasn_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
28785{
28786 int public_key_len = 0;
28787 unsigned pasn_control = tvb_get_uint8(tvb, offset);
28788
28789 if (len < 2) {
28790 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
28791 "PASN Parameters must be at least 2 octets long");
28792 return;
28793 }
28794
28795 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
28796 hf_ieee80211_tag_pasn_parameters_control,
28797 ett_pasn_parameters, pasn_params_fields,
28798 ENC_LITTLE_ENDIAN0x80000000,
28799 BMT_NO_FALSE0x04 | BMT_NO_INT0x02);
28800 offset += 1;
28801
28802 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_parameters_wrapped_fmt,
28803 tvb, offset, 1, ENC_NA0x00000000);
28804 offset += 1;
28805
28806 /*
28807 * If the Comeback field is present, it might not have a Comeback After
28808 * field. Use the following heuristic function to check.
28809 */
28810 if (pasn_control & PASN_COMEBACK_INFO_PRESENT0x01) {
28811 proto_tree *comeback_tree = NULL((void*)0);
28812 proto_item *cbi = NULL((void*)0);
28813 uint8_t cookie_len;
28814
28815 comeback_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
28816 ett_pasn_comeback_tree, &cbi, "Comeback field");
28817
28818 if (has_comeback_after(pasn_control, tvb, offset, len)) {
28819 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_comeback_after,
28820 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28821 offset += 2;
28822 }
28823
28824 cookie_len = tvb_get_uint8(tvb, offset);
28825
28826 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_cookie_length,
28827 tvb, offset, 1, ENC_NA0x00000000);
28828 offset += 1;
28829
28830 if (cookie_len) {
28831 proto_tree_add_item(comeback_tree, hf_ieee80211_tag_pasn_cookie,
28832 tvb, offset, cookie_len, ENC_NA0x00000000);
28833 offset += cookie_len;
28834 }
28835 }
28836
28837 if (pasn_control & PASN_GROUP_KEY_PRESENT0x02) {
28838 public_key_len = tvb_get_uint8(tvb, offset + 2);
28839
28840 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_finite_cyclic_group_id, tvb,
28841 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
28842 offset += 2;
28843
28844 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_ephemeral_public_key_len,
28845 tvb, offset, 1, ENC_NA0x00000000);
28846 offset += 1;
28847
28848 if (public_key_len) {
28849 proto_tree_add_item(tree, hf_ieee80211_tag_pasn_ephemeral_public_key, tvb,
28850 offset, public_key_len, ENC_NA0x00000000);
28851 }
28852 }
28853}
28854
28855static int * const sta_control_hdrs[] = {
28856 &hf_ieee80211_eht_profile_link_id,
28857 &hf_ieee80211_eht_profile_complete_profile,
28858 &hf_ieee80211_eht_profile_mac_address_present,
28859 &hf_ieee80211_eht_profile_beacon_interval_present,
28860 &hf_ieee80211_eht_profile_tsf_offset_present,
28861 &hf_ieee80211_eht_profile_dtim_info_present,
28862 &hf_ieee80211_eht_profile_nstr_link_pair_present,
28863 &hf_ieee80211_eht_profile_nstr_bitmap_size,
28864 &hf_ieee80211_eht_profile_bss_params_change_count_present,
28865 &hf_ieee80211_eht_profile_reserved,
28866 NULL((void*)0)
28867};
28868
28869static int * const probe_sta_control_hdrs[] = {
28870 &hf_ieee80211_eht_profile_link_id,
28871 &hf_ieee80211_eht_profile_complete_profile,
28872 &hf_ieee80211_eht_profile_probe_reserved,
28873 NULL((void*)0)
28874};
28875
28876static const range_string eht_reconfig_op_type_rvals[] = {
28877 { 0, 0, "AP Removal" },
28878 { 1, 1, "Operation Parameter Update" },
28879 { 2, 2, "Add Link" },
28880 { 3, 3, "Delete Link" },
28881 { 4, 15, "Reserved" },
28882 { 0, 0, NULL((void*)0) }
28883};
28884
28885static int * const reconfig_sta_control_hdrs[] = {
28886 &hf_ieee80211_eht_profile_link_id,
28887 &hf_ieee80211_eht_profile_complete_profile,
28888 &hf_ieee80211_eht_profile_mac_address_present,
28889 &hf_ieee80211_eht_profile_removal_timer_present,
28890 &hf_ieee80211_eht_profile_reconfig_operation_type,
28891 &hf_ieee80211_eht_profile_operation_para_present,
28892 &hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size,
28893 &hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present,
28894 &hf_ieee80211_eht_profile_reconfig_reserved,
28895 NULL((void*)0)
28896};
28897
28898static int * const prio_access_sta_control_hdrs[] = {
28899 &hf_ieee80211_eht_profile_link_id,
28900 &hf_ieee80211_eht_profile_prio_acc_reserved,
28901 NULL((void*)0)
28902};
28903
28904static int * const reconfig_presence_indi_hdrs[] = {
28905 &hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present,
28906 &hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present,
28907 &hf_ieee80211_eht_sta_profile_presence_indi_reserved,
28908 NULL((void*)0)
28909};
28910
28911static int * const reconfig_operation_para_info_hdrs[] = {
28912 &hf_ieee80211_eht_sta_profile_operation_para_info_max_mpdu_length,
28913 &hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length,
28914 &hf_ieee80211_eht_sta_profile_operation_para_info_pad,
28915 NULL((void*)0)
28916};
28917
28918/* Presence Bitmap in ML Control */
28919/* Basic */
28920#define EHT_LINK_ID0x01 0x01
28921#define EHT_BSS_PARAMS0x02 0x02
28922#define EHT_MEDIUM_SYNC0x04 0x04
28923#define EHT_EML_CAPA0x08 0x08
28924#define EHT_MLD_CAPA0x10 0x10
28925#define EHT_MLD_ID0x20 0x20
28926#define EHT_EXT_MLD_CAPA0x40 0x40
28927/* Probe */
28928#define EHT_PML_MLD_ID0x01 0x01
28929#define EHT_PML_MLD_MAC0x02 0x02
28930/* Reconf */
28931#define EHT_RECONF_MLD_MAC0x01 0x01
28932#define EHT_RECONF_EML_CAPA0x02 0x02
28933#define EHT_RECONF_MLD_CAPA0x04 0x04
28934#define EHT_RECONF_EXT_MLD_CAPA0x08 0x08
28935
28936#define BASIC_MULTI_LINK0 0
28937#define PROBE_MULTI_LINK1 1
28938#define RECONFIGURATION_MULTI_LINK2 2
28939#define TDLS_MULTI_LINK3 3
28940#define PRIORITY_ACCESS_MULTI_LINK4 4
28941
28942/* Bits from the STA Control field */
28943/* Basic */
28944#define STA_CTRL_LINK_ID0x000F 0x000F
28945#define STA_CTRL_COMPLETE_PROFILE0x0010 0x0010
28946#define STA_CTRL_MAC_ADDR_PRESENT0x0020 0x0020
28947#define STA_CTRL_BEACON_INT_PRESENT0x0040 0x0040
28948#define STA_CTRL_TSF_OFFSET_PRESENT0x0080 0x0080
28949#define STA_CTRL_DTIM_INFO_PRESENT0x0100 0x0100
28950#define STA_CTRL_NSTR_LINK_PAIR_PRESENT0x0200 0x0200
28951#define STA_CTRL_NSTR_BITMAP_SIZE0x0400 0x0400
28952#define STA_CTRL_BSS_PARAMS_CHANGE_CNT_PRESENT0x0800 0x0800
28953#define STA_CTRL_RESERVED0xF000 0xF000
28954
28955/* Reconf */
28956#define AP_REMOVAL_TIMER_PRESENT0x0040 0x0040
28957#define OPERATION_PARAMS_PRESENT0x0800 0x0800
28958#define RECONF_NSTR_BITMAP_SIZE0x1000 0x1000
28959#define RECONF_NSTR_BITMAP_PRESENT0x2000 0x2000
28960
28961static int
28962dissect_multi_link_per_sta(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
28963 proto_tree *tree,
28964 uint8_t multi_link_type,
28965 int *found_link_id)
28966{
28967 proto_tree *subelt_tree = NULL((void*)0), *sta_info_tree = NULL((void*)0);
28968 int offset = 0;
28969 int len = tvb_captured_length_remaining(tvb, offset);
28970 uint16_t sta_control = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
28971 uint8_t sta_info_len = 0;
28972 int start_offset = offset;
28973 uint8_t link_id;
28974
28975 subelt_tree = proto_tree_add_subtree(tree, tvb, offset, len,
28976 ett_eht_multi_link_per_sta,
28977 NULL((void*)0), "Per-STA Profile");
28978
28979 switch (multi_link_type) {
28980 case BASIC_MULTI_LINK0:
28981 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
28982 *found_link_id = link_id;
28983 proto_item_append_text(subelt_tree, ", Link-ID = %d", link_id);
28984
28985 proto_tree_add_bitmask(subelt_tree, tvb, offset,
28986 hf_ieee80211_eht_profile_sta_control,
28987 ett_eht_multi_link_sta_control,
28988 sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
28989 offset += 2;
28990
28991 /* Check the length of STA Info is 0 */
28992 if (offset >= start_offset + len) {
28993 return len;
28994 }
28995
28996 sta_info_len = tvb_get_uint8(tvb, offset);
28997 sta_info_tree = proto_tree_add_subtree(subelt_tree, tvb, offset,
28998 sta_info_len,
28999 ett_eht_multi_link_per_sta_info,
29000 NULL((void*)0), "STA Info");
29001
29002 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_len,
29003 tvb, offset, 1, ENC_NA0x00000000);
29004 offset += 1;
29005
29006 if (sta_control & STA_CTRL_MAC_ADDR_PRESENT0x0020) {
29007 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_mac,
29008 tvb, offset, 6, ENC_NA0x00000000);
29009 offset += 6;
29010 }
29011
29012 if (sta_control & STA_CTRL_BEACON_INT_PRESENT0x0040) {
29013 proto_tree_add_item(sta_info_tree,
29014 hf_ieee80211_eht_sta_profile_info_beacon,
29015 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29016 offset += 2;
29017 }
29018
29019 if (sta_control & STA_CTRL_TSF_OFFSET_PRESENT0x0080) {
29020 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_tsf_offset,
29021 tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
29022 offset += 8;
29023 }
29024
29025 if (sta_control & STA_CTRL_DTIM_INFO_PRESENT0x0100) {
29026 proto_tree * dtim_tree;
29027
29028 dtim_tree = proto_tree_add_subtree(sta_info_tree, tvb, offset, 2,
29029 ett_eht_multi_link_sta_dtim, NULL((void*)0), "DTIM Info");
29030
29031 proto_tree_add_item(dtim_tree,
29032 hf_ieee80211_eht_sta_profile_info_dtim_count,
29033 tvb, offset, 1, ENC_NA0x00000000);
29034 offset += 1;
29035
29036 proto_tree_add_item(dtim_tree,
29037 hf_ieee80211_eht_sta_profile_info_dtim_period,
29038 tvb, offset, 1, ENC_NA0x00000000);
29039 offset += 1;
29040 }
29041
29042 if (sta_control & STA_CTRL_NSTR_LINK_PAIR_PRESENT0x0200) {
29043 int bitmap_size = (sta_control & STA_CTRL_NSTR_BITMAP_SIZE0x0400) ? 2 : 1;
29044
29045 proto_tree_add_item(sta_info_tree,
29046 hf_ieee80211_eht_sta_profile_info_bitmap,
29047 tvb, offset, bitmap_size, ENC_NA0x00000000);
29048 offset += bitmap_size;
29049 }
29050
29051 if (sta_control & STA_CTRL_BSS_PARAMS_CHANGE_CNT_PRESENT0x0800) {
29052 proto_tree_add_item(sta_info_tree,
29053 hf_ieee80211_eht_sta_profile_bss_params_change_count,
29054 tvb, offset, 1, ENC_NA0x00000000);
29055 offset += 1;
29056 }
29057 break;
29058 case PROBE_MULTI_LINK1:
29059 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
29060 *found_link_id = link_id;
29061
29062 proto_tree_add_bitmask(subelt_tree, tvb, offset,
29063 hf_ieee80211_eht_profile_sta_control,
29064 ett_eht_multi_link_sta_control,
29065 probe_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29066 offset += 2;
29067
29068 /*
29069 * Now there will be some elements if complete profile is 0
29070 *
29071 * There can be one Request element, one Extended Request Element or
29072 * one of both.
29073 */
29074 if ((sta_control & STA_CTRL_COMPLETE_PROFILE0x0010) == 0) {
29075 bool_Bool seen_request = false0, seen_ext_request = false0;
29076
29077 while (tvb_captured_length_remaining(tvb, offset) >= 2) {
29078 static const uint8_t ids[] = { TAG_TSPEC13 };
29079 uint8_t elt_type = 0;
29080
29081 if (tvb_captured_length_remaining(tvb, offset) < 2) {
29082 expert_add_info_format(pinfo, subelt_tree,
29083 &ei_ieee80211_eht_invalid_multi_link,
29084 "Invalid Probe Request Multi-Link element "
29085 "STA Control field, should contain a Request "
29086 "element or an Extended Request element or both "
29087 "but there are insufficient bytes");
29088
29089 return len;
29090 }
29091
29092 elt_type = tvb_get_uint8(tvb, offset);
29093
29094 if ((elt_type != TAG_REQUEST10 && elt_type != TAG_ELEMENT_ID_EXTENSION255) ||
29095 (elt_type == TAG_ELEMENT_ID_EXTENSION255 &&
29096 (tvb_get_uint8(tvb, offset + 1) < 3 ||
29097 tvb_get_uint8(tvb, offset + 2) != ETAG_EXTENDED_REQUEST10))) {
29098 /* Add an expert Info */
29099
29100 expert_add_info_format(pinfo, subelt_tree,
29101 &ei_ieee80211_eht_invalid_multi_link,
29102 "Invalid Probe Request Multi-Link element "
29103 "STA Control field, should contain a Request "
29104 "element or an Extended Request element or both "
29105 "but it contains other elements or there are "
29106 "insufficient bytes for an extended element");
29107 return len;
29108 }
29109
29110 if (elt_type == TAG_REQUEST10) {
29111 if (!seen_request) {
29112 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, ids,
29113 G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0));
29114 seen_request = true1;
29115 } else {
29116 expert_add_info_format(pinfo, subelt_tree,
29117 &ei_ieee80211_eht_invalid_multi_link,
29118 "Invalid Probe Request Multi-Link element "
29119 "STA Control field. May only contain one Request "
29120 "element");
29121
29122 return len;
29123 }
29124 } else { /* It can only be a ETAG_EXTENDED_REQUEST */
29125 if (!seen_ext_request) {
29126 uint8_t ext_tag_len = tvb_get_uint8(tvb, offset + 1);
29127
29128 offset += 3;
29129 dissect_extended_request(tvb, pinfo, tree, offset, ext_tag_len);
29130
29131 offset += ext_tag_len;
29132 seen_ext_request = true1;
29133 } else {
29134 expert_add_info_format(pinfo, subelt_tree,
29135 &ei_ieee80211_eht_invalid_multi_link,
29136 "Invalid Probe Request Multi-Link element "
29137 "STA Control field. May only contain one Extended "
29138 "Request element");
29139
29140 return len;
29141 }
29142 }
29143 }
29144 }
29145 break;
29146 case RECONFIGURATION_MULTI_LINK2:
29147 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
29148 *found_link_id = link_id;
29149
29150 proto_tree_add_bitmask(subelt_tree, tvb, offset,
29151 hf_ieee80211_eht_profile_sta_control,
29152 ett_eht_multi_link_sta_control,
29153 reconfig_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29154 offset += 2;
29155
29156 /* Check the length of STA Info is 0 */
29157 if (offset >= start_offset + len) {
29158 return len;
29159 }
29160
29161 sta_info_len = tvb_get_uint8(tvb, offset);
29162 sta_info_tree = proto_tree_add_subtree(subelt_tree, tvb, offset, sta_info_len,
29163 ett_eht_multi_link_per_sta_info,
29164 NULL((void*)0), "STA Info");
29165
29166 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_len,
29167 tvb, offset, 1, ENC_NA0x00000000);
29168 offset += 1;
29169
29170 if (sta_control & STA_CTRL_MAC_ADDR_PRESENT0x0020) {
29171 proto_tree_add_item(sta_info_tree, hf_ieee80211_eht_sta_profile_info_mac,
29172 tvb, offset, 6, ENC_NA0x00000000);
29173 offset += 6;
29174 }
29175
29176 if (sta_control & AP_REMOVAL_TIMER_PRESENT0x0040) {
29177 proto_tree_add_item(sta_info_tree,
29178 hf_ieee80211_eht_sta_profile_removal_timer,
29179 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29180 offset += 2;
29181 }
29182
29183 if (sta_control & OPERATION_PARAMS_PRESENT0x0800) {
29184 proto_tree * oper_tree;
29185
29186 oper_tree = proto_tree_add_subtree(sta_info_tree, tvb, offset, 3,
29187 ett_eht_multi_link_reconf_oper_param, NULL((void*)0), "Operation Parameters");
29188
29189 proto_tree_add_bitmask_with_flags(oper_tree, tvb, offset,
29190 hf_ieee80211_eht_sta_profile_presence_indi,
29191 ett_eht_multi_link_reconfig_presence_indi,
29192 reconfig_presence_indi_hdrs, ENC_LITTLE_ENDIAN0x80000000,
29193 BMT_NO_APPEND0x01);
29194 offset += 1;
29195
29196 proto_tree_add_bitmask_with_flags(oper_tree, tvb, offset,
29197 hf_ieee80211_eht_sta_profile_operation_para_info,
29198 ett_eht_multi_link_reconfig_operation_para_info,
29199 reconfig_operation_para_info_hdrs, ENC_LITTLE_ENDIAN0x80000000,
29200 BMT_NO_APPEND0x01);
29201 offset += 2;
29202 }
29203
29204 if (sta_control & RECONF_NSTR_BITMAP_PRESENT0x2000) {
29205 int bitmap_size = (sta_control & RECONF_NSTR_BITMAP_SIZE0x1000) ? 2 : 1;
29206
29207 proto_tree_add_item(sta_info_tree,
29208 hf_ieee80211_eht_sta_profile_info_bitmap,
29209 tvb, offset, bitmap_size, ENC_NA0x00000000);
29210 offset += bitmap_size;
29211 }
29212 break;
29213 case TDLS_MULTI_LINK3:
29214 expert_add_info_format(pinfo, subelt_tree,
29215 &ei_ieee80211_eht_invalid_multi_link,
29216 "Invalid TDLS Multi-Link element. There should not "
29217 "be any Link Info fields.");
29218
29219 break;
29220 case PRIORITY_ACCESS_MULTI_LINK4:
29221 link_id = tvb_get_uint8(tvb, offset) & 0x0F;
29222 *found_link_id = link_id;
29223 proto_tree_add_bitmask(subelt_tree, tvb, offset,
29224 hf_ieee80211_eht_profile_sta_control,
29225 ett_eht_multi_link_sta_control,
29226 prio_access_sta_control_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29227 offset += 2;
29228
29229 /*
29230 * Could contain the EDCA Parameter Set elt or the MU EDCA Parameter Set
29231 * elt, or none.
29232 */
29233 if (tvb_captured_length_remaining(tvb, offset) > 2) {
29234
29235 }
29236 break;
29237 default:
29238 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 29238))
;
29239 break;
29240 }
29241
29242 // Sta Profile
29243 // Save HE capa settings
29244 {
29245 unsigned *p_channel_width_set =
29246 (unsigned *)p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan,
29247 HE_CHANNEL_WIDTH_KEY);
29248 unsigned channel_width_set = GPOINTER_TO_INT(p_channel_width_set)((gint) (glong) (p_channel_width_set));
29249 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)))
29250 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
29251 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
29252
29253 int end_offset = start_offset + len;
29254 if (offset < end_offset) {
29255 /* Check CSA, EX CSA or MAX CST elements to skip parsing cap info */
29256 uint8_t elem = tvb_get_uint8(tvb, offset);
29257 uint8_t elem_len = tvb_get_uint8(tvb, offset+1);
29258 uint8_t ext_elem = 0;
29259 if (elem == TAG_ELEMENT_ID_EXTENSION255) {
29260 ext_elem = tvb_get_uint8(tvb, offset+2);
29261 }
29262 if (multi_link_type == PRIORITY_ACCESS_MULTI_LINK4) {
29263 } else if ((elem == TAG_CHANNEL_SWITCH_ANN37 && elem_len == 3) ||
29264 (elem == TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60 && elem_len == 4) ||
29265 (ext_elem == ETAG_MAX_CHANNEL_SWITCH_TIME52 && elem_len == 4)) {
29266 } else {
29267 offset += add_ff_cap_info(subelt_tree, tvb, pinfo, offset);
29268 }
29269 /*
29270 * If it is an association or re-association response, deal with the
29271 * status code.
29272 */
29273 if ((ftype == MGT_ASSOC_RESP0x01 || ftype == MGT_REASSOC_RESP0x03) &&
29274 multi_link_type == BASIC_MULTI_LINK0) {
29275 offset += add_ff_status_code(subelt_tree, tvb, pinfo, offset);
29276 }
29277 }
29278 while (offset < end_offset) {
29279 int tag_len = tvb_get_uint8(tvb, offset+1);
29280 if (offset + 1 + tag_len >= end_offset) {
29281 /* Detect wrong format to avoid from corrupting default_context */
29282 expert_add_info_format(pinfo, subelt_tree, &ei_ieee80211_eht_invalid_subelement,
29283 "Per-STA Profile subelements had wrong element/length");
29284 *found_link_id = -1;
29285 return len;
29286 }
29287 offset += add_tagged_field(pinfo, subelt_tree, tvb, offset, ftype, NULL((void*)0), 0, NULL((void*)0));
29288 }
29289
29290 // Set he capa settings back
29291 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, HE_CHANNEL_WIDTH_KEY,
29292 GINT_TO_POINTER(channel_width_set | (1<<31))((gpointer) (glong) (channel_width_set | (1<<31))));
29293 }
29294 return len;
29295}
29296
29297static const value_string multi_link_type_vals[] = {
29298 { BASIC_MULTI_LINK0, "Basic" },
29299 { PROBE_MULTI_LINK1, "Probe Request" },
29300 { RECONFIGURATION_MULTI_LINK2, "Reconfiguration" },
29301 { TDLS_MULTI_LINK3, "TDLS" },
29302 { PRIORITY_ACCESS_MULTI_LINK4, "Priority Access" },
29303 { 5, "Reserved" },
29304 { 6, "Reserved" },
29305 { 7, "Reserved" },
29306 { 0, NULL((void*)0) }
29307};
29308
29309static const range_string multi_link_sub_elt_string[] = {
29310 { 0, 0, "Per-STA Profile" },
29311 { 1, 220, "Reserved" },
29312 { 221, 221, "Vendor Specific" },
29313 { 222, 255, "Reserved" },
29314 { 0, 0, NULL((void*)0) }
29315};
29316
29317static int * const eht_link_id_hdrs[] = {
29318 &hf_ieee80211_eht_common_info_link_id,
29319 &hf_ieee80211_eht_common_info_link_id_reserved,
29320 NULL((void*)0)
29321};
29322
29323static int * const eht_medium_sync_delay_hdrs[] = {
29324 &hf_ieee80211_eht_common_info_medium_sync_duration,
29325 &hf_ieee80211_eht_common_info_medium_sync_threshold,
29326 &hf_ieee80211_eht_common_info_medium_sync_max_txops,
29327 NULL((void*)0)
29328};
29329
29330static int * const eht_eml_capabilities_hdrs[] = {
29331 &hf_ieee80211_eht_common_info_eml_capa_emlsr_support,
29332 &hf_ieee80211_eht_common_info_eml_capa_emlsr_emlmr_padding_delay,
29333 &hf_ieee80211_eht_common_info_eml_capa_emlsr_emlmr_transition_delay,
29334 &hf_ieee80211_eht_common_info_eml_capa_emlmr_support,
29335 &hf_ieee80211_eht_common_info_eml_capa_reserved1,
29336 &hf_ieee80211_eht_common_info_eml_capa_transition_timeout,
29337 &hf_ieee80211_eht_common_info_eml_capa_reserved2,
29338 NULL((void*)0)
29339};
29340
29341static int * const eht_mld_capabilities_hdrs[] = {
29342 &hf_ieee80211_eht_common_info_mld_max_simul_links,
29343 &hf_ieee80211_eht_common_info_mld_srs_support,
29344 &hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg,
29345 &hf_ieee80211_eht_common_info_mld_freq_sep_for_str,
29346 &hf_ieee80211_eht_common_info_mld_aar_support,
29347 &hf_ieee80211_eht_common_info_mld_link_reconf_op_support,
29348 &hf_ieee80211_eht_common_info_mld_aligned_twt_support,
29349 &hf_ieee80211_eht_common_info_mld_reserved,
29350 NULL((void*)0)
29351};
29352
29353static int * const eht_ext_mld_capabilities_hdrs[] = {
29354 &hf_ieee80211_eht_common_info_ext_mld_op_update_support,
29355 &hf_ieee80211_eht_common_info_ext_mld_max_simul_links,
29356 &hf_ieee80211_eht_common_info_ext_mld_nstr_status_support,
29357 &hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support,
29358 &hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support,
29359 &hf_ieee80211_eht_common_info_ext_mld_reserved,
29360 NULL((void*)0)
29361};
29362
29363/*
29364 * Build a TVB containing the sub-elt. Offset will point to the subelt id in
29365 * tvb, and the sub-elt might span several fragments. Subsequent fragments
29366 * will have an id of 254.
29367 */
29368static tvbuff_t *
29369get_subelt_tvb(tvbuff_t *tvb, packet_info *pinfo, int offset, int *overhead)
29370{
29371 uint8_t subelt_len = tvb_get_uint8(tvb, offset + 1);
29372 tvbuff_t *tmp_tvb;
29373 int ohead = 0;
29374
29375 if (subelt_len == 255 &&
29376 tvb_captured_length_remaining(tvb, offset) > 259 &&
29377 tvb_get_uint8(tvb, offset + 255 + 2) == 0xfe) {
29378 tvbuff_t *tvb_comp;
29379 uint8_t frag_len;
29380
29381 tvb_comp = tvb_new_composite();
29382
29383 do {
29384 offset += 1;
29385 frag_len = tvb_get_uint8(tvb, offset);
29386 offset += 1;
29387 tmp_tvb = tvb_new_subset_length(tvb, offset, frag_len);
29388 /* Insert this fragment ... */
29389 tvb_composite_append(tvb_comp, tmp_tvb);
29390 offset += frag_len;
29391 ohead += 2;
29392 } while (frag_len == 255 &&
29393 tvb_captured_length_remaining(tvb, offset) > 2 &&
29394 tvb_get_uint8(tvb, offset) == 0xfe);
29395
29396 tvb_composite_finalize(tvb_comp);
29397
29398 *overhead = ohead - 2;
29399 add_new_data_source(pinfo, tvb_comp, "Reassembled Subelt");
29400 return tvb_comp;
29401 } else {
29402 *overhead = 0;
29403 return tvb_new_subset_length(tvb, offset + 2, subelt_len);
29404 }
29405}
29406
29407static void
29408dissect_multi_link(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
29409 int offset, int len _U___attribute__((unused)))
29410{
29411 proto_item *control = NULL((void*)0), *type = NULL((void*)0);
29412 proto_tree *ctl_tree = NULL((void*)0), *common_tree = NULL((void*)0), *subelt_tree = NULL((void*)0);
29413 uint8_t common_info_len = 0;
29414 uint16_t multi_link_control = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
29415 uint8_t multi_link_type = multi_link_control & 0x0007;
29416 uint16_t present = multi_link_control >> 4;
29417 int elt = 0, hf_index;
29418 wmem_strbuf_t *link_id_list = wmem_strbuf_create(pinfo->pool)wmem_strbuf_new(pinfo->pool, "");
29419
29420 control = proto_tree_add_item(tree, hf_ieee80211_eht_multi_link_control, tvb,
29421 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29422 ctl_tree = proto_item_add_subtree(control, ett_eht_multi_link_control);
29423
29424 type = proto_tree_add_item(ctl_tree, hf_ieee80211_eht_multi_link_control_type,
29425 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29426 proto_tree_add_item(ctl_tree, hf_ieee80211_eht_multi_link_control_reserved,
29427 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29428
29429 /* Handle the control elt here, separate items */
29430 if (multi_link_type == BASIC_MULTI_LINK0) {
29431 proto_item_append_text(control, " Basic");
29432 proto_tree_add_item(ctl_tree,
29433 hf_ieee80211_eht_multi_link_control_link_id_present,
29434 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29435 proto_tree_add_item(ctl_tree,
29436 hf_ieee80211_eht_multi_link_control_bss_parms_ch_count,
29437 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29438 proto_tree_add_item(ctl_tree,
29439 hf_ieee80211_eht_multi_link_control_medium_sync_delay,
29440 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29441 proto_tree_add_item(ctl_tree,
29442 hf_ieee80211_eht_multi_link_control_eml_capa,
29443 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29444 proto_tree_add_item(ctl_tree,
29445 hf_ieee80211_eht_multi_link_control_mld_capa,
29446 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29447 proto_tree_add_item(ctl_tree,
29448 hf_ieee80211_eht_multi_link_control_basic_mld_id_present,
29449 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29450 proto_tree_add_item(ctl_tree,
29451 hf_ieee80211_eht_multi_link_control_ext_mld_capa,
29452 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29453 proto_tree_add_item(ctl_tree,
29454 hf_ieee80211_eht_multi_link_control_bitmap_reserved,
29455 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29456 hf_index = hf_ieee80211_eht_multi_link_type_0_link_count;
29457 } else if (multi_link_type == PROBE_MULTI_LINK1) {
29458 proto_item_append_text(control, " Probe Request");
29459 proto_tree_add_item(ctl_tree,
29460 hf_ieee80211_eht_multi_link_control_probe_mld_id_present,
29461 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29462 proto_tree_add_item(ctl_tree,
29463 hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present,
29464 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29465 proto_tree_add_item(ctl_tree,
29466 hf_ieee80211_eht_multi_link_control_probe_reserved,
29467 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29468 hf_index = hf_ieee80211_eht_multi_link_type_1_link_count;
29469 } else if (multi_link_type == RECONFIGURATION_MULTI_LINK2) {
29470 proto_item_append_text(control, " Reconfiguration");
29471 proto_tree_add_item(ctl_tree,
29472 hf_ieee80211_eht_multi_link_control_reconfig_mld_mac,
29473 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29474 proto_tree_add_item(ctl_tree,
29475 hf_ieee80211_eht_multi_link_control_reconfig_eml_capa,
29476 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29477 proto_tree_add_item(ctl_tree,
29478 hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper,
29479 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29480 proto_tree_add_item(ctl_tree,
29481 hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper,
29482 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29483 proto_tree_add_item(ctl_tree,
29484 hf_ieee80211_eht_multi_link_control_reconfig_reserved,
29485 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29486 hf_index = hf_ieee80211_eht_multi_link_type_2_link_count;
29487 } else if (multi_link_type == TDLS_MULTI_LINK3) {
29488 proto_item_append_text(control, " TDLS");
29489 /* Presence bitmap is reserved */
29490 proto_tree_add_item(ctl_tree,
29491 hf_ieee80211_eht_multi_link_control_tdls_reserved, tvb,
29492 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29493 hf_index = hf_ieee80211_eht_multi_link_type_3_link_count;
29494 } else if (multi_link_type == PRIORITY_ACCESS_MULTI_LINK4) {
29495 proto_item_append_text(control, " Priority Access");
29496 proto_tree_add_item(ctl_tree,
29497 hf_ieee80211_eht_multi_link_control_prio_access_reserved,
29498 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29499 hf_index = hf_ieee80211_eht_multi_link_type_4_link_count;
29500 } else {
29501 expert_add_info_format(pinfo, type, &ei_ieee80211_eht_invalid_multi_link,
29502 "Invalid Multi-Link Control type, value is %u",
29503 multi_link_type);
29504 return;
29505 }
29506 offset += 2;
29507
29508 switch (multi_link_type) {
29509 case BASIC_MULTI_LINK0:
29510 /* Handle common info for basic element */
29511 common_info_len = tvb_get_uint8(tvb, offset);
29512 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29513 ett_eht_multi_link_common_info,
29514 NULL((void*)0), "Common Info");
29515 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29516 offset, 1, ENC_NA0x00000000);
29517 offset += 1;
29518
29519 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29520 tvb, offset, 6, ENC_NA0x00000000);
29521 offset += 6;
29522
29523 if (present & EHT_LINK_ID0x01) {
29524 proto_tree_add_bitmask(common_tree, tvb, offset,
29525 hf_ieee80211_eht_common_field_link_id_field,
29526 ett_eht_multi_link_common_info_link_id,
29527 eht_link_id_hdrs, ENC_NA0x00000000);
29528 offset += 1;
29529 }
29530
29531 if (present & EHT_BSS_PARAMS0x02) {
29532 proto_tree_add_item(common_tree,
29533 hf_ieee80211_eht_common_field_bss_param_change_count,
29534 tvb, offset, 1, ENC_NA0x00000000);
29535 offset += 1;
29536 }
29537
29538 if (present & EHT_MEDIUM_SYNC0x04) {
29539 proto_tree_add_bitmask(common_tree, tvb, offset,
29540 hf_ieee80211_eht_common_field_medium_sync_field,
29541 ett_eht_multi_link_common_info_medium_sync,
29542 eht_medium_sync_delay_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29543 offset += 2;
29544 }
29545
29546 if (present & EHT_EML_CAPA0x08) {
29547 proto_tree_add_bitmask(common_tree, tvb, offset,
29548 hf_ieee80211_eht_common_field_eml_capabilities,
29549 ett_eht_multi_link_common_info_eml_capa,
29550 eht_eml_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29551 offset += 2;
29552 }
29553
29554 if (present & EHT_MLD_CAPA0x10) {
29555 proto_tree_add_bitmask(common_tree, tvb, offset,
29556 hf_ieee80211_eht_common_field_mld_capabilities,
29557 ett_eht_multi_link_common_info_mld_capa,
29558 eht_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29559 offset += 2;
29560 }
29561
29562 if (present & EHT_MLD_ID0x20) {
29563 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_id,
29564 tvb, offset, 1, ENC_NA0x00000000);
29565 offset += 1;
29566 }
29567
29568 if (present & EHT_EXT_MLD_CAPA0x40) {
29569 proto_tree_add_bitmask(common_tree, tvb, offset,
29570 hf_ieee80211_eht_common_field_ext_mld_capabilities,
29571 ett_eht_multi_link_common_info_ext_mld_capa,
29572 eht_ext_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29573 offset += 2;
29574 }
29575 break;
29576 case PROBE_MULTI_LINK1:
29577 /* Handle common info for probe request element */
29578 common_info_len = tvb_get_uint8(tvb, offset);
29579 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29580 ett_eht_multi_link_common_info,
29581 NULL((void*)0), "Common Info");
29582 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29583 offset, 1, ENC_NA0x00000000);
29584 offset += 1;
29585
29586 if (present & EHT_PML_MLD_ID0x01) {
29587 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_id,
29588 tvb, offset, 1, ENC_NA0x00000000);
29589 offset += 1;
29590 }
29591
29592 if (present & EHT_PML_MLD_MAC0x02) {
29593 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29594 tvb, offset, 6, ENC_NA0x00000000);
29595 offset += 6;
29596 }
29597 break;
29598 case RECONFIGURATION_MULTI_LINK2:
29599 common_info_len = tvb_get_uint8(tvb, offset);
29600 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29601 ett_eht_multi_link_common_info,
29602 NULL((void*)0), "Common Info");
29603 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29604 offset, 1, ENC_NA0x00000000);
29605 offset += 1;
29606
29607 if (present & EHT_RECONF_MLD_MAC0x01) {
29608 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_mld_mac,
29609 tvb, offset, 6, ENC_NA0x00000000);
29610 offset += 6;
29611 }
29612
29613 if (present & EHT_RECONF_EML_CAPA0x02) {
29614 proto_tree_add_bitmask(common_tree, tvb, offset,
29615 hf_ieee80211_eht_common_field_eml_capabilities,
29616 ett_eht_multi_link_common_info_eml_capa,
29617 eht_eml_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29618 offset += 2;
29619 }
29620
29621 if (present & EHT_RECONF_MLD_CAPA0x04) {
29622 proto_tree_add_bitmask(common_tree, tvb, offset,
29623 hf_ieee80211_eht_common_field_mld_capabilities,
29624 ett_eht_multi_link_common_info_mld_capa,
29625 eht_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29626 offset += 2;
29627 }
29628 if (present & EHT_RECONF_EXT_MLD_CAPA0x08) {
29629 proto_tree_add_bitmask(common_tree, tvb, offset,
29630 hf_ieee80211_eht_common_field_ext_mld_capabilities,
29631 ett_eht_multi_link_common_info_ext_mld_capa,
29632 eht_ext_mld_capabilities_hdrs, ENC_LITTLE_ENDIAN0x80000000);
29633 offset += 2;
29634 }
29635 break;
29636 case TDLS_MULTI_LINK3:
29637 common_info_len = tvb_get_uint8(tvb, offset);
29638 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29639 ett_eht_multi_link_common_info,
29640 NULL((void*)0), "Common Info");
29641 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29642 offset, 1, ENC_NA0x00000000);
29643 offset += 1;
29644 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_ap_mld_mac,
29645 tvb, offset, 6, ENC_NA0x00000000);
29646 offset += 6;
29647 break;
29648 case PRIORITY_ACCESS_MULTI_LINK4:
29649 common_info_len = tvb_get_uint8(tvb, offset);
29650 common_tree = proto_tree_add_subtree(tree, tvb, offset, common_info_len,
29651 ett_eht_multi_link_common_info,
29652 NULL((void*)0), "Common Info");
29653 proto_tree_add_item(common_tree, hf_ieee80211_eht_common_field_length, tvb,
29654 offset, 1, ENC_NA0x00000000);
29655 offset += 1;
29656
29657 proto_tree_add_item(common_tree,
29658 hf_ieee80211_eht_common_field_ap_mld_mac, tvb,
29659 offset, 6, ENC_NA0x00000000);
29660 offset += 6;
29661 break;
29662 default:
29663 /* We should not reach here as we filtered out non-valid values above */
29664 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 29664))
;
29665 }
29666
29667 /* Handle the link info. It is 0 or more subelements */
29668 while (tvb_reported_length_remaining(tvb, offset)) {
29669 uint8_t tag, subelt_len;
29670 int link_id = -1;
29671
29672 if (tvb_reported_length_remaining(tvb, offset) < 2) {
29673 expert_add_info_format(pinfo, tree, &ei_ieee80211_eht_invalid_subelement,
29674 "Per-STA Profile subelements must contain at least 2 bytes");
29675 return;
29676 }
29677
29678 tag = tvb_get_uint8(tvb, offset);
29679 subelt_len = tvb_get_uint8(tvb, offset + 1);
29680
29681 tvbuff_t *new_tvb;
29682 int overhead = 0;
29683 int full_subelt_len;
29684
29685 switch (tag) {
29686 case 0:
29687 /*
29688 * We have to assemble the sub-elt if there is a continuations. And
29689 * it will have to be a composite TVB etc.
29690 */
29691 new_tvb = get_subelt_tvb(tvb, pinfo, offset, &overhead);
29692 full_subelt_len = tvb_captured_length_remaining(new_tvb, 0);
29693
29694 proto_tree_add_item(tree,
29695 hf_ieee80211_eht_multi_link_subelt_tag, tvb,
29696 offset, 1, ENC_NA0x00000000);
29697 offset += 1;
29698 if (full_subelt_len <= 255) {
29699 proto_tree_add_item(tree,
29700 hf_ieee80211_eht_multi_link_subelt_len, tvb,
29701 offset, 1, ENC_NA0x00000000);
29702 } else {
29703 proto_tree_add_uint(tree, hf_ieee80211_eht_multi_link_subelt_len, tvb,
29704 0, 0, full_subelt_len);
29705 }
29706 offset += 1;
29707
29708 subelt_tree = proto_tree_add_subtree_format(tree, new_tvb, 0,
29709 full_subelt_len,
29710 ett_eht_multi_link_subelt,
29711 NULL((void*)0), "Per-STA Profile %d", elt + 1);
29712 /*
29713 * There might be some per-STA elements that do not contain link IDs.
29714 */
29715
29716 /*
29717 * We use the sta profile num here. But we need to ensure it is not
29718 * seen as NULL and we send it in zero based. Will be incremented
29719 * before use.
29720 */
29721
29722 offset += dissect_multi_link_per_sta(new_tvb, pinfo, subelt_tree,
29723 multi_link_type, &link_id);
29724
29725 offset += overhead; /* Account for the overhead in the subelt */
29726 break;
29727 case 221:
29728 /* Add an expert info saying there are none so far? */
29729 offset += subelt_len + 2;
29730 break;
29731 default:
29732 offset += subelt_len + 2;
29733 break;
29734 }
29735 if (link_id != -1) {
29736 wmem_strbuf_append_printf(link_id_list, (elt == 0) ? "%d" : "_%d", link_id);
29737 elt++;
29738 }
29739 }
29740 proto_tree_add_uint(tree, hf_index, tvb, 0, 0, elt);
29741
29742 if (elt) {
29743 proto_tree_add_string(tree, hf_ieee80211_eht_multi_link_link_id_list, tvb,
29744 0, 0, link_id_list->str);
29745 }
29746}
29747
29748static int * const eht_operation_hdrs[] = {
29749 &hf_ieee80211_eht_operation_info_present,
29750 &hf_ieee80211_eht_operation_subchannel_bitmap_present,
29751 &hf_ieee80211_eht_operation_default_pe_duration,
29752 &hf_ieee80211_eht_operation_group_addressed_bu_indication_limit,
29753 &hf_ieee80211_eht_operation_group_addressed_bu_indication_exp,
29754 &hf_ieee80211_eht_operation_mcs15_disable,
29755 &hf_ieee80211_eht_operation_reserved,
29756 NULL((void*)0)
29757};
29758
29759static int *const eht_op_control_hdrs[] = {
29760 &hf_ieee80211_eht_operation_control_chan_width,
29761 &hf_ieee80211_eht_operation_control_reserved,
29762 NULL((void*)0)
29763};
29764
29765static const value_string eht_operation_control_chan_wid_vals[] = {
29766 { 0, "20 MHz EHT BSS bandwidth" },
29767 { 1, "40 MHz EHT BSS bandwidth" },
29768 { 2, "80 MHz EHT BSS bandwidth" },
29769 { 3, "160 MHz EHT BSS bandwidth" },
29770 { 4, "320 MHz EHT BSS bandwidth" },
29771 { 5, "Reserved" },
29772 { 6, "Reserved" },
29773 { 7, "Reserved" },
29774 { 0, NULL((void*)0) },
29775};
29776
29777static void
29778dissect_eht_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
29779 int offset, int len _U___attribute__((unused)))
29780{
29781 uint8_t params = tvb_get_uint8(tvb, offset);
29782
29783 proto_tree_add_bitmask(tree, tvb, offset,
29784 hf_ieee80211_eht_operation_parameters,
29785 ett_eht_operation_params, eht_operation_hdrs,
29786 ENC_LITTLE_ENDIAN0x80000000);
29787 offset++;
29788
29789 if (len < 5) {
29790 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
29791 "This IE appears to conform to an earlier draft than D2.0 and lacks the Basic EHT MCS And MSS Set, len=%d", len);
29792 return;
29793
29794 } else {
29795 proto_tree_add_item(tree, hf_ieee80211_eht_basic_eht_mcs_nss_set, tvb,
29796 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
29797
29798 offset += 4;
29799 }
29800
29801 if (params & 0x01) { /* EHT Operations Info present */
29802 proto_tree_add_bitmask(tree, tvb, offset,
29803 hf_ieee80211_eht_operation_control,
29804 ett_eht_operation_control,
29805 eht_op_control_hdrs,
29806 ENC_NA0x00000000);
29807 offset++;
29808
29809 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs0, tvb, offset, 1,
29810 ENC_NA0x00000000);
29811 offset++;
29812
29813 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs1, tvb, offset, 1,
29814 ENC_NA0x00000000);
29815 offset++;
29816 }
29817
29818 if (params & 0x02) { /* Disabled subchannel bitmap present */
29819 proto_tree_add_item(tree, hf_ieee80211_eht_operation_disabled_bitmap, tvb,
29820 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
29821 }
29822}
29823
29824static const value_string eht_link_adaptation_vals[] = {
29825 { 0, "No feedback" },
29826 { 1, "Reserved" },
29827 { 2, "Unsolicited" },
29828 { 3, "Solicited and unsolicited" },
29829 { 0, NULL((void*)0) },
29830};
29831
29832static int * const eht_mac_capa_hdrs[] = {
29833 &hf_ieee80211_eht_mac_capa_epcs_prio_access_support,
29834 &hf_ieee80211_eht_mac_capa_eht_om_control_support,
29835 &hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support,
29836 &hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support,
29837 &hf_ieee80211_eht_mac_capa_restricted_twt_support,
29838 &hf_ieee80211_eht_mac_capa_scs_traffic_description_support,
29839 &hf_ieee80211_eht_mac_capa_maximum_mpdu_length,
29840 &hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext,
29841 &hf_ieee80211_eht_mac_capa_eht_trs_support,
29842 &hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode,
29843 &hf_ieee80211_eht_mac_capa_two_bqrs_support,
29844 &hf_ieee80211_eht_mac_capa_eht_link_adaptation_support,
29845 &hf_ieee80211_eht_mac_capa_unsolicited_epcs_update,
29846 &hf_ieee80211_eht_mac_capa_reserved,
29847 NULL((void*)0)
29848};
29849
29850static int * const eht_phy_bits_0_15[] = {
29851 &hf_ieee80211_eht_phy_bits_0_15_reserved,
29852 &hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz,
29853 &hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz,
29854 &hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi,
29855 &hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo,
29856 &hf_ieee80211_eht_phy_bits_0_15_su_beamformer,
29857 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee,
29858 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz,
29859 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz,
29860 &hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz,
29861 NULL((void*)0)
29862};
29863
29864static int * const eht_phy_bits_16_31[] = {
29865 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz,
29866 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz,
29867 &hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz,
29868 &hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback,
29869 &hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback,
29870 &hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck,
29871 &hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck,
29872 &hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck,
29873 &hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck,
29874 &hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback,
29875 NULL((void*)0)
29876};
29877
29878static int * const eht_phy_bits_32_39[] = {
29879 &hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo,
29880 &hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support,
29881 &hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support,
29882 &hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi,
29883 &hf_ieee80211_eht_phy_bits_32_39_max_nc,
29884 NULL((void*)0)
29885};
29886
29887static int * const eht_phy_bits_40_63[] = {
29888 &hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck,
29889 &hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support,
29890 &hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support,
29891 &hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present,
29892 &hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding,
29893 &hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs,
29894 &hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15,
29895 &hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz,
29896 &hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw,
29897 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz,
29898 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz,
29899 &hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz,
29900 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz,
29901 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz,
29902 &hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz,
29903 &hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit,
29904 NULL((void*)0)
29905};
29906
29907static int * const eht_phy_bits_64_71[] = {
29908 &hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup,
29909 &hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup,
29910 &hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support,
29911 &hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo,
29912 &hf_ieee80211_eht_phy_bits_64_71_20m_mru_support,
29913 &hf_ieee80211_eht_phy_bits_64_71_reserved,
29914 NULL((void*)0)
29915};
29916
29917static int * const eht_mcs_20mhz_map_hdrs[] = {
29918 &hf_ieee80211_eht_rx_max_nss_20mhz_0_7,
29919 &hf_ieee80211_eht_tx_max_nss_20mhz_0_7,
29920 &hf_ieee80211_eht_rx_max_nss_20mhz_8_9,
29921 &hf_ieee80211_eht_tx_max_nss_20mhz_8_9,
29922 &hf_ieee80211_eht_rx_max_nss_20mhz_10_11,
29923 &hf_ieee80211_eht_tx_max_nss_20mhz_10_11,
29924 &hf_ieee80211_eht_rx_max_nss_20mhz_12_13,
29925 &hf_ieee80211_eht_tx_max_nss_20mhz_12_13,
29926 NULL((void*)0)
29927};
29928
29929static void
29930dissect_eht_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
29931 proto_tree *tree, int offset, int len _U___attribute__((unused)))
29932{
29933 proto_tree *eht_phy_capa = NULL((void*)0), *eht_mcs_nss = NULL((void*)0);
29934 bool_Bool ch_320mhz_in_6ghz = false0;
29935 bool_Bool ppe_thresholds_present = false0;
29936
29937 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_eht_mac_capabilities,
29938 ett_eht_mac_capa, eht_mac_capa_hdrs,
29939 ENC_LITTLE_ENDIAN0x80000000);
29940 offset += 2;
29941
29942 ch_320mhz_in_6ghz = tvb_get_uint8(tvb, offset) & 0x02;
29943
29944 eht_phy_capa = proto_tree_add_subtree(tree, tvb, offset, 9,
29945 ett_eht_phy_capa, NULL((void*)0),
29946 "EHT PHY Capabilities Information");
29947 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29948 hf_ieee80211_eht_phy_bits_0_15,
29949 ett_eht_phy_bits_0_15, eht_phy_bits_0_15,
29950 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29951 offset += 2;
29952
29953 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29954 hf_ieee80211_eht_phy_bits_16_31,
29955 ett_eht_phy_bits_16_31, eht_phy_bits_16_31,
29956 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29957 offset += 2;
29958
29959 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29960 hf_ieee80211_eht_phy_bits_32_39,
29961 ett_eht_phy_bits_32_39, eht_phy_bits_32_39,
29962 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29963 offset += 1;
29964
29965 ppe_thresholds_present = tvb_get_uint8(tvb, offset) & 0x08;
29966 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29967 hf_ieee80211_eht_phy_bits_40_63,
29968 ett_eht_phy_bits_40_63, eht_phy_bits_40_63,
29969 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29970 offset += 3;
29971
29972 proto_tree_add_bitmask_with_flags(eht_phy_capa, tvb, offset,
29973 hf_ieee80211_eht_phy_bits_64_71,
29974 ett_eht_phy_bits_64_71, eht_phy_bits_64_71,
29975 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
29976 offset += 1;
29977
29978 /*
29979 * We need to figure out the channel width set and frequency for this but it
29980 * is only possible if we got the frequency info and the channel width set
29981 * was added to the pinfo. If we don't have that simply add the rest as
29982 * uninterpreted bytes.
29983 */
29984 eht_mcs_nss = proto_tree_add_subtree(tree, tvb, offset,
29985 tvb_captured_length_remaining(tvb, offset),
29986 ett_eht_phy_mcs_nss, NULL((void*)0),
29987 "Supported EHT-MCS and NSS Set");
29988
29989 if (pinfo->pseudo_header->ieee_802_11.has_frequency) {
29990 unsigned *p_channel_width_set =
29991 (unsigned *)p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan,
29992 HE_CHANNEL_WIDTH_KEY);
29993 unsigned channel_width_set = 0;
29994 /*
29995 * If we got it, we can handle the rest, otherwise not. Note,
29996 * we can determine if it was ever set by checking for non-zero because
29997 * we set at least one bit when saving it..
29998 */
29999 if (p_channel_width_set) {
30000 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)))
30001 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, IS_AP_KEY)))
30002 IS_AP_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, IS_AP_KEY)))
;
30003 channel_width_set = GPOINTER_TO_UINT(p_channel_width_set)((guint) (gulong) (p_channel_width_set));
30004
30005 /* Distinguish between the AP and the non-AP cases as the logis is easier
30006 * even if that means some duplicate code.
30007 */
30008 if (is_ap) {
30009 /* The EHT-MCS and NSS set for BW <= 80MHz Ap etc */
30010 if (tvb_captured_length_remaining(tvb, offset) < 3) {
30011 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
30012 "Insufficient bytes for EHT Capabilities. Need 3. "
30013 "Perhaps the EHT Capabilities field is malformed.");
30014 return;
30015 }
30016 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
30017 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
30018 ett_eht_phy_mcs_nss_set,
30019 eht_le_80_mcs_map_hdrs,
30020 ENC_LITTLE_ENDIAN0x80000000);
30021 offset += 3;
30022
30023 if (channel_width_set & 0x04) { /* B2 is set */
30024 if (tvb_captured_length_remaining(tvb, offset) < 3) {
30025 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
30026 "Insufficient bytes for EHT Capabilities. Need 3 for AP 160MHz. "
30027 "Perhaps the EHT Capabilities field is malformed.");
30028 return;
30029 }
30030 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
30031 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
30032 ett_eht_phy_mcs_nss_set,
30033 eht_160_mcs_map_hdrs,
30034 ENC_LITTLE_ENDIAN0x80000000);
30035 offset += 3;
30036 }
30037 if (ch_320mhz_in_6ghz &&
30038 IS_6_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 5955
)
) {
30039 if (tvb_captured_length_remaining(tvb, offset) < 3) {
30040 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
30041 "Insufficient bytes for EHT Capabilities. Need 3. "
30042 "Perhaps the EHT Capabilities field is malformed.");
30043 return;
30044 }
30045 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
30046 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
30047 ett_eht_phy_mcs_nss_set,
30048 eht_320_mcs_map_hdrs,
30049 ENC_LITTLE_ENDIAN0x80000000);
30050 offset += 3;
30051 }
30052 } else {
30053 /* Add the info for a 20MHz-Only Non-AP. But have to check both
30054 * frequency sets for some cases */
30055 if ((channel_width_set & 0x07) == 0) {
30056 if (tvb_captured_length_remaining(tvb, offset) < 4) {
30057 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
30058 "Insufficient bytes for EHT Capabilities. Need 4. "
30059 "Perhaps the EHT Capabilities field is malformed.");
30060 return;
30061 }
30062 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
30063 hf_ieee80211_eht_mcs_and_nss_non_ap,
30064 ett_eht_phy_mcs_nss_set,
30065 eht_mcs_20mhz_map_hdrs,
30066 ENC_LITTLE_ENDIAN0x80000000);
30067 offset += 4;
30068 }
30069 /* Now, the next set BW <= 80MHz except ...
30070 * If 2.4GHz and B0 is 1, or 5GHz or 6GHz and B1 */
30071 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)
&&
30072 channel_width_set & 0x01) ||
30073 (channel_width_set & 0x02)) {
30074 if (tvb_captured_length_remaining(tvb, offset) < 3) {
30075 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
30076 "Insufficient bytes for EHT Capabilities. Need 3 for le 80MHz. "
30077 "Perhaps the EHT Capabilities field is malformed.");
30078 return;
30079 }
30080 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
30081 hf_ieee80211_eht_mcs_and_nss_le_80mhz,
30082 ett_eht_phy_mcs_nss_set,
30083 eht_le_80_mcs_map_hdrs,
30084 ENC_LITTLE_ENDIAN0x80000000);
30085 offset += 3;
30086
30087 }
30088 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)
&&
30089 channel_width_set & 0x04) { /* B2 is set */
30090 if (tvb_captured_length_remaining(tvb, offset) < 3) {
30091 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
30092 "Insufficient bytes for EHT Capabilities. Need 3 for 160MHz. "
30093 "Perhaps the EHT Capabilities field is malformed.");
30094 return;
30095 }
30096 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
30097 hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
30098 ett_eht_phy_mcs_nss_set,
30099 eht_160_mcs_map_hdrs,
30100 ENC_LITTLE_ENDIAN0x80000000);
30101 offset += 3;
30102 }
30103 if (ch_320mhz_in_6ghz &&
30104 IS_6_GHZ(pinfo->pseudo_header->ieee_802_11.frequency)(pinfo->pseudo_header->ieee_802_11.frequency >= 5955
)
) {
30105 if (tvb_captured_length_remaining(tvb, offset) < 3) {
30106 expert_add_info_format(pinfo, eht_mcs_nss, &ei_ieee80211_bad_length,
30107 "Insufficient bytes for EHT Capabilities. Need 3 for 320MHz. "
30108 "Perhaps the EHT Capabilities field is malformed.");
30109 return;
30110 }
30111 proto_tree_add_bitmask(eht_mcs_nss, tvb, offset,
30112 hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
30113 ett_eht_phy_mcs_nss_set,
30114 eht_320_mcs_map_hdrs,
30115 ENC_LITTLE_ENDIAN0x80000000);
30116 offset += 3;
30117 }
30118 }
30119 } else {
30120 proto_tree_add_item(eht_mcs_nss, hf_ieee80211_eht_supported_mcs_nss_bytes,
30121 tvb, offset,
30122 tvb_captured_length_remaining(tvb, offset), ENC_NA0x00000000);
30123 offset += tvb_captured_length_remaining(tvb, offset);
30124 }
30125 }
30126
30127 /*
30128 * If the PPE thresholds are present, add them.
30129 */
30130 if (ppe_thresholds_present) {
30131 proto_tree_add_item(tree, hf_ieee80211_eht_ppe_thresholds, tvb, offset,
30132 tvb_captured_length_remaining(tvb, offset), ENC_NA0x00000000);
30133 }
30134}
30135
30136static const value_string tid_to_link_mapping_dirn_vals[] = {
30137 { 0, "Uplink" },
30138 { 1, "Downlink" },
30139 { 2, "Bidirectional link" },
30140 { 0, NULL((void*)0) }
30141};
30142
30143static const value_string ttl_link_mapping_size_vals[] = {
30144 { 0, "2 octets" },
30145 { 1, "1 octet" },
30146 { 0, NULL((void*)0) }
30147};
30148
30149static int * const eht_ttl_mapping_control_hdrs[] = {
30150 &hf_ieee80211_eht_ttl_mapping_direction,
30151 &hf_ieee80211_eht_ttl_default_link_mapping,
30152 &hf_ieee80211_eht_ttl_mapping_switch_time_pres,
30153 &hf_ieee80211_eht_ttl_expected_dura_pres,
30154 &hf_ieee80211_eht_ttl_link_mapping_size,
30155 &hf_ieee80211_eht_ttl_mapping_reserved,
30156 NULL((void*)0)
30157};
30158
30159static void
30160dissect_tid_to_link_mapping(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30161 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30162{
30163 proto_item *control = NULL((void*)0);
30164 uint8_t presence;
30165 uint8_t control_byte = tvb_get_uint8(tvb, offset);
30166 uint8_t map_size = 2;
30167 int hf_array[8] = {hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping,
30168 hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping,
30169 hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping,
30170 hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping,
30171 hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping,
30172 hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping,
30173 hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping,
30174 hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping};
30175 int hf_index = 0;
30176
30177 /*
30178 * If the Default Link Mapping bit is set, we only have 1 byte, otherwise 2
30179 */
30180 control = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
30181 hf_ieee80211_eht_ttl_mapping_control,
30182 ett_eht_ttl_mapping,
30183 eht_ttl_mapping_control_hdrs,
30184 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30185 offset += 1;
30186
30187 if (len == 1) {
30188 return;
30189 }
30190
30191 presence = tvb_get_uint8(tvb, offset);
30192
30193 proto_tree_add_item(control, hf_ieee80211_eht_ttl_mapping_presence, tvb,
30194 offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30195 offset += 1;
30196
30197 if (control_byte & 0x08) {
30198 proto_tree_add_item(tree, hf_ieee80211_eht_ttl_mapping_switch_time, tvb,
30199 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30200 offset += 2;
30201 }
30202
30203 if (control_byte & 0x10) {
30204 proto_tree_add_item(tree, hf_ieee80211_eht_ttl_mapping_expected_duration, tvb,
30205 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
30206 offset += 3;
30207 }
30208
30209 if (control_byte & 0x20) {
30210 map_size = 1;
30211 }
30212 while (presence) {
30213 if (presence & 0x01) {
30214 proto_tree_add_item(tree, hf_array[hf_index], tvb,
30215 offset, map_size, ENC_LITTLE_ENDIAN0x80000000);
30216 offset += map_size;
30217 }
30218 hf_index++;
30219 presence = presence >> 1;
30220 }
30221}
30222
30223static int * const ml_traffic_control_hdrs[] = {
30224 &hf_ieee80211_eht_multi_link_tc_bitmap_size,
30225 &hf_ieee80211_eht_multi_link_tc_aid_offset,
30226 &hf_ieee80211_eht_multi_link_tc_reserved,
30227 NULL((void*)0)
30228};
30229
30230static void
30231dissect_multi_link_traffic(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30232 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30233{
30234 proto_tree_add_bitmask(tree, tvb, offset,
30235 hf_ieee80211_eht_multi_link_traffic_control,
30236 ett_eht_eht_multi_link_tc,
30237 ml_traffic_control_hdrs,
30238 ENC_LITTLE_ENDIAN0x80000000);
30239 offset += 2;
30240 len -= 2;
30241
30242 /* If there is nothing more, bail. */
30243 if (len <= 0)
30244 return;
30245
30246 /* Now, add the traffic indication list as a byte string for the moment */
30247 proto_tree_add_item(tree, hf_ieee80211_eht_multi_link_traffic_indication,
30248 tvb, offset, tvb_captured_length_remaining(tvb, offset),
30249 ENC_NA0x00000000);
30250}
30251
30252#define MAX_MSDU_SIZE_PRESENT0x0001 0x0001
30253#define SERVICE_START_TIME_PRESENT0x0002 0x0002
30254#define SERVICE_START_TIME_LID_PRESENT0x0004 0x0004
30255#define MEAN_DATA_RATE_PRESENT0x0008 0x0008
30256#define BURST_SIZE_PRESENT0x0010 0x0010
30257#define MSDU_LIFETIME_PRESENT0x0020 0x0020
30258#define MSDU_DELIVERY_INFO_PRESENT0x0040 0x0040
30259#define MEDIUM_TIME_PRESENT0x0080 0x0080
30260
30261static const value_string qos_chars_dirn_vals[] = {
30262 { 0, "Uplink" },
30263 { 1, "Downlink" },
30264 { 2, "Direct link" },
30265 { 3, "Reserved" },
30266 { 0, NULL((void*)0) }
30267};
30268
30269static void
30270dissect_qos_characteristics(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30271 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30272{
30273 proto_tree *control_tree = NULL((void*)0);
30274 uint16_t presence_bitmap = (tvb_get_letohl(tvb, offset) >> 9) & 0xFFFF;
30275
30276 control_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
30277 ett_eht_qos_characteristics,
30278 NULL((void*)0), "Control Info");
30279
30280 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_dirn, tvb,
30281 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30282 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_tid, tvb,
30283 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30284 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_user_prio, tvb,
30285 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30286 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_bitmap, tvb,
30287 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30288 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_linkid, tvb,
30289 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30290 proto_tree_add_item(control_tree, hf_ieee80211_eht_qos_chars_resrvd, tvb,
30291 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30292 offset += 4;
30293
30294 /* Now add the fields, including the optional ones. */
30295 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_min_svc_interval, tvb,
30296 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30297 offset += 4;
30298
30299 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_max_svc_interval, tvb,
30300 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30301 offset += 4;
30302
30303 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_min_data_rate, tvb,
30304 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
30305 offset += 3;
30306
30307 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_delay_bound, tvb,
30308 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
30309 offset += 3;
30310
30311 /* Now the optional ones */
30312 if (presence_bitmap & MAX_MSDU_SIZE_PRESENT0x0001) {
30313 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_max_msdu_size, tvb,
30314 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30315 offset += 2;
30316 }
30317
30318 if (presence_bitmap & SERVICE_START_TIME_PRESENT0x0002) {
30319 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_service_start_time,
30320 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30321 offset += 4;
30322 }
30323
30324 if (presence_bitmap & SERVICE_START_TIME_LID_PRESENT0x0004) {
30325 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_service_start_time_linkid,
30326 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30327 offset += 1;
30328 }
30329
30330 if (presence_bitmap & MEAN_DATA_RATE_PRESENT0x0008) {
30331 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_mean_data_rate, tvb,
30332 offset, 3, ENC_LITTLE_ENDIAN0x80000000);
30333 offset += 3;
30334 }
30335
30336 if (presence_bitmap & BURST_SIZE_PRESENT0x0010) {
30337 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_burst_size, tvb,
30338 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30339 offset += 4;
30340 }
30341
30342 if (presence_bitmap & MSDU_LIFETIME_PRESENT0x0020) {
30343 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_lifetime, tvb,
30344 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30345 offset += 2;
30346 }
30347
30348 if (presence_bitmap & MSDU_DELIVERY_INFO_PRESENT0x0040) {
30349 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_delivery_ratio,
30350 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30351 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_msdu_count_exponent,
30352 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30353 offset += 1;
30354 }
30355
30356 if (presence_bitmap & MEDIUM_TIME_PRESENT0x0080) {
30357 proto_tree_add_item(tree, hf_ieee80211_eht_qos_chars_medium_time, tvb,
30358 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30359 }
30360}
30361
30362static void
30363dissect_akm_suite_selector(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30364 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30365{
30366 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
30367 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
30368 {
30369 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
30370 } else {
30371 proto_tree_add_item(tree, hf_ieee80211_rsn_akms_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
30372 }
30373}
30374
30375static void
30376dissect_mlo_link_information(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30377 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30378{
30379 proto_tree_add_item(tree, hf_ieee80211_eht_link_id_bitmap, tvb, offset, 2,
30380 ENC_LITTLE_ENDIAN0x80000000);
30381}
30382
30383static int * const ieee80211_eht_aid_bmapctl[] = {
30384 &hf_ieee80211_eht_aid_bitmap_control_reserved,
30385 &hf_ieee80211_eht_aid_bitmap_control_offset,
30386 NULL((void*)0)
30387};
30388
30389static void
30390dissect_aid_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30391 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30392{
30393 unsigned aid, pab_len, n1, i, j, byte;
30394
30395 pab_len = tvb_get_uint8(tvb, offset);
30396 proto_tree_add_item(tree, hf_ieee80211_eht_aid_bitmap_length, tvb, offset, 1,
30397 ENC_LITTLE_ENDIAN0x80000000);
30398 offset += 1;
30399
30400 n1 = tvb_get_uint8(tvb, offset) & 0xFE;
30401 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
30402 hf_ieee80211_eht_aid_bitmap_control,
30403 ett_eht_aid_bmapctl_tree,
30404 ieee80211_eht_aid_bmapctl,
30405 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30406 offset += 1;
30407
30408 proto_tree_add_item(tree, hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap,
30409 tvb, offset, pab_len, ENC_NA0x00000000);
30410 for (i = 0; i < pab_len; i++) {
30411 byte = tvb_get_uint8(tvb, offset + i);
30412 for (j = 0; j < 8; j++) {
30413 if (byte & (1 << j)) {
30414 aid = 8*n1 + 8*i + j;
30415 proto_tree_add_uint(tree, hf_ieee80211_eht_aid_bitmap_aid, tvb,
30416 offset + i, 1, aid);
30417 }
30418 }
30419 }
30420}
30421
30422static int *const eht_bw_indi_param_hdrs[] = {
30423 &hf_ieee80211_eht_bw_indi_param_reserved,
30424 &hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap,
30425 &hf_ieee80211_eht_bw_indi_param_reserved1,
30426 NULL((void*)0)
30427};
30428
30429static void
30430dissect_bandwidth_indication(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30431 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30432{
30433 uint8_t params;
30434
30435 params = tvb_get_uint8(tvb, offset);
30436 proto_tree_add_bitmask(tree, tvb, offset,
30437 hf_ieee80211_eht_bw_indi_param,
30438 ett_eht_bw_indication_param,
30439 eht_bw_indi_param_hdrs,
30440 ENC_NA0x00000000);
30441 offset++;
30442
30443 proto_tree_add_bitmask(tree, tvb, offset,
30444 hf_ieee80211_eht_operation_control,
30445 ett_eht_operation_control,
30446 eht_op_control_hdrs,
30447 ENC_NA0x00000000);
30448 offset++;
30449
30450 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs0, tvb, offset, 1,
30451 ENC_NA0x00000000);
30452 offset++;
30453
30454 proto_tree_add_item(tree, hf_ieee80211_eht_operation_ccfs1, tvb, offset, 1,
30455 ENC_NA0x00000000);
30456 offset++;
30457
30458 if (params & 0x02) { /* Disabled subchannel bitmap present */
30459 proto_item *item;
30460 int8_t i;
30461 char bitmap_binary[32];
30462 uint16_t bitmap = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
30463 item = proto_tree_add_item(tree, hf_ieee80211_eht_bw_indi_diabled_bitmap, tvb,
30464 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
30465 memset(bitmap_binary, 0 ,sizeof(bitmap_binary));
30466 for (i = 15; i >= 0; i--) {
30467 if (bitmap & (1 << i))
30468 bitmap_binary[15-i] = '1';
30469 else
30470 bitmap_binary[15-i] = '0';
30471 }
30472 proto_item_append_text(item, " (%s)", bitmap_binary);
30473 }
30474}
30475
30476static int *const eht_nonap_sta_regu_conn_hdrs[] = {
30477 &hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid,
30478 &hf_ieee80211_nonap_sta_regu_conn_indoor_ap,
30479 &hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid,
30480 &hf_ieee80211_nonap_sta_regu_conn_sp_ap,
30481 &hf_ieee80211_nonap_sta_regu_conn_reserved,
30482 NULL((void*)0)
30483};
30484
30485static void
30486dissect_nonap_sta_regulatory_connect(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30487 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30488{
30489 proto_tree_add_bitmask(tree, tvb, offset,
30490 hf_ieee80211_nonap_sta_regulatory_conn,
30491 ett_nonap_sta_regulatory_conn,
30492 eht_nonap_sta_regu_conn_hdrs,
30493 ENC_NA0x00000000);
30494}
30495
30496static void
30497add_min_max_time_between_measurements(proto_item *item, tvbuff_t *tvb, packet_info *pinfo, int offset, int sub_length)
30498{
30499 uint64_t ntb_specific, min, max;
30500
30501 if (sub_length < 6) {
30502 return;
30503 }
30504
30505 ntb_specific = tvb_get_int48(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
30506
30507 min = (ntb_specific >> 1) & GENMASK(22, 0)(((1U << ((22) - (0) + 1)) - 1) << (0));
30508 max = (ntb_specific >> 24) & GENMASK(19, 0)(((1U << ((19) - (0) + 1)) - 1) << (0));
30509
30510 /* convert to microseconds */
30511 min *= 100; /* min time is in units of 100 microseconds */
30512 max *= 10 * 1000; /* max time is in units of 10 milliseconds */
30513
30514 float minf = (float)(min / 1E6);
30515 float maxf = (float)(max / 1E6);
30516
30517 proto_item_append_text(item, " (Min=%.6gs, Max=%.6gs)", minf, maxf);
30518 col_append_fstr(pinfo->cinfo, COL_INFO, ", Min=%.6gs, Max=%.6gs", minf, maxf);
30519}
30520
30521static void
30522dissect_ntb_specific(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int sub_length)
30523{
30524 static int * const nontb_fields[] = {
30525 &hf_ieee80211_tag_ranging_ntb_reserved1,
30526 &hf_ieee80211_tag_ranging_ntb_min_time_msmts,
30527 &hf_ieee80211_tag_ranging_ntb_max_time_msmts,
30528 &hf_ieee80211_tag_ranging_ntb_r2i_tx_power,
30529 &hf_ieee80211_tag_ranging_ntb_i2r_tx_power,
30530 &hf_ieee80211_tag_ranging_ntb_reserved2,
30531 NULL((void*)0)};
30532 proto_tree *item;
30533
30534 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_ranging_ntb,
30535 ett_tag_ranging_ntb, nontb_fields,
30536 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30537 col_append_str(pinfo->cinfo, COL_INFO, ", NTB");
30538 add_min_max_time_between_measurements(item, tvb, pinfo, offset, sub_length);
30539}
30540
30541static const range_string ranging_subelt_types[] = {
30542 { 0, 0, "Non-TB specific" },
30543 { 1, 1, "TB-specific" },
30544 { 2, 2, "Secure HE-LTF" },
30545 { 3, 220, "Reserved" },
30546 { 221, 221, "Vendor Specific" },
30547 { 222, 255, "Reserved" },
30548 { 0, 0, NULL((void*)0) }
30549};
30550
30551static int
30552dissect_tb_specific(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
30553 int offset, int sub_length _U___attribute__((unused)))
30554{
30555
30556 /* Now add the extra 32-bits of items */
30557 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_aid_rsid, tvb,
30558 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30559 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_device_class, tvb,
30560 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30561 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo, tvb,
30562 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30563 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_trigger_frame_paddur,
30564 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30565 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_max_sess_exp, tvb,
30566 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30567 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_passive_tb_ranging, tvb,
30568 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30569 proto_tree_add_item(tree, hf_ieee80211_tag_ranging_tb_specific_reserved,
30570 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30571 offset += 4;
30572
30573 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
30574
30575 return offset;
30576}
30577
30578static int * const ranging_subelement_secure_he_ltf_fields[] = {
30579 &hf_ieee80211_tag_ranging_secure_he_ltf_version,
30580 &hf_ieee80211_tag_ranging_secure_he_ltf_req,
30581 &hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window,
30582 &hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window,
30583 &hf_ieee80211_tag_ranging_secure_he_ltf_reserved,
30584 NULL((void*)0)};
30585
30586static void
30587dissect_ranging_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int len)
30588{
30589 int tag_len = tvb_reported_length(tvb);
30590 unsigned subelt = 0;
30591 static int * const ranging_params_fields[] = {
30592 &hf_ieee80211_tag_ranging_status_indication,
30593 &hf_ieee80211_tag_ranging_value,
30594 &hf_ieee80211_tag_ranging_i2r_lmr_feedback,
30595 &hf_ieee80211_tag_ranging_secure_ltf_required,
30596 &hf_ieee80211_tag_ranging_secure_ltf_support,
30597 &hf_ieee80211_tag_ranging_ranging_priority,
30598 &hf_ieee80211_tag_ranging_r2i_toa_type,
30599 &hf_ieee80211_tag_ranging_i2r_toa_type,
30600 &hf_ieee80211_tag_ranging_r2i_aoa_requested,
30601 &hf_ieee80211_tag_ranging_i2r_aoa_requested,
30602 &hf_ieee80211_tag_ranging_format_and_bandwidth,
30603 &hf_ieee80211_tag_ranging_immediate_r2i_feedback,
30604 &hf_ieee80211_tag_ranging_immediate_i2r_feedback,
30605 &hf_ieee80211_tag_ranging_max_i2r_repetition,
30606 &hf_ieee80211_tag_ranging_max_r2i_repetition,
30607 &hf_ieee80211_tag_ranging_reserved1,
30608 &hf_ieee80211_tag_ranging_reserved2,
30609 &hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz,
30610 &hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz,
30611 &hf_ieee80211_tag_ranging_max_r2i_ltf_total,
30612 &hf_ieee80211_tag_ranging_max_i2r_ltf_total,
30613 &hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz,
30614 &hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz,
30615 &hf_ieee80211_tag_ranging_bss_color_info,
30616 NULL((void*)0)};
30617 static const value_string short_status[] = {
30618 { 0, "Reserved" },
30619 { 1, "Successful" },
30620 { 2, "Request incapable" },
30621 { 3, "Request failed" },
30622 { 0, NULL((void*)0) }
30623 };
30624
30625 if (len < 6) {
30626 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
30627 "Ranging Parameters must be at least 6 octets long");
30628 return;
30629 }
30630
30631 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_ranging_parameters,
30632 ett_tag_ranging, ranging_params_fields,
30633 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30634 uint8_t status = tvb_get_uint8(tvb, offset) & GENMASK(1, 0)(((1U << ((1) - (0) + 1)) - 1) << (0));
30635 if (status != 0) {
30636 col_append_fstr(pinfo->cinfo, COL_INFO, ", Status=%d (%s)", status,
30637 val_to_str_const(status, short_status, "Unknown"));
30638 }
30639
30640 offset += 7;
30641
30642 while (offset < len) {
30643 uint8_t sub_id, sub_length;
30644 proto_item *sub_elt_len, *rsti;
30645 proto_tree *sub_tree;
30646 unsigned start_offset = offset;
30647
30648 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
30649 ett_ranging_subelement_tree, &rsti,
30650 "Ranging Subelement %d", subelt);
30651
30652
30653 sub_id = tvb_get_uint8(tvb, offset);
30654 proto_item_append_text(sub_tree, ": %s",
30655 rval_to_str_const(sub_id, ranging_subelt_types, "Reserved"));
30656 proto_tree_add_item(sub_tree, hf_ieee80211_tag_ranging_subelt_tag, tvb,
30657 offset, 1, ENC_NA0x00000000);
30658 offset += 1;
30659
30660 sub_length = tvb_get_uint8(tvb, offset);
30661 sub_elt_len = proto_tree_add_item(sub_tree,
30662 hf_ieee80211_tag_ranging_subelt_len,
30663 tvb, offset, 1, ENC_NA0x00000000);
30664 offset += 1;
30665
30666 if (offset + sub_length > tag_len) {
30667 expert_add_info_format(pinfo, sub_elt_len, &ei_ieee80211_tag_length,
30668 "Subelement length (%u) exceeds remaining tag length (%u)",
30669 sub_length, tvb_captured_length_remaining(tvb, offset));
30670 proto_item_set_len(rsti, offset - start_offset);
30671 return;
30672 }
30673
30674 switch (sub_id) {
30675 case 0: /* non-TB specific */
30676 dissect_ntb_specific(tvb, pinfo, tree, offset, sub_length);
30677 break;
30678 case 1: /* Ranging SUB_TB_SPECIFIC */
30679 /* TODO: Specify the acceptable tagged elements */
30680 offset = dissect_tb_specific(tvb, pinfo, tree, offset, sub_length);
30681 break;
30682 case 2: /* Secure HE-LTF */
30683 proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset,
30684 hf_ieee80211_tag_ranging_secure_he_ltf,
30685 ett_tag_ranging_secure_he_ltf,
30686 ranging_subelement_secure_he_ltf_fields,
30687 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30688 break;
30689 default: /* skip unknown elements which may be defined in the future */
30690 break;
30691 }
30692
30693 offset += sub_length;
30694 subelt++;
30695 proto_item_set_len(rsti, offset - start_offset);
30696 }
30697}
30698
30699static int * const aoa_results_fields[] = {
30700 &hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth,
30701 &hf_ieee80211_tag_ftm_aoa_results_aoa_elevation,
30702 &hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy,
30703 &hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy,
30704 &hf_ieee80211_tag_ftm_aoa_results_best_awv_id,
30705 &hf_ieee80211_tag_ftm_aoa_results_aoa_reference,
30706 &hf_ieee80211_tag_ftm_aoa_results_reserved,
30707 NULL((void*)0)
30708};
30709
30710static const true_false_string aoa_reference_tfs = {
30711 "Earth coordinates",
30712 "STA-relative coordinated"
30713};
30714
30715static void
30716aoa_azimuth_custom(char *result, uint32_t aoa_azimuth)
30717{
30718 float az = aoa_azimuth * (360.0f / 2048.0f);
30719
30720 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", az);
30721}
30722
30723static void
30724aoa_elevation_custom(char *result, uint32_t aoa_elevation)
30725{
30726 float el = (aoa_elevation - 512) * (180.0f / 1024.0f);
30727
30728 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", el);
30729}
30730
30731static void
30732aoa_accuracy_custom(char *result, uint32_t aoa_accuracy)
30733{
30734 float ac = aoa_accuracy * (360.0f / 1024.0f);
30735
30736 if (aoa_accuracy == 127) {
30737 snprintf(result, ITEM_LABEL_LENGTH240, "No ability to estimate accuracy");
30738 } else if (aoa_accuracy == 126) {
30739 snprintf(result, ITEM_LABEL_LENGTH240, "No measurement");
30740 } else if (aoa_accuracy == 125) {
30741 snprintf(result, ITEM_LABEL_LENGTH240, "Larger than %7.3f", ac);
30742 } else {
30743 snprintf(result, ITEM_LABEL_LENGTH240, "%f7.3", ac);
30744 }
30745}
30746
30747static void
30748dissect_direction_measurement_results(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
30749 proto_tree *tree, int offset, int len _U___attribute__((unused)))
30750{
30751 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
30752 hf_ieee80211_tag_dirn_meas_results_aoa_results,
30753 ett_tag_direct_meas_results,
30754 aoa_results_fields,
30755 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
30756}
30757
30758/* ************************************************************************* */
30759/* Dissect and add tagged (optional) fields to proto tree */
30760/* ************************************************************************* */
30761
30762static int
30763ieee80211_tag_ssid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30764{
30765 int tag_len = tvb_reported_length(tvb);
30766 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30767 int offset = 0;
30768 /* 7.3.2.1 SSID element (0) */
30769 char ssid[MAX_SSID_LEN32]; /* The SSID may consist of arbitrary bytes */
30770 int ssid_len;
30771
30772 if (beacon_padding != 0) /* padding bug */
30773 return offset;
30774
30775 if (tag_len > MAX_SSID_LEN32) {
30776 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30777 "SSID length (%u) greater than maximum (%u)",
30778 tag_len, MAX_SSID_LEN32);
30779 }
30780
30781 /*
30782 * XXX - the 802.11 specs aren't particularly clear on how the SSID
30783 * is to be interpreted.
30784 *
30785 * IEEE Std 802.11-1999, section 7.3.2.2 "Service Set Identity (SSID)
30786 * element" says just
30787 *
30788 * The length of the SSID information field is between 0 and 32
30789 * octets. A 0 length information field indicates the broadcast SSID.
30790 *
30791 * with no indication that those octets encode a string.
30792 *
30793 * IEEE Std 802.11-2012, section 8.4.2.2 "SSID element", says that *but*
30794 * says after it
30795 *
30796 * When the UTF-8 SSID subfield of the Extended Capabilities element
30797 * is equal to 1 in the frame that includes the SSID element, the
30798 * SSID is interpreted using UTF-8 encoding.
30799 *
30800 * NOTE -- This is true for Beacon and Probe Response frames when the
30801 * MLME-START.request primitive was issued with the SSIDEncoding
30802 * parameter equal to UTF-8.
30803 *
30804 * and the SSIDEncoding parameter can either be UNSPECIFIED or UTF-8.
30805 *
30806 * IEEE Std 802.11-2020, section 9.4.2.2 "SSID element" changes the
30807 * wording to:
30808 *
30809 * When the UTF-8 SSID subfield of the Extended Capabilities element is
30810 * equal to 1 in the frame that includes the SSID element, or the Extended
30811 * Capabilities of the source of the SSID information is known to include
30812 * the UTF-8 SSID capability based on a previously received Extended
30813 * Capabilities element, the SSID is a sequence of UTF-8 encoded code
30814 * points. Otherwise, the character encoding of the octets in this SSID
30815 * element is unspecified.
30816 *
30817 * NOTE—If the SSID is a sequence of UTF-8 encoded code points, a
30818 * terminating null might or might not be present.
30819 *
30820 * So I *guess* that means that, if the UTF-8 SSID subfield isn't
30821 * equal to 1, the SSID is, in theory, just a bunch of octets, but
30822 * in practice, *probably* UTF-8 as that's the typical convention,
30823 * and, if it is equal to 1, it's a possibly null-terminated UTF-8
30824 * string. (Of course, a host can put anything there it wants to,
30825 * so we shouldn't just assume that it's *valid* ASCII or *valid* UTF-8.)
30826 *
30827 * So we really should extract it as an array of ssid_len bytes,
30828 * pass those bytes to Dot11DecryptSetLastSSID(), and:
30829 *
30830 * If the UTF-8 SSID subfield isn't set to 1, put the SSID in
30831 * a FT_BYTES as BASE_SHOW_UTF_8_PRINTABLE;
30832 *
30833 * If the UTF-8 SSID subfield is set to 1, put it in as an
30834 * ENC_UTF_8 string;
30835 *
30836 * XXX: Note that the Extended Capabilities tagged parameter is specified
30837 * to come *after* the SSID parameter (and "Fields and elements appear
30838 * in the specified, relative order" per 9.3.3.1 of IEEE 802.11 2020),
30839 * isn't sent with Response frames, and isn't guaranteed to appear with
30840 * Request frames (if none of the bits would be set, then it isn't
30841 * mandatory). We could store the bit if it appears in the conversation
30842 * data, which would handle Response frames and subsequent passes, but
30843 * for the first pass we don't know the value of the subfield until later.
30844 * We could store the proto_item with the ssid and add the string version
30845 * later, or add the string always as a hidden item and make it visible
30846 * later, or something else.
30847 *
30848 * Addendum: 802.11 2012 points out that a Zero-length SSID means
30849 * the Wildcard SSID. Make it so. From 8.4.2.2 of 802.11 2012:
30850 *
30851 * "The length of the SSID field is between 0 and 32 octets. A SSID
30852 * field of length 0 is used within Probe Request management frames to
30853 * indicate the wildcard SSID. The wildcard SSID is also used in
30854 * Beacon and Probe Response frames transmitted by mesh STAs."
30855 *
30856 * Also, we have to return a non-zero value here to prevent an ugly
30857 * undissected field warning. Since this code is only called from
30858 * one place and is used in call to dissector_try_uint_with_data, it is
30859 * OK to do so.
30860 */
30861 ssid_len = tvb_get_raw_bytes_as_string(tvb_new_subset_length(tvb, offset, tag_len), offset, ssid, MAX_SSID_LEN32);
30862 if (ssid_len == (int)tag_len) {
30863 Dot11DecryptSetLastSSID(&dot11decrypt_ctx, (char *) ssid, ssid_len);
30864 }
30865 char *s;
30866 /* XXX: 802.11-2020 9.4.2.2 notes that it might or might not include
30867 * a terminating null when the UTF-8 SSID bit is set; if we handle
30868 * that properly and add it as a ENC_UTF_8 FT_STRING, that will work,
30869 * but the FT_BYTES BASE_SHOW_*_PRINTABLE doesn't handle an optional
30870 * terminating null. (Maybe it should?) */
30871 proto_tree_add_item_ret_display_string(tree, hf_ieee80211_tag_ssid, tvb,
30872 offset, tag_len, ENC_NA0x00000000, pinfo->pool, &s);
30873
30874 if (ssid_len > 0) {
30875 proto_item_append_text(field_data->item_tag, ": %s", s);
30876 col_append_fstr(pinfo->cinfo, COL_INFO, ", SSID=%s", s);
30877
30878 /* Wlan Stats */
30879 memcpy(wlan_stats.ssid, ssid, MIN(ssid_len, MAX_SSID_LEN)(((ssid_len) < (32)) ? (ssid_len) : (32)));
30880 wlan_stats.ssid_len = ssid_len;
30881 } else {
30882 proto_item_append_text(field_data->item_tag, ": Wildcard SSID");
30883
30884 col_append_str(pinfo->cinfo, COL_INFO, ", SSID=Wildcard (Broadcast)");
30885 offset += 1; // Make sure we return non-zero
30886 }
30887
30888 beacon_padding += 1; /* padding bug */
30889
30890 return offset + tag_len;
30891}
30892
30893static void
30894dissect_he_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
30895 int offset, int len);
30896
30897static void
30898dissect_he_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
30899 int offset, int len _U___attribute__((unused)));
30900
30901static const value_string phy_type_vals[] = {
30902 { 2, "DSSS 2.4 GHz" },
30903 { 4, "OFDM" },
30904 { 5, "HRDSSS" },
30905 { 6, "ERP" },
30906 { 7, "HT" },
30907 { 8, "DMG" },
30908 { 9, "VHT" },
30909 { 10, "TVHT" },
30910 { 11, "S1G" },
30911 { 12, "CDMG" },
30912 { 13, "CMMG" },
30913 { 14, "HE" },
30914 { 15, "EDMG" },
30915 { 17, "NGV" },
30916 { 18, "EHT" },
30917 { 0, NULL((void*)0) }
30918};
30919
30920static int
30921dissect_neighbor_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
30922{
30923 int tag_len = tvb_reported_length(tvb);
30924 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
30925 int offset = 0;
30926 uint8_t sub_tag_id;
30927 uint32_t sub_tag_len;
30928 const char *sub_tag_name;
30929 proto_item *parent_item;
30930 proto_tree *bssid_info_subtree, *bssid_info_cap_subtree, *sub_tag_tree;
30931 tvbuff_t *sub_tag_tvb = NULL((void*)0);
30932
30933 if (tag_len < 13) {
30934 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
30935 "Neighbor Report length %u wrong, must be > 13", tag_len);
30936 return tvb_captured_length(tvb);
30937 }
30938
30939 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid, tvb, offset, 6, ENC_NA0x00000000);
30940 offset += 6;
30941
30942 /*** Begin: BSSID Information ***/
30943
30944 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_bssid_info, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30945 bssid_info_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_tree);
30946
30947 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reachability, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30948 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_security, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30949 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_key_scope, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30950 parent_item = proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30951 bssid_info_cap_subtree = proto_item_add_subtree(parent_item, ett_tag_neighbor_report_bssid_info_capability_tree);
30952 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30953 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30954 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30955 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30956 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30957 proto_tree_add_item(bssid_info_cap_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30958 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30959 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30960 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30961 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_ftm, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30962 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30963 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_er_bss, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30964 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30965 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30966 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30967 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);
30968 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30969 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_eht, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30970 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30971 proto_tree_add_item(bssid_info_subtree, hf_ieee80211_tag_neighbor_report_bssid_info_reserved, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
30972 offset += 4;
30973
30974 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_ope_class, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30975 offset += 1;
30976
30977 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30978 offset += 1;
30979
30980 proto_tree_add_item(tree, hf_ieee80211_tag_neighbor_report_phy_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30981 offset += 1;
30982
30983 /* The Optional Subelements field format contains zero or more subelements */
30984 if (tag_len == 13){ /* tag_len == 13 => no Subelements */
30985 return tvb_captured_length(tvb);
30986 }
30987
30988 while (offset < tag_len)
30989 {
30990 sub_tag_id = tvb_get_uint8(tvb, offset);
30991 sub_tag_len = tvb_get_uint8(tvb, offset + 1);
30992 sub_tag_name = val_to_str_const(sub_tag_id, ieee80211_neighbor_report_subelement_id_vals, "Unknown");
30993
30994 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);
30995
30996 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
30997 offset += 1;
30998
30999 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_length, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31000 offset += 1;
31001
31002 sub_tag_tvb = tvb_new_subset_length(tvb, offset, sub_tag_len);
31003
31004 switch (sub_tag_id) {
31005 case NR_SUB_ID_TSF_INFO1:
31006 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_tsf_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31007 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_beacon_interval, tvb, offset + 2, 2, ENC_LITTLE_ENDIAN0x80000000);
31008 break;
31009 case NR_SUB_ID_MEASUREMENT_PILOT_INFO66:
31010 dissect_measurement_pilot_trans_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
31011 break;
31012 case NR_SUB_ID_CON_COU_STR2:
31013 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_country_code, tvb, offset, 2, ENC_ASCII0x00000000);
31014 break;
31015 case NR_SUB_ID_BSS_TRN_CAN_PREF3:
31016 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref, tvb, offset, 1, ENC_NA0x00000000);
31017 break;
31018 case NR_SUB_ID_BSS_TER_DUR4:
31019 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
31020 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_bss_dur, tvb, offset + 8, 2, ENC_LITTLE_ENDIAN0x80000000);
31021 break;
31022 case NR_SUB_ID_HT_CAPABILITIES45:
31023 dissect_ht_capability_ie_common(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len, field_data->item_tag_length, false0);
31024 break;
31025 case NR_SUB_ID_HT_OPERATION61:
31026 dissect_ht_operation_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
31027 break;
31028 case NR_SUB_ID_SEC_CHANNEL_OFFSET62:
31029 dissect_secondary_channel_offset_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
31030 break;
31031 case NR_SUB_ID_HT_MULTIPLE_BSSID71:
31032 dissect_multiple_bssid_ie(sub_tag_tvb, pinfo, sub_tag_tree, data);
31033 break;
31034 case NR_SUB_ID_HE_CAPABILITIES193:
31035 dissect_he_capabilities(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
31036 break;
31037 case NR_SUB_ID_HE_OPERATION194:
31038 dissect_he_operation(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
31039 break;
31040 case NR_SUB_ID_EHT_CAPABILITIES199:
31041 dissect_eht_capabilities(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
31042 break;
31043 case NR_SUB_ID_EHT_OPERATION200:
31044 dissect_eht_operation(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
31045 break;
31046 case NR_SUB_ID_BASIC_MULTI_LINK201:
31047 dissect_multi_link(sub_tag_tvb, pinfo, sub_tag_tree, 0, sub_tag_len);
31048 break;
31049 case NR_SUB_ID_VENDOR_SPECIFIC221:
31050 default:
31051 proto_tree_add_item(sub_tag_tree, hf_ieee80211_tag_neighbor_report_subelement_data, tvb, offset, sub_tag_len, ENC_NA0x00000000);
31052 break;
31053 }
31054
31055 offset += sub_tag_len;
31056 }
31057
31058 return offset;
31059}
31060
31061static int
31062ieee80211_tag_supp_rates(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31063{
31064 int tag_len = tvb_reported_length(tvb);
31065 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31066 int offset = 0;
31067 /* 7.3.2.2 Supported Rates element (1) */
31068 if (tag_len < 1) {
31069 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31070 "Tag length %u too short, must be greater than 0",
31071 tag_len);
31072 return offset;
31073 }
31074
31075 while (offset < tag_len) {
31076 proto_tree_add_item(tree, hf_ieee80211_tag_supp_rates, tvb, offset, 1,
31077 ENC_LITTLE_ENDIAN0x80000000);
31078 proto_item_append_text(field_data->item_tag, " %s,",
31079 val_to_str_ext_const(tvb_get_uint8(tvb, offset),
31080 &ieee80211_supported_rates_vals_ext,
31081 "Unknown Rate"));
31082 offset += 1;
31083 }
31084
31085 proto_item_append_text(field_data->item_tag, " [Mbit/sec]");
31086
31087 return offset;
31088}
31089
31090static int
31091ieee80211_tag_fh_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31092{
31093 int tag_len = tvb_reported_length(tvb);
31094 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31095 int offset = 0;
31096 /* 7.3.2.3 FH Parameter Set element (2) */
31097 if (tag_len < 5) {
31098 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31099 "Tag length %u too short, must be >= 5", tag_len);
31100 return 1;
31101 }
31102
31103 proto_tree_add_item(tree, hf_ieee80211_tag_fh_dwell_time,
31104 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31105 offset += 2;
31106
31107 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_set,
31108 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31109 offset += 1;
31110
31111 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_pattern,
31112 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31113 offset += 1;
31114
31115 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hop_index,
31116 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31117 offset += 1;
31118
31119 return offset;
31120}
31121
31122static int
31123ieee80211_tag_ds_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31124{
31125 int tag_len = tvb_reported_length(tvb);
31126 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31127 int offset = 0;
31128 /* 7.3.2.4 DS Parameter Set element (3) */
31129 if (tag_len != 1) {
31130 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31131 "Tag length %u wrong, must be = 1", tag_len);
31132 return 1;
31133 }
31134
31135 proto_tree_add_item(tree, hf_ieee80211_tag_ds_param_channel,
31136 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31137
31138 proto_item_append_text(field_data->item_tag, ": Current Channel: %u",
31139 tvb_get_uint8(tvb, offset));
31140
31141 wlan_stats.channel = tvb_get_uint8(tvb, offset);
31142 offset += 1;
31143
31144 return offset;
31145}
31146
31147static int
31148ieee80211_tag_cf_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31149{
31150 int tag_len = tvb_reported_length(tvb);
31151 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31152 int offset = 0;
31153 /* 7.3.2.5 CF Parameter Set element (4) */
31154 if (tag_len != 6) {
31155 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31156 "Tag length %u wrong, must be = 6", tag_len);
31157 return offset;
31158 }
31159
31160 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_count,
31161 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31162 proto_item_append_text(field_data->item_tag, ": CFP count %u", tvb_get_uint8(tvb, offset));
31163 offset += 1;
31164
31165 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_period,
31166 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31167 proto_item_append_text(field_data->item_tag, ": CFP Period %u", tvb_get_uint8(tvb, offset));
31168 offset += 1;
31169
31170 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_max_duration,
31171 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31172 proto_item_append_text(field_data->item_tag, ": CFP Max Duration %u",
31173 tvb_get_letohs(tvb, offset));
31174 offset += 2;
31175
31176 proto_tree_add_item(tree, hf_ieee80211_tag_cfp_dur_remaining,
31177 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31178 proto_item_append_text(field_data->item_tag, ": CFP Dur Remaining %u",
31179 tvb_get_letohs(tvb, offset));
31180 offset += 1;
31181
31182 return offset;
31183}
31184
31185static int
31186dissect_pvb_encoded_block_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31187 proto_tree *tree, int offset,
31188 bool_Bool inverse_bm _U___attribute__((unused)),
31189 uint8_t block_offset _U___attribute__((unused)),
31190 uint8_t page_index _U___attribute__((unused)))
31191{
31192 uint8_t block_bitmap = tvb_get_uint8(tvb, offset);
31193 proto_tree *bb_tree;
31194 proto_item *bbi;
31195 proto_item *bb;
31196 int start_offset = offset;
31197 uint8_t subblock = 0;
31198
31199 /*
31200 * Walk the block bitmap to figure out how many subblocks there are an
31201 * handle each of them.
31202 */
31203 bb_tree = proto_tree_add_subtree(tree, tvb, offset, -1,
31204 ett_s1g_pvb_block_bitmap_tree, &bbi,
31205 "Block Bitmap");
31206
31207 bb = proto_tree_add_item(bb_tree, hf_ieee80211_s1g_block_bitmap, tvb, offset,
31208 1, ENC_NA0x00000000);
31209 offset += 1;
31210
31211 while (block_bitmap) {
31212 bool_Bool subblock_present = block_bitmap & 0x01;
31213 proto_tree *sb_tree;
31214 uint8_t bit_pos = 0;
31215
31216 if (subblock_present) {
31217 uint8_t subblock_val = tvb_get_uint8(tvb, offset);
31218
31219 sb_tree = proto_tree_add_subtree_format(bb_tree, tvb, offset, 1,
31220 ett_s1g_pvb_subblock_tree, NULL((void*)0),
31221 "Subblock %u", subblock);
31222 while (subblock_val) {
31223
31224 if (subblock_val & 0x01) {
31225 proto_item_append_text(bb, ", Subblock %d present", bit_pos);
31226 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
31227 (subblock << 3) | bit_pos;
31228 proto_tree_add_uint_bits_format_value(sb_tree,
31229 hf_ieee80211_s1g_block_bitmap_sta_aid13,
31230 tvb, offset * 8 + (7 - bit_pos), 1, 1,
31231 ENC_BIG_ENDIAN0x00000000, " 0x%0x", aid13);
31232 }
31233
31234 bit_pos += 1;
31235 subblock_val = subblock_val >> 1;
31236 }
31237
31238 offset += 1;
31239 }
31240
31241 block_bitmap = block_bitmap >> 1;
31242 subblock += 1;
31243 }
31244
31245 proto_item_set_len(bbi, offset - start_offset);
31246 return offset;
31247}
31248
31249static int
31250dissect_pvb_encoded_single_aid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31251 proto_tree *tree, int offset,
31252 bool_Bool inverse_bm _U___attribute__((unused)),
31253 uint8_t block_offset,
31254 uint8_t page_index)
31255{
31256 uint8_t single_aid = tvb_get_uint8(tvb, offset);
31257 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
31258 (single_aid & 0x3F);
31259
31260 proto_tree_add_uint_format(tree, hf_ieee80211_s1g_block_bitmap_single_aid,
31261 tvb, offset, 1, single_aid,
31262 "Single AID13: 0x%0x", aid13);
31263 offset += 1;
31264
31265 return offset;
31266}
31267
31268static int
31269dissect_pvb_encoded_olb(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31270 proto_tree *tree, int offset,
31271 bool_Bool inverse_bm _U___attribute__((unused)),
31272 uint8_t block_offset _U___attribute__((unused)),
31273 uint8_t page_index _U___attribute__((unused)))
31274{
31275 uint8_t length = tvb_get_uint8(tvb, offset);
31276 proto_tree *olb_tree;
31277 int k;
31278
31279 olb_tree = proto_tree_add_subtree(tree, tvb, offset, length + 1,
31280 ett_s1g_pvb_olb_tree, NULL((void*)0),
31281 "OLB Mode");
31282
31283 proto_tree_add_item(olb_tree, hf_ieee80211_s1g_block_bitmap_olb_length,
31284 tvb, offset, 1, ENC_NA0x00000000);
31285 offset += 1;
31286
31287 for (k = 0; k < length; k++) {
31288 uint8_t subblock_val = tvb_get_uint8(tvb, offset);
31289 proto_tree *sb_tree;
31290 uint8_t bit_pos = 0;
31291
31292 sb_tree = proto_tree_add_subtree_format(olb_tree, tvb, offset, 1,
31293 ett_s1g_pvb_olb_subblock, NULL((void*)0),
31294 "Subblock %u", k);
31295 while (subblock_val) {
31296
31297 if (subblock_val & 0x01) {
31298 uint16_t aid13 = (page_index << 11) | (block_offset << 6) |
31299 (k << 3) | bit_pos;
31300 proto_tree_add_uint_bits_format_value(sb_tree,
31301 hf_ieee80211_s1g_block_bitmap_sta_aid13,
31302 tvb, offset * 8 + (7 - bit_pos), 1, 1,
31303 ENC_BIG_ENDIAN0x00000000, " 0x%0x", aid13);
31304 }
31305
31306 bit_pos += 1;
31307 subblock_val = subblock_val >> 1;
31308 }
31309
31310 offset += 1;
31311 }
31312
31313 offset += length;
31314
31315 return offset;
31316}
31317
31318static int
31319dissect_pvb_encoded_ade(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
31320 proto_tree *tree, int offset,
31321 bool_Bool inverse_bm _U___attribute__((unused)),
31322 uint8_t block_offset _U___attribute__((unused)),
31323 uint8_t page_index _U___attribute__((unused)))
31324{
31325 uint8_t ade_control = tvb_get_uint8(tvb, offset);
31326 uint8_t ewl = (ade_control & 0x03) + 1;
31327 uint8_t ade_bytes = ade_control >> 3;
31328 proto_tree *ade_tree;
31329 proto_item *cntl_item;
31330 proto_tree *cntl_tree;
31331
31332 ade_tree = proto_tree_add_subtree(tree, tvb, offset, ade_bytes + 1,
31333 ett_s1g_pvb_ade_tree, NULL((void*)0),
31334 "ADE Mode");
31335
31336 cntl_item = proto_tree_add_item(ade_tree, hf_ieee80211_s1g_block_bitmap_ade,
31337 tvb, offset, 1, ENC_NA0x00000000);
31338
31339 cntl_tree = proto_item_add_subtree(cntl_item, ett_s1g_pvb_ade_control);
31340
31341 proto_tree_add_uint_bits_format_value(cntl_tree,
31342 hf_ieee80211_s1g_block_bitmap_ewl,
31343 tvb, offset *8, 3, ewl,
31344 ENC_BIG_ENDIAN0x00000000, "EWL: %u", ewl);
31345 proto_tree_add_uint_bits_format_value(cntl_tree,
31346 hf_ieee80211_s1g_block_bitmap_len,
31347 tvb, offset * 8 + 3, 5, ade_bytes,
31348 ENC_BIG_ENDIAN0x00000000, "Length: %u", ade_bytes);
31349 offset += 1;
31350
31351 /* TODO: Add each subblock */
31352 proto_tree_add_item(ade_tree, hf_ieee80211_s1g_block_bitmap_ade_bytes, tvb,
31353 offset, ade_bytes, ENC_NA0x00000000);
31354
31355 offset += ade_bytes;
31356
31357 return offset;
31358}
31359
31360static int * const s1g_pvb_encoded_block_control[] = {
31361 &hf_ieee80211_s1g_pvb_encoding_mode,
31362 &hf_ieee80211_s1g_pvb_inverse_bitmap,
31363 &hf_ieee80211_s1g_pvb_block_offset,
31364 NULL((void*)0)
31365};
31366
31367#define PVB_BLOCK_BITMAP0x0 0x0
31368#define PVB_SINGLE_AID0x1 0x1
31369#define PVB_OLB0x2 0x2
31370#define PVB_ADE0x3 0x3
31371
31372static const value_string s1g_block_control_encoding_mode_vals[] = {
31373 { 0, "Block Bitmap" },
31374 { 1, "Single AID" },
31375 { 2, "OLB" },
31376 { 3, "ADE" },
31377 { 0, NULL((void*)0) }
31378};
31379
31380static int
31381dissect_pvb_encoded_block(tvbuff_t *tvb, packet_info *pinfo,
31382 proto_tree *tree, int offset, int idx,
31383 uint8_t page_index)
31384{
31385 uint8_t block_control = tvb_get_uint8(tvb, offset);
31386 uint8_t enc_mode = block_control & 0x03;
31387 uint8_t inverse_bm = (enc_mode >> 2) & 0x01;
31388 uint8_t block_offset = block_control >> 3;
31389 proto_tree *eb_tree;
31390 proto_item *ebti;
31391
31392 eb_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1,
31393 ett_s1g_pvb_eb_tree, &ebti,
31394 "Encoded Block %d", idx);
31395
31396 proto_tree_add_bitmask_with_flags(eb_tree, tvb, offset,
31397 hf_ieee80211_s1g_pvb_block_control_byte,
31398 ett_s1g_pvb_block_control_byte,
31399 s1g_pvb_encoded_block_control,
31400 ENC_NA0x00000000, BMT_NO_APPEND0x01);
31401 offset += 1;
31402
31403 /*
31404 * If there are no bytes, add an EI and get out of here
31405 */
31406 switch (enc_mode) {
31407 case PVB_BLOCK_BITMAP0x0:
31408 offset = dissect_pvb_encoded_block_bitmap(tvb, pinfo, eb_tree, offset,
31409 inverse_bm, block_offset,
31410 page_index);
31411 break;
31412 case PVB_SINGLE_AID0x1:
31413 offset = dissect_pvb_encoded_single_aid(tvb, pinfo, eb_tree, offset,
31414 inverse_bm, block_offset,
31415 page_index);
31416 break;
31417 case PVB_OLB0x2:
31418 offset = dissect_pvb_encoded_olb(tvb, pinfo, eb_tree, offset,
31419 inverse_bm, block_offset, page_index);
31420 break;
31421 case PVB_ADE0x3:
31422 offset = dissect_pvb_encoded_ade(tvb, pinfo, eb_tree, offset, inverse_bm,
31423 block_offset, page_index);
31424 break;
31425 }
31426
31427 return offset;
31428}
31429
31430static int
31431dissect_partial_virtual_bitmap(tvbuff_t *tvb, packet_info *pinfo,
31432 proto_tree *tree, int offset, int pvb_len,
31433 uint8_t page_index)
31434{
31435 proto_tree *pvb_tree;
31436 int idx = 0;
31437
31438 pvb_tree = proto_tree_add_subtree(tree, tvb, offset, pvb_len,
31439 ett_s1g_pvb_tree, NULL((void*)0),
31440 "Partial Virtual Bitmap");
31441
31442 while (tvb_reported_length_remaining(tvb, offset) > 0) {
31443 offset = dissect_pvb_encoded_block(tvb, pinfo, pvb_tree, offset, idx,
31444 page_index);
31445 idx++;
31446 }
31447
31448 return offset;
31449}
31450
31451static int
31452ieee80211_tag_tim(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31453{
31454 int tag_len = tvb_reported_length(tvb);
31455 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31456 int offset = 0;
31457 unsigned aid, pvb_len, n1, i, j, byte;
31458 bool_Bool is_s1g = sta_is_s1g(pinfo);
31459 static int * const ieee80211_tim_bmapctl[] = {
31460 &hf_ieee80211_tim_bmapctl_mcast,
31461 &hf_ieee80211_tim_bmapctl_offset,
31462 NULL((void*)0)
31463 };
31464 static int * const ieee80211_s1g_bmapctl[] = {
31465 &hf_ieee80211_s1g_tim_bmapctl_traffic_indicator,
31466 &hf_ieee80211_s1g_tim_page_slice_number,
31467 &hf_ieee80211_s1g_tim_page_index,
31468 NULL((void*)0)
31469 };
31470
31471 /*
31472 * 802.11-2012: 8.4.2.7 TIM element (5), however, if this is an S1G frame
31473 * then it is different. S1G TIM elements can be 2, 3, or longer bytes.
31474 */
31475 if (is_s1g) {
31476 if (tag_len < 2) {
31477 expert_add_info_format(pinfo, field_data->item_tag_length,
31478 &ei_ieee80211_tag_length,
31479 "Tag length %u too short for S1G frame, must be >= 3",
31480 tag_len);
31481 return tag_len;
31482 }
31483 } else {
31484 if (tag_len < 4) {
31485 expert_add_info_format(pinfo, field_data->item_tag_length,
31486 &ei_ieee80211_tag_length,
31487 "Tag length %u too short for Non-S1G frame, must be >= 4",
31488 tag_len);
31489 return tag_len;
31490 }
31491 }
31492
31493 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_count,
31494 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31495 proto_item_append_text(field_data->item_tag, ": DTIM %u of",
31496 tvb_get_uint8(tvb, offset));
31497 offset += 1;
31498
31499 proto_tree_add_item(tree, hf_ieee80211_tim_dtim_period,
31500 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31501 proto_item_append_text(field_data->item_tag, " %u bitmap",
31502 tvb_get_uint8(tvb, offset));
31503 offset += 1;
31504
31505 if (offset >= tag_len)
31506 return offset;
31507
31508 if (is_s1g) {
31509 unsigned bitmap_len = 0;
31510
31511 if (tag_len >= 3) {
31512 uint8_t page_index = tvb_get_uint8(tvb, offset) >> 6;
31513
31514 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
31515 hf_ieee80211_s1g_tim_bmapctrl,
31516 ett_tag_bmapctl_tree,
31517 ieee80211_s1g_bmapctl,
31518 ENC_NA0x00000000, BMT_NO_APPEND0x01);
31519 offset += 1;
31520 bitmap_len = tvb_reported_length_remaining(tvb, offset);
31521 if (bitmap_len > 0) {
31522 offset = dissect_partial_virtual_bitmap(tvb, pinfo, tree, offset,
31523 bitmap_len, page_index);
31524 }
31525 }
31526 } else {
31527 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
31528 hf_ieee80211_tim_bmapctl,
31529 ett_tag_bmapctl_tree,
31530 ieee80211_tim_bmapctl,
31531 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
31532 pvb_len = tag_len - 3;
31533 n1 = tvb_get_uint8(tvb, offset) & 0xFE;
31534 offset += 1;
31535 proto_tree_add_item(tree, hf_ieee80211_tim_partial_virtual_bitmap,
31536 tvb, offset, pvb_len, ENC_NA0x00000000);
31537 /* FIXME: Handles dot11MgmtOptionMultiBSSIDActivated = false only */
31538 for (i = 0; i < pvb_len; i++) {
31539 byte = tvb_get_uint8(tvb, offset + i);
31540 for (j = 0; j < 8; j++) {
31541 if (byte & (1 << j)) {
31542 aid = 8*n1 + 8*i + j;
31543 proto_tree_add_uint(tree, hf_ieee80211_tim_aid, tvb, offset + i,
31544 1, aid);
31545 }
31546 }
31547 }
31548 offset += pvb_len;
31549 }
31550
31551 return offset;
31552}
31553
31554static int
31555ieee80211_tag_ibss_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31556{
31557 int tag_len = tvb_reported_length(tvb);
31558 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31559 int offset = 0;
31560 /* 7.3.2.7 IBSS Parameter Set element (6) */
31561
31562 if (tag_len != 2) {
31563 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31564 "Tag length %u wrong, must be = 2", tag_len);
31565 return 1;
31566 }
31567
31568 proto_tree_add_item(tree, hf_ieee80211_tag_ibss_atim_window,
31569 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31570 proto_item_append_text(field_data->item_tag, ": ATIM window 0x%x",
31571 tvb_get_letohs(tvb, offset));
31572 offset += 2;
31573
31574 return offset;
31575}
31576
31577/* IEEE 802.11-2020, C.3 MIB detail, dot11CountryString */
31578static const value_string environment_vals[] = {
31579 { 0x1, "Operating classes in the United States" }, /* Table E-1 */
31580 { 0x2, "Operating classes in Europe" }, /* Table E-2 */
31581 { 0x3, "Operating classes in Japan" }, /* Table E-3 */
31582 { 0x4, "Global operating classes" }, /* Table E-4 */
31583 { 0x5, "S1G operating classes" }, /* Table E-5 */
31584 { 0x6, "Operating classes in China" }, /* Table E-6 */
31585 { ' ', "All" }, /* All environments for this band */
31586 { 'I', "Indoor" },
31587 { 'O', "Outdoor" },
31588 { 'X', "Non Country Entity" },
31589 { 0, NULL((void*)0) }
31590};
31591
31592static int
31593ieee80211_tag_country_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31594{
31595 int tag_len = tvb_reported_length(tvb);
31596 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31597 int offset = 0;
31598 /* 7.3.2.9 Country information element (7) */
31599 proto_tree *sub_tree;
31600 proto_item *sub_item;
31601 const uint8_t* country_code;
31602
31603 if (tag_len < 6) {
31604 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31605 "Tag length %u too short, must be >= 6", tag_len);
31606 return 1;
31607 }
31608
31609 /* FIXME: If environment is 'X', the only allowed CC is "XX" */
31610 proto_tree_add_item_ret_string(tree, hf_ieee80211_tag_country_info_code,
31611 tvb, offset, 2, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &country_code);
31612 proto_item_append_text(field_data->item_tag, ": Country Code %s", country_code);
31613 offset += 2;
31614
31615 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_env,
31616 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31617 proto_item_append_text(field_data->item_tag, ", Environment %s",
31618 val_to_str(pinfo->pool, tvb_get_uint8(tvb, offset),
31619 environment_vals, "0x%02x"));
31620 offset += 1;
31621
31622 while (offset < tag_len) {
31623 /* Padding ? */
31624 if ((tag_len - offset) < 3) {
31625 proto_tree_add_item(tree, hf_ieee80211_tag_country_info_pad,
31626 tvb, offset, 1, ENC_NA0x00000000);
31627 offset += 1;
31628 continue;
31629 }
31630 if (tvb_get_uint8(tvb, offset) <= 200) { /* 802.11d */
31631 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_fnm,
31632 tvb, offset, 3, ENC_NA0x00000000);
31633 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_fnm_tree);
31634
31635 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_fcn,
31636 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31637 proto_item_append_text(sub_item, ": First Channel Number: %u",
31638 tvb_get_uint8(tvb, offset));
31639 offset += 1;
31640 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_nc,
31641 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31642 proto_item_append_text(sub_item, ", Number of Channels: %u",
31643 tvb_get_uint8(tvb, offset));
31644 offset += 1;
31645 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_fnm_mtpl,
31646 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31647 proto_item_append_text(sub_item,
31648 ", Maximum Transmit Power Level: %d dBm",
31649 tvb_get_uint8(tvb, offset));
31650 offset += 1;
31651 } else { /* 802.11j */
31652 sub_item = proto_tree_add_item(tree, hf_ieee80211_tag_country_info_rrc,
31653 tvb, offset, 3, ENC_NA0x00000000);
31654 sub_tree = proto_item_add_subtree(sub_item, ett_tag_country_rcc_tree);
31655
31656 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oei,
31657 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31658 proto_item_append_text(sub_item,
31659 ": Operating Extension Identifier: %u",
31660 tvb_get_uint8(tvb, offset));
31661 offset += 1;
31662 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_oc,
31663 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31664 proto_item_append_text(sub_item, ", Operating Class: %u",
31665 tvb_get_uint8(tvb, offset));
31666 offset += 1;
31667 proto_tree_add_item(sub_tree, hf_ieee80211_tag_country_info_rrc_cc,
31668 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31669 proto_item_append_text(sub_item, ", Coverage Class: %u",
31670 tvb_get_uint8(tvb, offset));
31671 offset += 1;
31672 }
31673 }
31674
31675 return offset;
31676}
31677
31678static int
31679ieee80211_tag_fh_hopping_parameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31680{
31681 int tag_len = tvb_reported_length(tvb);
31682 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31683 int offset = 0;
31684
31685 /* 7.3.2.10 Hopping Pattern Parameters information element (8) */
31686 if (tag_len < 2) {
31687 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31688 "Tag length %u too short, must be >= 2", tag_len);
31689 return 1;
31690 }
31691
31692 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
31693 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31694 proto_item_append_text(field_data->item_tag, ": Prime Radix: %u", tvb_get_uint8(tvb, offset));
31695 offset += 1;
31696
31697 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
31698 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31699 proto_item_append_text(field_data->item_tag, ", Number of Channels: %u",
31700 tvb_get_uint8(tvb, offset));
31701 offset += 1;
31702
31703 return offset;
31704}
31705
31706static int
31707ieee80211_tag_fh_hopping_table(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31708{
31709 int tag_len = tvb_reported_length(tvb);
31710 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31711 int offset = 0;
31712
31713 /* 7.3.2.11 Hopping Pattern Table information element (9) */
31714 if (tag_len < 4) {
31715 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
31716 "Tag length %u too short, must be >= 4", tag_len);
31717 return 1;
31718 }
31719
31720 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_flag,
31721 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31722 offset += 1;
31723
31724 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_number_of_sets,
31725 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31726 offset += 1;
31727
31728 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_modulus,
31729 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31730 offset += 1;
31731
31732 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_table_offset,
31733 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31734 offset += 1;
31735
31736 while (offset < tag_len) {
31737 proto_tree_add_item(tree, hf_ieee80211_tag_fh_hopping_random_table,
31738 tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
31739 offset += 2;
31740 }
31741
31742 return offset;
31743}
31744
31745int
31746add_tagged_field(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype,
31747 const uint8_t *valid_element_ids, unsigned valid_element_ids_count,
31748 association_sanity_check_t *association_sanity_check)
31749{
31750 return add_tagged_field_with_validation(pinfo, tree, tvb, offset, ftype, valid_element_ids,
31751 valid_element_ids_count, false0, NULL((void*)0), 0, false0, association_sanity_check);
31752}
31753
31754/*
31755 * Build a composite TVB from the current TVB and the next ones that are
31756 * fragment elements.
31757 *
31758 * We also add the fragments to the tree. And add an expert info if there are
31759 * problems.
31760 *
31761 * When called we know we have two fragments, at least.
31762 */
31763static tvbuff_t *
31764build_defrag_tvb(packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)), tvbuff_t *tvb,
31765 int offset, uint32_t *tag_len, uint32_t *tag_overhead)
31766{
31767 tvbuff_t *new_tvb = tvb_new_composite();
31768 tvbuff_t *tmp_tvb = NULL((void*)0);
31769 uint32_t new_len = 0, overhead = 0;
31770 uint8_t frag_len = 0;
31771
31772 /*
31773 * We come in here pointing to the first fragment and on each iteration
31774 * We are pointing to the next fragment
31775 */
31776 do {
31777 offset += 1;
31778 frag_len = tvb_get_uint8(tvb, offset);
31779 offset += 1;
31780 tmp_tvb = tvb_new_subset_length(tvb, offset, frag_len);
31781 /* Insert this fragment ... */
31782 tvb_composite_append(new_tvb, tmp_tvb);
31783 new_len += frag_len;
31784 offset += frag_len;
31785 overhead += 2;
31786 } while (frag_len == 255 &&
31787 tvb_captured_length_remaining(tvb, offset) > 2 &&
31788 tvb_get_uint8(tvb, offset) == TAG_FRAGMENT242);
31789
31790 *tag_len = new_len;
31791 *tag_overhead = overhead;
31792 tvb_composite_finalize(new_tvb);
31793
31794 return new_tvb;
31795}
31796
31797int
31798add_tagged_field_with_validation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset, int ftype,
31799 const uint8_t *element_ids, unsigned element_ids_count, bool_Bool element_ids_assume_invalid,
31800 const uint8_t *ext_element_ids, unsigned ext_element_ids_count, bool_Bool ext_element_ids_assume_invalid,
31801 association_sanity_check_t *association_sanity_check)
31802{
31803 tvbuff_t *tag_tvb;
31804 uint32_t tag_no, tag_len, tag_overhead;
31805 uint32_t ext_tag_no = 0;
31806 proto_tree *orig_tree = tree;
31807 proto_item *ti = NULL((void*)0);
31808 proto_item *ti_len, *ti_tag;
31809 bool_Bool isDMG;
31810
31811 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)))
;
31812
31813 tag_no = tvb_get_uint8(tvb, offset);
31814 tag_len = tvb_get_uint8(tvb, offset + 1);
31815 save_tag_for_dot11decrypt(tvb, pinfo, offset);
31816
31817 /*
31818 * If we have element fragmentation, construct a composite TVB with the
31819 * fragments. Rules are:
31820 * 1. Must be in the one MMPDU (so cannot exceed the TVB we are given.)
31821 * 2. If the next element is a fragment, this one must have a length of 255.
31822 * 3. We don't care about extensions here.
31823 * 4. The fragment element has an id of 254.
31824 */
31825 if (tag_len == 255 &&
31826 tvb_captured_length_remaining(tvb, offset) > (255 + 2) &&
31827 tvb_get_uint8(tvb, offset + 255 + 2) == TAG_FRAGMENT242) {
31828 tag_tvb = build_defrag_tvb(pinfo, tree, tvb, offset, &tag_len,
31829 &tag_overhead);
31830 add_new_data_source(pinfo, tag_tvb, "Reassembled IE");
31831 } else {
31832 tag_tvb = tvb_new_subset_length(tvb, offset+2, tag_len);
31833 tag_overhead = 2;
31834 }
31835
31836 if (tree) {
31837 if (tag_no == TAG_ELEMENT_ID_EXTENSION255) {
31838 ext_tag_no = tvb_get_uint8(tvb, offset + 2);
31839 ti = proto_tree_add_item(orig_tree, hf_ieee80211_ext_tag, tvb, offset + 2, tag_len + tag_overhead - 2, ENC_NA0x00000000);
31840 proto_item_append_text(ti, ": %s", val_to_str_ext(pinfo->pool, ext_tag_no, &tag_num_vals_eid_ext_ext, "Unknown (%d)"));
31841 } else {
31842 ti = proto_tree_add_item(orig_tree, hf_ieee80211_tag, tvb, offset, 2 + tag_len + tag_overhead - 2, ENC_NA0x00000000);
31843 proto_item_append_text(ti, ": %s", val_to_str_ext(pinfo->pool, tag_no, &tag_num_vals_ext, "Unknown (%d)"));
31844 }
31845
31846 tree = proto_item_add_subtree(ti, ett_80211_mgt_ie);
31847
31848 }
31849
31850 if (tag_no == TAG_ELEMENT_ID_EXTENSION255) {
31851 ti_len = proto_tree_add_uint(tree, hf_ieee80211_ext_tag_length, tvb, offset + 1, 1, tag_len - 1);
31852 ti_tag = proto_tree_add_item(tree, hf_ieee80211_ext_tag_number, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31853 proto_item_append_text(ti_len, " (Tag len: %u)", tag_len);
31854 } else {
31855 ti_tag = proto_tree_add_item(tree, hf_ieee80211_tag_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31856 ti_len = proto_tree_add_uint(tree, hf_ieee80211_tag_length, tvb, offset + 1, 1, tag_len);
31857 }
31858 if (tag_len > (unsigned)tvb_reported_length_remaining(tvb, offset)) {
31859 expert_add_info_format(pinfo, ti_len, &ei_ieee80211_tag_length,
31860 "Tag Length is longer than remaining payload");
31861 }
31862
31863 /* If the list enumerates valid element IDs, require the Element ID to be
31864 * present in that list, otherwise, if the list enumerates invalid element IDs,
31865 * check the Element ID is not in the list. If either check fails, stop decoding
31866 * the value to prevent possible infinite recursions due to unexpected elements. */
31867 if (element_ids_count) {
31868 bool_Bool current_tag_no = false0;
31869 unsigned i;
31870
31871 for (i = 0; i < element_ids_count; i++) {
31872 current_tag_no = element_ids[i] == tag_no;
31873 if (current_tag_no)
31874 break;
31875 }
31876
31877 if ((!current_tag_no && !element_ids_assume_invalid && !(ext_tag_no && ext_element_ids_count)) ||
31878 (current_tag_no && element_ids_assume_invalid)) {
31879 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_number,
31880 "Unexpected Element ID %d", tag_no);
31881 return tag_len + 1 + 1;
31882 }
31883 }
31884
31885 /* Same as above, but for Extended Element IDs */
31886 if (ext_tag_no && ext_element_ids_count) {
31887 bool_Bool current_ext_tag_no = false0;
31888 unsigned i;
31889
31890 for (i = 0; i < ext_element_ids_count; i++) {
31891 current_ext_tag_no = ext_element_ids[i] == ext_tag_no;
31892 if (current_ext_tag_no)
31893 break;
31894 }
31895
31896 if ((!current_ext_tag_no && !ext_element_ids_assume_invalid) ||
31897 (current_ext_tag_no && ext_element_ids_assume_invalid)) {
31898 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_number,
31899 "Unexpected Extended Element ID %d", ext_tag_no);
31900 return tag_len + tag_overhead;
31901 }
31902 }
31903
31904 ieee80211_tagged_field_data_t field_data = {
31905 .ftype = ftype,
31906 .sanity_check = association_sanity_check,
31907 .isDMG = isDMG,
31908 .item_tag = ti,
31909 .item_tag_length = ti_len
31910 };
31911 if (!dissector_try_uint_with_data(tagged_field_table, tag_no, tag_tvb, pinfo, tree, false0, &field_data))
31912 {
31913 proto_tree_add_item(tree, hf_ieee80211_tag_data, tvb, offset + 2, tag_len, ENC_NA0x00000000);
31914 expert_add_info_format(pinfo, ti_tag, &ei_ieee80211_tag_data,
31915 "Dissector for 802.11 IE Tag"
31916 " (%s) code not implemented, Contact"
31917 " Wireshark developers if you want this supported", val_to_str_ext(pinfo->pool, tag_no,
31918 &tag_num_vals_ext, "(%d)"));
31919 proto_item_append_text(ti, ": Undecoded");
31920 }
31921
31922 return tag_len + tag_overhead;
31923}
31924
31925/* 7.3.2.12 Request information element (10) */
31926static int
31927ieee80211_tag_request(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
31928{
31929 int tag_len = tvb_reported_length(tvb);
31930 int offset = 0;
31931
31932 while (offset < tag_len)
31933 {
31934 proto_tree_add_item(tree, hf_ieee80211_tag_request, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
31935 offset += 1;
31936 }
31937 return ((tag_len > 0) ? tag_len : 1);
31938}
31939
31940/* 7.3.2.28 BSS Load element (11) */
31941/* 8.4.2.30 in 802.11-2012 */
31942static int
31943ieee80211_tag_qbss_load(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31944{
31945 int tag_len = tvb_reported_length(tvb);
31946 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31947 int offset = 0;
31948
31949 if ((tag_len < 4) || (tag_len > 5))
31950 {
31951 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);
31952 return tvb_captured_length(tvb);
31953 }
31954
31955 if (tag_len == 4)
31956 {
31957 /* QBSS Version 1 */
31958 proto_item_append_text(field_data->item_tag, " Cisco QBSS Version 1 - non CCA");
31959
31960 /* Extract Values */
31961 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset, tag_len, 1);
31962 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31963 proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31964 proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
31965 }
31966 else if (tag_len == 5)
31967 {
31968 proto_item *base_item;
31969
31970 /* QBSS Version 2 */
31971 proto_item_append_text(field_data->item_tag, " 802.11e CCA Version");
31972
31973 /* Extract Values */
31974 proto_tree_add_uint(tree, hf_ieee80211_qbss_version, tvb, offset, tag_len, 2);
31975 proto_tree_add_item(tree, hf_ieee80211_qbss_scount, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
31976 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_cu, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
31977 proto_item_append_text(base_item, " (%d%%)", 100*tvb_get_uint8(tvb, offset + 2)/255);
31978 base_item = proto_tree_add_item(tree, hf_ieee80211_qbss_adc, tvb, offset + 3, 2, ENC_LITTLE_ENDIAN0x80000000);
31979 proto_item_append_text(base_item, " (%d us/s)", tvb_get_letohs(tvb, offset + 3)*32);
31980 }
31981
31982 return tvb_captured_length(tvb);
31983}
31984
31985/* 8.4.2.31 in 802-11-2012 */
31986static int
31987ieee80211_tag_edca_param_set(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
31988{
31989 int tag_len = tvb_reported_length(tvb);
31990 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
31991 int offset = 0;
31992
31993 if ((tag_len != 18))
31994 {
31995 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 18", tag_len);
31996 return tvb_captured_length(tvb);
31997 }
31998
31999 decode_qos_parameter_set(tree, tvb, pinfo, offset, field_data->ftype);
32000
32001 return tvb_captured_length(tvb);
32002}
32003
32004/* TSPEC element (13) */
32005static int
32006ieee80211_tag_tspec(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32007{
32008 int tag_len = tvb_reported_length(tvb);
32009 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32010 int offset = 0;
32011
32012 if (field_data->isDMG == false0 && tag_len != 55)
32013 {
32014 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 55", tag_len);
32015 return tvb_captured_length(tvb);
32016 }
32017 if (field_data->isDMG == true1 && tag_len != 57)
32018 {
32019 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 57", tag_len);
32020 return tvb_captured_length(tvb);
32021 }
32022
32023 add_ff_qos_ts_info(tree, tvb, pinfo, offset);
32024 offset += 3;
32025
32026 proto_tree_add_item(tree, hf_ieee80211_tspec_nor_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32027 offset += 2;
32028
32029 proto_tree_add_item(tree, hf_ieee80211_tspec_max_msdu, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32030 offset += 2;
32031
32032 proto_tree_add_item(tree, hf_ieee80211_tspec_min_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32033 offset += 4;
32034
32035 proto_tree_add_item(tree, hf_ieee80211_tspec_max_srv, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32036 offset += 4;
32037
32038 proto_tree_add_item(tree, hf_ieee80211_tspec_inact_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32039 offset += 4;
32040
32041 proto_tree_add_item(tree, hf_ieee80211_tspec_susp_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32042 offset += 4;
32043
32044 proto_tree_add_item(tree, hf_ieee80211_tspec_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32045 offset += 4;
32046
32047 proto_tree_add_item(tree, hf_ieee80211_tspec_min_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32048 offset += 4;
32049
32050 proto_tree_add_item(tree, hf_ieee80211_tspec_mean_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32051 offset += 4;
32052
32053 proto_tree_add_item(tree, hf_ieee80211_tspec_peak_data, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32054 offset += 4;
32055
32056 proto_tree_add_item(tree, hf_ieee80211_tspec_burst_size, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32057 offset += 4;
32058
32059 proto_tree_add_item(tree, hf_ieee80211_tspec_delay_bound, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32060 offset += 4;
32061
32062 proto_tree_add_item(tree, hf_ieee80211_tspec_min_phy, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32063 offset += 4;
32064
32065 proto_tree_add_item(tree, hf_ieee80211_tspec_surplus, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32066 offset += 2;
32067
32068 proto_tree_add_item(tree, hf_ieee80211_tspec_medium, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32069 offset += 2;
32070
32071 if(field_data->isDMG == true1) {
32072 proto_tree_add_item(tree, hf_ieee80211_tspec_dmg, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32073 /*offset +=2;*/
32074 }
32075
32076 return tvb_captured_length(tvb);
32077}
32078
32079/* 7.3.2.31 TCLAS element (14) */
32080static const range_string user_prio_rvals[] = {
32081 { 0, 7, "The User Priority value of an MSDU" },
32082 { 8, 8, "The AC value of an MPDU is AC-VO" },
32083 { 9, 9, "The AC value of an MPDU is AC-VI" },
32084 { 10, 10, "The AC value of an MPDU is AC-BE" },
32085 { 11, 11, "The AC value of an MPDU is AC-BK" },
32086 { 0, 0, NULL((void*)0) }
32087};
32088
32089static int * const ieee80211_tclas_class_mask0[] = {
32090 &hf_ieee80211_tclas_class_mask0_src_addr,
32091 &hf_ieee80211_tclas_class_mask0_dst_addr,
32092 &hf_ieee80211_tclas_class_mask0_type,
32093 NULL((void*)0)
32094};
32095
32096static int * const ieee80211_tclas_class_mask1[] = {
32097 &hf_ieee80211_tclas_class_mask1_ver,
32098 &hf_ieee80211_tclas_class_mask1_src_ip,
32099 &hf_ieee80211_tclas_class_mask1_dst_ip,
32100 &hf_ieee80211_tclas_class_mask1_src_port,
32101 &hf_ieee80211_tclas_class_mask1_dst_port,
32102 &hf_ieee80211_tclas_class_mask1_ipv6_flow,
32103 NULL((void*)0)
32104};
32105
32106static int * const ieee80211_tclas_class_mask1_4[] = {
32107 &hf_ieee80211_tclas_class_mask1_ver,
32108 &hf_ieee80211_tclas_class_mask1_src_ip,
32109 &hf_ieee80211_tclas_class_mask1_dst_ip,
32110 &hf_ieee80211_tclas_class_mask1_src_port,
32111 &hf_ieee80211_tclas_class_mask1_dst_port,
32112 &hf_ieee80211_tclas_class_mask1_ipv4_dscp,
32113 &hf_ieee80211_tclas_class_mask1_ipv4_proto,
32114 &hf_ieee80211_tclas_class_mask1_reserved,
32115 NULL((void*)0)
32116};
32117
32118static int * const ieee80211_tclas_class_mask2[] = {
32119 &hf_ieee80211_tclas_class_mask2_tci,
32120 NULL((void*)0)
32121};
32122
32123static int * const ieee80211_tclas_class_mask4_4[] = {
32124 &hf_ieee80211_tclas_class_mask4_ver,
32125 &hf_ieee80211_tclas_class_mask4_4_src_ip,
32126 &hf_ieee80211_tclas_class_mask4_4_dst_ip,
32127 &hf_ieee80211_tclas_class_mask4_src_port,
32128 &hf_ieee80211_tclas_class_mask4_dst_port,
32129 &hf_ieee80211_tclas_class_mask4_dscp,
32130 &hf_ieee80211_tclas_class_mask4_ipv4_proto,
32131 &hf_ieee80211_tclas_class_mask4_reserved,
32132 NULL((void*)0)
32133};
32134
32135static int * const ieee80211_tclas_class_mask4_6[] = {
32136 &hf_ieee80211_tclas_class_mask4_ver,
32137 &hf_ieee80211_tclas_class_mask4_6_src_ip,
32138 &hf_ieee80211_tclas_class_mask4_6_dst_ip,
32139 &hf_ieee80211_tclas_class_mask4_src_port,
32140 &hf_ieee80211_tclas_class_mask4_dst_port,
32141 &hf_ieee80211_tclas_class_mask4_dscp,
32142 &hf_ieee80211_tclas_class_mask4_next_hdr,
32143 &hf_ieee80211_tclas_class_mask4_flow_label,
32144 NULL((void*)0)
32145};
32146
32147static int * const ieee80211_tclas_class_mask5[] = {
32148 &hf_ieee80211_tclas_class_mask5_up_prio,
32149 &hf_ieee80211_tclas_class_mask5_dei,
32150 &hf_ieee80211_tclas_class_mask5_vid,
32151 &hf_ieee80211_tclas_class_mask5_reserved,
32152 NULL((void*)0)
32153};
32154
32155/*
32156 * Two control bits in the next few. Lower bit specifies if the classifier
32157 * uses the field (the match value is present, upper bit specifies is a
32158 * mask is present.
32159 */
32160static const value_string frame_control_mask_vals[] = {
32161 { 0x0 , "Frame Control is not included in the Classifier" },
32162 { 0x1 , "Frame Control is included in the Classifier. A Match Spec is not included" },
32163 { 0x2 , "Invalid Frame Control Classifier Mask Control value" },
32164 { 0x3 , "Frame Control is included in the Classifier. A Match Spec is included" },
32165 { 0, NULL((void*)0) }
32166};
32167
32168static const value_string duration_id_mask_vals[] = {
32169 { 0x0 , "Duration/ID is not included in the Classifier" },
32170 { 0x1 , "Duration/ID is included in the Classifier. A Match Spec is not included" },
32171 { 0x2 , "Invalid Duration/ID Classifier Mask Control value" },
32172 { 0x3 , "Duration/ID is included in the Classifier. A Match Spec is included" },
32173 { 0, NULL((void*)0) }
32174};
32175
32176static const value_string address_1_mask_vals[] = {
32177 { 0x0 , "Address 1 is not included in the Classifier" },
32178 { 0x1 , "Address 1 is included in the Classifier. A Match Spec is not included" },
32179 { 0x2 , "Invalid Address 1 Classifier Mask Control value" },
32180 { 0x3 , "Address 1 is included in the Classifier. A Match Spec is included" },
32181 { 0, NULL((void*)0) }
32182};
32183
32184static const value_string address_2_mask_vals[] = {
32185 { 0x0 , "Address 2 is not included in the Classifier" },
32186 { 0x1 , "Address 2 is included in the Classifier. A Match Spec is not included" },
32187 { 0x2 , "Invalid Address 2 Classifier Mask Control value" },
32188 { 0x3 , "Address 2 is included in the Classifier. A Match Spec is included" },
32189 { 0, NULL((void*)0) }
32190};
32191
32192static const value_string address_3_mask_vals[] = {
32193 { 0x0 , "Address 3 is not included in the Classifier" },
32194 { 0x1 , "Address 3 is included in the Classifier. A Match Spec is not included" },
32195 { 0x2 , "Invalid Address 3 Classifier Mask Control value" },
32196 { 0x3 , "Address 3 is included in the Classifier. A Match Spec is included" },
32197 { 0, NULL((void*)0) }
32198};
32199
32200static const value_string sequence_control_mask_vals[] = {
32201 { 0x0 , "Sequence Control is not included in the Classifier" },
32202 { 0x1 , "Sequence Control is included in the Classifier. A Match Spec is not included" },
32203 { 0x2 , "Invalid Sequence Control Classifier Mask Control value" },
32204 { 0x3 , "Sequence Control is included in the Classifier. A Match Spec is included" },
32205 { 0, NULL((void*)0) }
32206};
32207
32208static const value_string address_4_mask_vals[] = {
32209 { 0x0 , "Address 4 is not included in the Classifier" },
32210 { 0x1 , "Address 4 is included in the Classifier. A Match Spec is not included" },
32211 { 0x2 , "Invalid Address 4 Classifier Mask Control value" },
32212 { 0x3 , "Address 4 is included in the Classifier. A Match Spec is included" },
32213 { 0, NULL((void*)0) }
32214};
32215
32216static const value_string qos_control_mask_vals[] = {
32217 { 0x0 , "QoS Control is not included in the Classifier" },
32218 { 0x1 , "QoS Control is included in the Classifier. A Match Spec is not included" },
32219 { 0x2 , "Invalid QoS Control Classifier Mask Control value" },
32220 { 0x3 , "QoS Control is included in the Classifier. A Match Spec is included" },
32221 { 0, NULL((void*)0) }
32222};
32223
32224static const value_string ht_control_mask_vals[] = {
32225 { 0x0 , "HT Control is not included in the Classifier" },
32226 { 0x1 , "HT Control is included in the Classifier. A Match Spec is not included" },
32227 { 0x2 , "Invalid HT Control Classifier Mask Control value" },
32228 { 0x3 , "HT Control is included in the Classifier. A Match Spec is included" },
32229 { 0, NULL((void*)0) }
32230};
32231
32232static const value_string address_1_sid_mask_vals[] = {
32233 { 0x0 , "Address 1 (SID) is not included in the Classifier" },
32234 { 0x1 , "Address 1 (SID) is included in the Classifier. A Match Spec is not included" },
32235 { 0x2 , "Invalid Address 1 (SID) Classifier Mask Control value" },
32236 { 0x3 , "Address 1 (SID) is included in the Classifier. A match spec is included" },
32237 { 0, NULL((void*)0) }
32238};
32239
32240static const value_string address_1_bssid_mask_vals[] = {
32241 { 0x0 , "Address 1 (BSSID) is not included in the Classifier" },
32242 { 0x1 , "Address 1 (BSSID) is included in the Classifier. A Match Spec is not included" },
32243 { 0x2 , "Invalid Address 1 (SID) Classifier Mask Control value" },
32244 { 0x3 , "Address 1 (BSSID) is included in the Classifier. A match spec is included" },
32245 { 0, NULL((void*)0) }
32246};
32247
32248static int * const ieee80211_tclas_class_mask6[] = {
32249 &hf_ieee80211_tclas_class_mask6_frame_control_match_spec,
32250 &hf_ieee80211_tclas_class_mask6_duration_id_match_spec,
32251 &hf_ieee80211_tclas_class_mask6_address_1_match_spec,
32252 &hf_ieee80211_tclas_class_mask6_address_2_match_spec,
32253 &hf_ieee80211_tclas_class_mask6_address_3_match_spec,
32254 &hf_ieee80211_tclas_class_mask6_sequence_control_spec,
32255 &hf_ieee80211_tclas_class_mask6_address_4_match_spec,
32256 &hf_ieee80211_tclas_class_mask6_qos_control_spec,
32257 &hf_ieee80211_tclas_class_mask6_ht_control_spec,
32258 &hf_ieee80211_tclas_class_mask6_reserved,
32259 NULL((void*)0)
32260};
32261
32262static int * const ieee80211_tclas_class_mask7[] = {
32263 &hf_ieee80211_tclas_class_mask7_frame_control_match_spec,
32264 &hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec,
32265 &hf_ieee80211_tclas_class_mask7_address_2_match_spec,
32266 &hf_ieee80211_tclas_class_mask7_sequence_control_spec,
32267 &hf_ieee80211_tclas_class_mask7_address_3_match_spec,
32268 &hf_ieee80211_tclas_class_mask7_address_4_match_spec,
32269 &hf_ieee80211_tclas_class_mask7_reserved,
32270 NULL((void*)0)
32271};
32272
32273static int * const ieee80211_tclas_class_mask8[] = {
32274 &hf_ieee80211_tclas_class_mask8_frame_control_match_spec,
32275 &hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec,
32276 &hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec,
32277 &hf_ieee80211_tclas_class_mask8_sequence_control_spec,
32278 &hf_ieee80211_tclas_class_mask8_address_3_match_spec,
32279 &hf_ieee80211_tclas_class_mask8_address_4_match_spec,
32280 &hf_ieee80211_tclas_class_mask8_reserved,
32281 NULL((void*)0)
32282};
32283
32284/* TODO: the masks for these items are clearly wrong! */
32285static int * const ieee80211_tclas_class_mask9[] = {
32286 &hf_ieee80211_tclas_class_mask9_frame_control_match_spec,
32287 &hf_ieee80211_tclas_class_mask9_address_1_match_spec,
32288 &hf_ieee80211_tclas_class_mask9_address_2_match_spec,
32289 &hf_ieee80211_tclas_class_mask9_sequence_control_spec,
32290 &hf_ieee80211_tclas_class_mask9_reserved,
32291 NULL((void*)0)
32292};
32293
32294static int
32295ieee80211_frame_classifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
32296 proto_tree *tree, int offset, int tag_len)
32297{
32298 uint8_t type;
32299 uint8_t version;
32300 uint8_t filter_field_len;
32301 uint32_t class_mask;
32302
32303 proto_tree_add_item_ret_uint8(tree, hf_ieee80211_tclas_class_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &type);
32304 offset += 1;
32305
32306 switch (type)
32307 {
32308 case 0:
32309 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32310 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask0,
32311 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32312 offset++;
32313
32314 proto_tree_add_item(tree, hf_ieee80211_tclas_src_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
32315 offset += 6;
32316
32317 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_mac_addr, tvb, offset, 6, ENC_NA0x00000000);
32318 offset += 6;
32319
32320 proto_tree_add_item(tree, hf_ieee80211_tclas_ether_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32321 /*offset += 2;*/
32322 break;
32323
32324 case 1:
32325 version = tvb_get_uint8(tvb, offset+1);
32326 if (version == 4) {
32327 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32328 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask1_4,
32329 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32330 } else {
32331 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32332 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask1,
32333 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32334 }
32335 offset += 1;
32336
32337 proto_tree_add_item(tree, hf_ieee80211_tclas_version, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32338 offset += 1;
32339 if (version == 4)
32340 {
32341 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32342 offset += 4;
32343 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32344 offset += 4;
32345 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32346 offset += 2;
32347 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32348 offset += 2;
32349 proto_tree_add_item(tree, hf_ieee80211_tclas_dscp, tvb, offset, 1, ENC_NA0x00000000);
32350 offset += 1;
32351 proto_tree_add_item(tree, hf_ieee80211_tclas_protocol, tvb, offset, 1, ENC_NA0x00000000);
32352 /*offset += 1;*/
32353 }
32354 else if (version == 6)
32355 {
32356 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_src, tvb, offset, 16, ENC_NA0x00000000);
32357 offset += 16;
32358 proto_tree_add_item(tree, hf_ieee80211_tclas_ipv6_dst, tvb, offset, 16, ENC_NA0x00000000);
32359 offset += 16;
32360 proto_tree_add_item(tree, hf_ieee80211_tclas_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32361 offset += 2;
32362 proto_tree_add_item(tree, hf_ieee80211_tclas_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32363 offset += 2;
32364 proto_tree_add_item(tree, hf_ieee80211_tclas_flow, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
32365 /*offset += 3;*/
32366 }
32367 break;
32368
32369 case 2:
32370 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tclas_class_mask,
32371 ett_tag_tclas_mask_tree, ieee80211_tclas_class_mask2,
32372 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32373 offset++;
32374
32375 proto_tree_add_item(tree, hf_ieee80211_tclas_tag_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32376 /*offset += 2;*/
32377 break;
32378
32379 case 3:
32380 proto_tree_add_item(tree, hf_ieee80211_tclas_mask_reserved, tvb, offset,
32381 1, ENC_NA0x00000000);
32382 offset += 1;
32383
32384 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_offset, tvb, offset,
32385 2, ENC_LITTLE_ENDIAN0x80000000);
32386 offset += 2;
32387
32388 filter_field_len = (tag_len - 4) / 2;
32389
32390 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_value, tvb, offset,
32391 filter_field_len, ENC_NA0x00000000);
32392 offset += filter_field_len;
32393
32394 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_mask, tvb, offset,
32395 filter_field_len, ENC_NA0x00000000);
32396 /*offset += filter_field_len;*/
32397 break;
32398
32399 case 4:
32400 version = tvb_get_uint8(tvb, offset+1);
32401 if (version == 4) {
32402 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32403 hf_ieee80211_tclas_class_mask,
32404 ett_tag_tclas_mask_tree,
32405 ieee80211_tclas_class_mask4_4,
32406 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
32407 } else if (version == 6) {
32408 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32409 hf_ieee80211_tclas_class_mask,
32410 ett_tag_tclas_mask_tree,
32411 ieee80211_tclas_class_mask4_6,
32412 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
32413 } else {
32414 proto_tree_add_item(tree, hf_ieee80211_tclas_class_mask, tvb, offset, 1,
32415 ENC_NA0x00000000);
32416 offset += 1;
32417
32418 proto_tree_add_item(tree, hf_ieee80211_tclas_reserved_bytes, tvb, offset,
32419 tag_len - offset + 1, ENC_NA0x00000000);
32420 break;
32421 }
32422
32423 offset += 1;
32424
32425 proto_tree_add_item(tree, hf_ieee80211_tclas4_version, tvb, offset, 1, ENC_NA0x00000000);
32426 offset += 1;
32427
32428 if (version == 4)
32429 {
32430 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv4_src, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32431 offset += 4;
32432 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv4_dst, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
32433 offset += 4;
32434 proto_tree_add_item(tree, hf_ieee80211_tclas4_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32435 offset += 2;
32436 proto_tree_add_item(tree, hf_ieee80211_tclas4_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32437 offset += 2;
32438 proto_tree_add_item(tree, hf_ieee80211_tclas4_dscp, tvb, offset, 1, ENC_NA0x00000000);
32439 offset += 1;
32440 proto_tree_add_item(tree, hf_ieee80211_tclas4_protocol, tvb, offset, 1, ENC_NA0x00000000);
32441 offset += 1;
32442 proto_tree_add_item(tree, hf_ieee80211_tclas4_reserved, tvb, offset, 1, ENC_NA0x00000000);
32443 /*offset += 1;*/
32444 }
32445 else if (version == 6)
32446 {
32447 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv6_src, tvb, offset, 16, ENC_NA0x00000000);
32448 offset += 16;
32449 proto_tree_add_item(tree, hf_ieee80211_tclas4_ipv6_dst, tvb, offset, 16, ENC_NA0x00000000);
32450 offset += 16;
32451 proto_tree_add_item(tree, hf_ieee80211_tclas4_src_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32452 offset += 2;
32453 proto_tree_add_item(tree, hf_ieee80211_tclas4_dst_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
32454 offset += 2;
32455 proto_tree_add_item(tree, hf_ieee80211_tclas4_dscp, tvb, offset, 1, ENC_NA0x00000000);
32456 offset += 1;
32457 proto_tree_add_item(tree, hf_ieee80211_tclas4_next_hdr, tvb, offset, 1, ENC_NA0x00000000);
32458 proto_tree_add_item(tree, hf_ieee80211_tclas4_flow, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
32459 /*offset += 3;*/
32460 }
32461 break;
32462
32463 case 5:
32464 /* Note, BIG Endian where more than one byte. */
32465 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32466 hf_ieee80211_tclas_class_mask,
32467 ett_tag_tclas_mask_tree,
32468 ieee80211_tclas_class_mask5,
32469 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32470 offset++;
32471
32472 proto_tree_add_item(tree, hf_ieee80211_tclas_tclas_8021d_up_pcp, tvb,
32473 offset, 1, ENC_NA0x00000000);
32474 offset += 1;
32475
32476 proto_tree_add_item(tree, hf_ieee80211_tclas_8021q_dei, tvb, offset, 1,
32477 ENC_NA0x00000000);
32478 offset += 1;
32479
32480 proto_tree_add_item(tree, hf_ieee80211_tclas_8021q_vid, tvb, offset, 2,
32481 ENC_BIG_ENDIAN0x00000000);
32482 break;
32483
32484 case 6:
32485 class_mask = tvb_get_letoh24(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_mask6,
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_tclas6_frame_control_spec, tvb,
32496 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32497 offset += 2;
32498
32499 if (class_mask & 0x02) {
32500 proto_tree_add_item(tree, hf_ieee80211_tclas6_frame_control_mask, tvb,
32501 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32502 offset += 2;
32503 }
32504 }
32505 class_mask = class_mask >> 2; /* Get the next two bits */
32506
32507 /* Is the Duration info there? */
32508 if (class_mask & 0x01) {
32509 proto_tree_add_item(tree, hf_ieee80211_tclas6_duration_spec, tvb,
32510 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32511 offset += 2;
32512
32513 if (class_mask & 0x02) {
32514 proto_tree_add_item(tree, hf_ieee80211_tclas6_duration_mask, tvb,
32515 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32516 offset += 2;
32517 }
32518 }
32519 class_mask = class_mask >> 2; /* Get the next two bits */
32520
32521 /* Is the Address 1 info there? */
32522 if (class_mask & 0x01) {
32523 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_1_spec, tvb,
32524 offset, 6, ENC_NA0x00000000);
32525 offset += 6;
32526
32527 if (class_mask & 0x02) {
32528 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_1_mask, tvb,
32529 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32530 offset += 6;
32531 }
32532 }
32533 class_mask = class_mask >> 2; /* Get the next two bits */
32534
32535 /* Is the Address 2 info there? */
32536 if (class_mask & 0x01) {
32537 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_2_spec, tvb,
32538 offset, 6, ENC_NA0x00000000);
32539 offset += 6;
32540
32541 if (class_mask & 0x02) {
32542 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_2_mask, tvb,
32543 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32544 offset += 6;
32545 }
32546 }
32547 class_mask = class_mask >> 2; /* Get the next two bits */
32548
32549 /* Is the Address 3 info there? */
32550 if (class_mask & 0x01) {
32551 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_3_spec, tvb,
32552 offset, 6, ENC_NA0x00000000);
32553 offset += 6;
32554
32555 if (class_mask & 0x02) {
32556 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_3_mask, tvb,
32557 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32558 offset += 6;
32559 }
32560 }
32561 class_mask = class_mask >> 2; /* Get the next two bits */
32562
32563 /* Is the Sequence Control info there? */
32564 if (class_mask & 0x01) {
32565 proto_tree_add_item(tree, hf_ieee80211_tclas6_sequence_control_spec, tvb,
32566 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32567 offset += 2;
32568
32569 if (class_mask & 0x02) {
32570 proto_tree_add_item(tree, hf_ieee80211_tclas6_sequence_control_mask,
32571 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32572 offset += 2;
32573 }
32574 }
32575 class_mask = class_mask >> 2; /* Get the next two bits */
32576
32577 /* Is the Address 4 info there? */
32578 if (class_mask & 0x01) {
32579 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_4_spec, tvb,
32580 offset, 6, ENC_NA0x00000000);
32581 offset += 6;
32582
32583 if (class_mask & 0x02) {
32584 proto_tree_add_item(tree, hf_ieee80211_tclas6_address_4_mask, tvb,
32585 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32586 offset += 6;
32587 }
32588 }
32589 class_mask = class_mask >> 2; /* Get the next two bits */
32590
32591 /* Is the QoS Control info there? */
32592 if (class_mask & 0x01) {
32593 proto_tree_add_item(tree, hf_ieee80211_tclas6_qos_control_spec, tvb,
32594 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32595 offset += 2;
32596
32597 if (class_mask & 0x02) {
32598 proto_tree_add_item(tree, hf_ieee80211_tclas6_qos_control_mask, tvb,
32599 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32600 offset += 2;
32601 }
32602 }
32603 class_mask = class_mask >> 2; /* Get the next two bits */
32604
32605 /* Is the HT Control info there? */
32606 if (class_mask & 0x01) {
32607 proto_tree_add_item(tree, hf_ieee80211_tclas6_ht_control_spec, tvb,
32608 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32609 offset += 4;
32610
32611 if (class_mask & 0x02) {
32612 proto_tree_add_item(tree, hf_ieee80211_tclas6_ht_control_mask, tvb,
32613 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32614 }
32615 }
32616 /* class_mask = class_mask >> 2; Get the next two bits */
32617
32618 break;
32619
32620 case 7:
32621 class_mask = tvb_get_letohs(tvb, offset);
32622 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32623 hf_ieee80211_tclas_class_mask6_a_above,
32624 ett_tag_tclas_mask_tree,
32625 ieee80211_tclas_class_mask7,
32626 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32627 offset += 3;
32628
32629 /* Is the Frame Control info there */
32630 if (class_mask & 0x01) {
32631 proto_tree_add_item(tree, hf_ieee80211_tclas7_frame_control_spec, tvb,
32632 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32633 offset += 2;
32634 if (class_mask & 0x02) {
32635 proto_tree_add_item(tree, hf_ieee80211_tclas7_frame_control_mask, tvb,
32636 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32637 offset += 2;
32638 }
32639 }
32640 class_mask = class_mask >> 2; /* Get the next two bits */
32641
32642 /* Is the Address 1 (SID) info there */
32643 if (class_mask & 0x01) {
32644 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_1_sid_spec, tvb,
32645 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32646 offset += 2;
32647 if (class_mask & 0x02) {
32648 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_1_sid_mask, tvb,
32649 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32650 offset += 2;
32651 }
32652 }
32653 class_mask = class_mask >> 2; /* Get the next two bits */
32654
32655 /* Is the Address 2 info there */
32656 if (class_mask & 0x01) {
32657 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_2_spec, tvb,
32658 offset, 6, ENC_NA0x00000000);
32659 offset += 6;
32660 if (class_mask & 0x02) {
32661 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_2_mask, tvb,
32662 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32663 offset += 6;
32664 }
32665 }
32666 class_mask = class_mask >> 2; /* Get the next two bits */
32667
32668 /* Is the Sequence Control info there */
32669 if (class_mask & 0x01) {
32670 proto_tree_add_item(tree, hf_ieee80211_tclas7_sequence_control_spec, tvb,
32671 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32672 offset += 2;
32673 if (class_mask & 0x02) {
32674 proto_tree_add_item(tree, hf_ieee80211_tclas7_sequence_control_mask,
32675 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32676 offset += 2;
32677 }
32678 }
32679 class_mask = class_mask >> 2; /* Get the next two bits */
32680
32681 /* Is the Address 3 info there */
32682 if (class_mask & 0x01) {
32683 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_3_spec, tvb,
32684 offset, 6, ENC_NA0x00000000);
32685 offset += 6;
32686 if (class_mask & 0x02) {
32687 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_3_mask, tvb,
32688 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32689 offset += 6;
32690 }
32691 }
32692 class_mask = class_mask >> 2; /* Get the next two bits */
32693
32694 /* Is the Address 4 info there */
32695 if (class_mask & 0x01) {
32696 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_4_spec, tvb,
32697 offset, 6, ENC_NA0x00000000);
32698 offset += 6;
32699 if (class_mask & 0x02) {
32700 proto_tree_add_item(tree, hf_ieee80211_tclas7_address_4_mask, tvb,
32701 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32702 }
32703 }
32704 /*class_mask = class_mask >> 2; Get the next two bits */
32705
32706 break;
32707
32708 case 8:
32709 class_mask = tvb_get_letohs(tvb, offset);
32710 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32711 hf_ieee80211_tclas_class_mask6_a_above,
32712 ett_tag_tclas_mask_tree,
32713 ieee80211_tclas_class_mask8,
32714 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32715 offset += 3;
32716
32717 /* Is the Frame Control info there */
32718 if (class_mask & 0x01) {
32719 proto_tree_add_item(tree, hf_ieee80211_tclas8_frame_control_spec, tvb,
32720 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32721 offset += 2;
32722 if (class_mask & 0x02) {
32723 proto_tree_add_item(tree, hf_ieee80211_tclas8_frame_control_mask, tvb,
32724 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32725 offset += 2;
32726 }
32727 }
32728 class_mask = class_mask >> 2; /* Get the next two bits */
32729
32730 /* Is the Address 1 (BSSID) info there */
32731 if (class_mask & 0x01) {
32732 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_1_bssid_spec, tvb,
32733 offset, 6, ENC_NA0x00000000);
32734 offset += 6;
32735 if (class_mask & 0x02) {
32736 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_1_bssid_mask, tvb,
32737 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32738 offset += 6;
32739 }
32740 }
32741 class_mask = class_mask >> 2; /* Get the next two bits */
32742
32743 /* Is the Address 2 (SID) info there */
32744 if (class_mask & 0x01) {
32745 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_2_sid_spec, tvb,
32746 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32747 offset += 2;
32748 if (class_mask & 0x02) {
32749 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_2_sid_mask, tvb,
32750 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32751 offset += 2;
32752 }
32753 }
32754 class_mask = class_mask >> 2; /* Get the next two bits */
32755
32756 /* Is the Sequence Control info there */
32757 if (class_mask & 0x01) {
32758 proto_tree_add_item(tree, hf_ieee80211_tclas8_sequence_control_spec, tvb,
32759 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32760 offset += 2;
32761 if (class_mask & 0x02) {
32762 proto_tree_add_item(tree, hf_ieee80211_tclas8_sequence_control_mask,
32763 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32764 offset += 2;
32765 }
32766 }
32767 class_mask = class_mask >> 2; /* Get the next two bits */
32768
32769 /* Is the Address 3 info there */
32770 if (class_mask & 0x01) {
32771 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_3_spec, tvb,
32772 offset, 6, ENC_NA0x00000000);
32773 offset += 6;
32774 if (class_mask & 0x02) {
32775 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_3_mask, tvb,
32776 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32777 offset += 6;
32778 }
32779 }
32780 class_mask = class_mask >> 2; /* Get the next two bits */
32781
32782 /* Is the Address 4 info there */
32783 if (class_mask & 0x01) {
32784 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_4_spec, tvb,
32785 offset, 6, ENC_NA0x00000000);
32786 offset += 6;
32787 if (class_mask & 0x02) {
32788 proto_tree_add_item(tree, hf_ieee80211_tclas8_address_4_mask, tvb,
32789 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32790 }
32791 }
32792 /* class_mask = class_mask >> 2; Get the next two bits */
32793
32794 break;
32795
32796 case 9:
32797 class_mask = tvb_get_letohs(tvb, offset);
32798 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
32799 hf_ieee80211_tclas_class_mask6_a_above,
32800 ett_tag_tclas_mask_tree,
32801 ieee80211_tclas_class_mask9,
32802 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
32803 offset += 3;
32804
32805 /* Is the Frame Control info there */
32806 if (class_mask & 0x01) {
32807 proto_tree_add_item(tree, hf_ieee80211_tclas9_frame_control_spec, tvb,
32808 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32809 offset += 2;
32810 if (class_mask & 0x02) {
32811 proto_tree_add_item(tree, hf_ieee80211_tclas9_frame_control_mask, tvb,
32812 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32813 offset += 2;
32814 }
32815 }
32816 class_mask = class_mask >> 2; /* Get the next two bits */
32817
32818 /* Is the Address 1 info there */
32819 if (class_mask & 0x01) {
32820 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_1_spec, tvb,
32821 offset, 6, ENC_NA0x00000000);
32822 offset += 6;
32823 if (class_mask & 0x02) {
32824 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_1_mask, tvb,
32825 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32826 offset += 6;
32827 }
32828 }
32829 class_mask = class_mask >> 2; /* Get the next two bits */
32830
32831 /* Is the Address 2 info there */
32832 if (class_mask & 0x01) {
32833 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_2_spec, tvb,
32834 offset, 6, ENC_NA0x00000000);
32835 offset += 6;
32836 if (class_mask & 0x02) {
32837 proto_tree_add_item(tree, hf_ieee80211_tclas9_address_2_mask, tvb,
32838 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
32839 offset += 6;
32840 }
32841 }
32842 class_mask = class_mask >> 2; /* Get the next two bits */
32843
32844 /* Is the Sequence Control info there */
32845 if (class_mask & 0x01) {
32846 proto_tree_add_item(tree, hf_ieee80211_tclas9_sequence_control_spec, tvb,
32847 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32848 offset += 2;
32849 if (class_mask & 0x02) {
32850 proto_tree_add_item(tree, hf_ieee80211_tclas9_sequence_control_mask,
32851 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32852 }
32853 }
32854 /* class_mask = class_mask >> 2; Get the next two bits */
32855
32856 break;
32857
32858 case 0x0A:
32859 proto_tree_add_item(tree, hf_ieee80211_tclas10_protocol_instance, tvb,
32860 offset, 1, ENC_NA0x00000000);
32861 offset += 1;
32862
32863 proto_tree_add_item(tree, hf_ieee80211_tclas10_protocol_num_next_hdr, tvb,
32864 offset, 1, ENC_NA0x00000000);
32865 offset += 1;
32866
32867 filter_field_len = (tag_len - 4) / 2;
32868
32869 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_value, tvb, offset,
32870 filter_field_len, ENC_NA0x00000000);
32871 offset += filter_field_len;
32872
32873 proto_tree_add_item(tree, hf_ieee80211_tclas_filter_mask, tvb, offset,
32874 filter_field_len, ENC_NA0x00000000);
32875 /*offset += filter_field_len;*/
32876 break;
32877
32878 default:
32879 break;
32880 }
32881
32882 return tvb_captured_length(tvb);
32883}
32884
32885static int
32886ieee80211_tag_tclas(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32887{
32888 int tag_len = tvb_reported_length(tvb);
32889 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32890 int offset = 0;
32891
32892 if (tag_len < 5)
32893 {
32894 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 5", tag_len);
32895 return 1;
32896 }
32897
32898 proto_tree_add_item(tree, hf_ieee80211_tclas_up, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32899 offset += 1;
32900
32901 return ieee80211_frame_classifier(tvb, pinfo, tree, offset, tag_len);
32902}
32903
32904/* 7.3.2.34 Schedule element (15) */
32905static int
32906ieee80211_tag_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32907{
32908 int tag_len = tvb_reported_length(tvb);
32909 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32910 int offset = 0;
32911 if (tag_len != 14)
32912 {
32913 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 14", tag_len);
32914 return 1;
32915 }
32916
32917 add_ff_schedule_info(tree, tvb, pinfo, offset);
32918 offset += 2;
32919
32920 proto_tree_add_item(tree, hf_ieee80211_sched_srv_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32921 offset += 4;
32922
32923 proto_tree_add_item(tree, hf_ieee80211_sched_srv_int, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
32924 offset += 4;
32925
32926 proto_tree_add_item(tree, hf_ieee80211_sched_spec_int, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
32927 return tvb_captured_length(tvb);
32928}
32929
32930/* 7.3.2.8 Challenge Text element (16) */
32931static int
32932ieee80211_tag_challenge_text(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
32933{
32934 int tag_len = tvb_reported_length(tvb);
32935 int offset = 0;
32936
32937 proto_tree_add_item(tree, hf_ieee80211_tag_challenge_text, tvb, offset, tag_len, ENC_NA0x00000000);
32938
32939 return ((tag_len > 0) ? tag_len : 1);
32940}
32941
32942/* 7.3.2.15 Power Constraint element (32) */
32943static int
32944ieee80211_tag_power_constraint(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32945{
32946 int tag_len = tvb_reported_length(tvb);
32947 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32948 int offset = 0;
32949 if (tag_len != 1)
32950 {
32951 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
32952 return 1;
32953 }
32954
32955 proto_tree_add_item(tree, hf_ieee80211_tag_power_constraint_local, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32956 proto_item_append_text(field_data->item_tag, ": %d", tvb_get_uint8(tvb, offset));
32957 return tvb_captured_length(tvb);
32958}
32959
32960/* 7.3.2.16 Power Capability element (33) */
32961static int
32962ieee80211_tag_power_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
32963{
32964 int tag_len = tvb_reported_length(tvb);
32965 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32966 int offset = 0;
32967 if (tag_len != 2)
32968 {
32969 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
32970 return 1;
32971 }
32972
32973 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_min, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32974 proto_item_append_text(field_data->item_tag, " Min: %d", tvb_get_int8(tvb, offset));
32975 offset += 1;
32976
32977 proto_tree_add_item(tree, hf_ieee80211_tag_power_capability_max, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
32978 proto_item_append_text(field_data->item_tag, ", Max: %d", tvb_get_int8(tvb, offset));
32979 return tvb_captured_length(tvb);
32980}
32981
32982/* 7.3.2.18 TPC Request element (34) */
32983static int
32984ieee80211_tag_tpc_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U___attribute__((unused)), void* data)
32985{
32986 int tag_len = tvb_reported_length(tvb);
32987 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
32988 if (tag_len != 0)
32989 {
32990 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 0", tag_len);
32991 return 1; /* Even with no data, we can't return 0 */
32992 }
32993
32994 return 1; /* Even with no data, we can't return 0 */
32995}
32996
32997/* TPC Report element (35)
32998 * 7.3.2.18 (Std 802.11-2007), 8.4.2.19 (Std 802.11-2012),
32999 * 9.4.2.17 (Std 802.11-2016), 9.4.2.16 (Std 802.11-2020)
33000 */
33001static int
33002ieee80211_tag_tpc_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33003{
33004 int tag_len = tvb_reported_length(tvb);
33005 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33006 int offset = 0;
33007
33008 if (tag_len != 2)
33009 {
33010 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 2", tag_len);
33011 return 1;
33012 }
33013
33014 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_trsmt_pow, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33015 proto_item_append_text(field_data->item_tag, " Transmit Power: %d dBm", tvb_get_uint8(tvb, offset));
33016 offset += 1;
33017
33018 /*
33019 * "The Link Margin field is reserved when a TPC Report element is
33020 * included in a Beacon frame or Probe Response frame." - 2012 and later
33021 */
33022
33023 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)))
33024 pinfo, proto_wlan,((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
33025 FRAME_TYPE_KEY))((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, FRAME_TYPE_KEY)))
;
33026
33027 if (ftype == MGT_BEACON0x08 || ftype == MGT_PROBE_RESP0x05) {
33028 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_reserved, tvb, offset, 1, ENC_NA0x00000000);
33029 } else {
33030 proto_tree_add_item(tree, hf_ieee80211_tag_tpc_report_link_mrg, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33031
33032 proto_item_append_text(field_data->item_tag, ", Link Margin: %d dBm", tvb_get_uint8(tvb, offset));
33033 }
33034 return tvb_captured_length(tvb);
33035}
33036
33037/* 7.3.2.19 Supported Channels element (36) */
33038static int
33039ieee80211_tag_supported_channels(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33040{
33041 int tag_len = tvb_reported_length(tvb);
33042 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33043 int offset = 0;
33044
33045 proto_item *chan_item;
33046 proto_tree *chan_tree;
33047 unsigned i = 1;
33048
33049 if (tag_len % 2 == 1) {
33050 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u must be even", tag_len);
33051 return tvb_captured_length(tvb);
33052 }
33053
33054 while (offset < tag_len)
33055 {
33056 chan_item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_channels, tvb, offset, 2, ENC_NA0x00000000);
33057 proto_item_append_text(chan_item, " #%d", i);
33058 i += 1;
33059
33060 chan_tree = proto_item_add_subtree(chan_item , ett_tag_supported_channels);
33061
33062 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_first, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33063 proto_item_append_text(chan_item, " First: %d", tvb_get_uint8(tvb, offset));
33064 offset += 1;
33065
33066 proto_tree_add_item(chan_tree, hf_ieee80211_tag_supported_channels_range, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33067 proto_item_append_text(chan_item, ", Range: %d ", tvb_get_uint8(tvb, offset));
33068 offset += 1;
33069
33070 }
33071 return tvb_captured_length(tvb);
33072}
33073
33074/* 7.3.2.20 Channel Switch Announcement element (37) */
33075static int
33076ieee80211_tag_switch_ann(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33077{
33078 int tag_len = tvb_reported_length(tvb);
33079 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33080 int offset = 0;
33081 if (tag_len != 3)
33082 {
33083 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 3", tag_len);
33084 return 1;
33085 }
33086
33087 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33088 proto_item_append_text(field_data->item_tag, " Mode: %d", tvb_get_uint8(tvb, offset));
33089 offset += 1;
33090
33091 proto_tree_add_item(tree, hf_ieee80211_csa_new_channel_number, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33092 proto_item_append_text(field_data->item_tag, ", Number: %d ", tvb_get_uint8(tvb, offset));
33093 offset += 1;
33094
33095 proto_tree_add_item(tree, hf_ieee80211_csa_channel_switch_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33096 proto_item_append_text(field_data->item_tag, ", Count: %d ", tvb_get_uint8(tvb, offset));
33097 return tvb_captured_length(tvb);
33098}
33099
33100/* 7.3.2.21 Measurement Request element (38) with update from 802.11k-2008 */
33101static int
33102ieee80211_tag_measure_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33103{
33104 int tag_len = tvb_reported_length(tvb);
33105 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33106 int offset = 0;
33107 uint8_t request_type;
33108 proto_item *parent_item;
33109 proto_tree *sub_tree;
33110 static int * const ieee80211_tag_measure_request_mode[] = {
33111 &hf_ieee80211_tag_measure_request_mode_parallel,
33112 &hf_ieee80211_tag_measure_request_mode_enable,
33113 &hf_ieee80211_tag_measure_request_mode_request,
33114 &hf_ieee80211_tag_measure_request_mode_report,
33115 &hf_ieee80211_tag_measure_request_mode_duration_mandatory,
33116 &hf_ieee80211_tag_measure_request_mode_reserved,
33117 NULL((void*)0)
33118 };
33119
33120 if (tag_len < 3)
33121 {
33122 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
33123 return tvb_captured_length(tvb);
33124 }
33125 proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_token, tvb, offset, 1, ENC_NA0x00000000);
33126 offset += 1;
33127
33128 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_request_mode,
33129 ett_tag_measure_request_mode_tree, ieee80211_tag_measure_request_mode,
33130 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33131 offset += 1;
33132
33133 parent_item = proto_tree_add_item(tree, hf_ieee80211_tag_measure_request_type, tvb, offset, 1, ENC_NA0x00000000);
33134 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_request_type_tree);
33135 request_type = tvb_get_uint8(tvb, offset);
33136 offset += 1;
33137
33138 switch (request_type) {
33139 case 0: /* Basic Request */
33140 case 1: /* Clear channel assessment (CCA) request */
33141 case 2: /* Receive power indication (RPI) histogram request */
33142 {
33143 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33144 offset += 1;
33145
33146 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33147 offset += 8;
33148
33149 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33150 offset += 2;
33151 break;
33152 }
33153 case 3: /* Channel Load Request */
33154 {
33155 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33156 offset += 1;
33157
33158 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33159 offset += 1;
33160
33161 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33162 offset += 2;
33163
33164 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33165 offset += 2;
33166
33167 while (offset < tag_len)
33168 {
33169 uint8_t sub_id;
33170 proto_tree_add_item_ret_uint8(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_id, tvb, offset, 1, ENC_NA0x00000000, &sub_id);
33171 offset += 1;
33172
33173 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
33174 offset += 1;
33175
33176 switch (sub_id) {
33177 case MEASURE_REQ_CHANNEL_LOAD_SUB_REPORTING_INFO1: /* Channel Load Reporting Information (1) */
33178 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition, tvb, offset, 1, ENC_NA0x00000000);
33179 offset += 1;
33180 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref, tvb, offset, 1, ENC_NA0x00000000);
33181 offset += 1;
33182 break;
33183 default:
33184 /* no default action */
33185 break;
33186 }
33187 }
33188 break;
33189 }
33190 case 4: /* Noise Histogram Request */
33191 {
33192 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33193 offset += 1;
33194
33195 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33196 offset += 1;
33197
33198 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33199 offset += 2;
33200
33201 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33202 offset += 2;
33203
33204 while (offset < tag_len)
33205 {
33206 uint8_t sub_id;
33207 proto_tree_add_item_ret_uint8(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_id, tvb, offset, 1, ENC_NA0x00000000, &sub_id);
33208 offset += 1;
33209
33210 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_subelement_length, tvb, offset, 1, ENC_NA0x00000000);
33211 offset += 1;
33212
33213 switch (sub_id) {
33214 case MEASURE_REQ_NOISE_HISTOGRAM_SUB_REPORTING_INFO1: /* Noise Histogram Reporting Information (1) */
33215 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition, tvb, offset, 1, ENC_NA0x00000000);
33216 offset += 1;
33217 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref, tvb, offset, 1, ENC_NA0x00000000);
33218 offset += 1;
33219 break;
33220 default:
33221 /* no default action */
33222 break;
33223 }
33224 }
33225 break;
33226 }
33227 case 5: /* Beacon Request */
33228 {
33229 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33230 offset += 1;
33231
33232 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33233 offset += 1;
33234
33235 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33236 offset += 2;
33237
33238 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33239 offset += 2;
33240
33241 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_measurement_mode, tvb, offset, 1, ENC_NA0x00000000);
33242 offset += 1;
33243
33244 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_bssid, tvb, offset, 6, ENC_NA0x00000000);
33245 offset += 6;
33246
33247 while (offset < tag_len)
33248 {
33249 uint8_t sub_id, sub_length, sub_tag_end;
33250 proto_item *sub_elem_item, *sub_elem_len_item;
33251 proto_tree *sub_elem_tree;
33252
33253 sub_elem_item = proto_tree_add_item_ret_uint8(sub_tree, hf_ieee80211_tag_measure_request_beacon_sub_id, tvb, offset, 1, ENC_NA0x00000000, &sub_id);
33254 offset += 1;
33255
33256 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_request_sub_element_tree);
33257
33258 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_subelement_length,
33259 tvb, offset, 1, ENC_NA0x00000000);
33260 sub_length = tvb_get_uint8(tvb, offset);
33261 offset += 1;
33262 sub_tag_end = offset + sub_length;
33263
33264 if (sub_tag_end > tag_len)
33265 {
33266 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33267 return tvb_captured_length(tvb);
33268 }
33269
33270 switch (sub_id) {
33271 case MEASURE_REQ_BEACON_SUB_SSID0: /* SSID (0) */
33272 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_ssid, tvb, offset, sub_length, ENC_ASCII0x00000000);
33273 offset += sub_length;
33274 break;
33275 case MEASURE_REQ_BEACON_SUB_BRI1: /* Beacon Reporting Information (1) */
33276 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33277 offset += 1;
33278 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33279 offset += 1;
33280 break;
33281 case MEASURE_REQ_BEACON_SUB_RD2: /* Reporting Detail (2) */
33282 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_reporting_detail, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33283 offset += 1;
33284 break;
33285 case MEASURE_REQ_BEACON_SUB_REQUEST10: /* Request (10) */
33286 {
33287 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33288 offset += ieee80211_tag_request(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
33289 break;
33290 }
33291 case MEASURE_REQ_BEACON_SUB_REQUEST_EXT11: /* Extended Request (11) */
33292 dissect_extended_request(tvb, pinfo, sub_elem_tree, offset, sub_length);
33293 offset += sub_length;
33294 break;
33295 case MEASURE_REQ_BEACON_SUB_APCP51: /* AP Channel Report (51) */
33296 {
33297 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33298 ieee80211_tagged_field_data_t sub_data = {
33299 .ftype = 0,
33300 .sanity_check = NULL((void*)0),
33301 .isDMG = false0,
33302 .item_tag_length = sub_elem_len_item,
33303 .item_tag = sub_elem_item};
33304 offset += dissect_ap_channel_report(sub_tvb, pinfo, sub_elem_tree, &sub_data);
33305 break;
33306 }
33307 case MEASURE_REQ_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163:
33308 {
33309 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33310 offset += dissect_wide_bw_channel_switch(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
33311 break;
33312 }
33313 case MEASURE_REQ_BEACON_SUB_LAST_REPORT_REQ164:
33314 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request,
33315 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33316 offset += 1;
33317 break;
33318 default:
33319 /* no default action */
33320 break;
33321 }
33322 if (offset < sub_tag_end)
33323 {
33324 proto_item *tix;
33325 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_request_beacon_unknown, tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33326 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_beacon_unknown);
33327 offset = sub_tag_end;
33328 }
33329 }
33330
33331 break;
33332 }
33333 case 6: /* Frame Request */
33334 {
33335 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33336 offset += 1;
33337
33338 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33339 offset += 1;
33340
33341 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33342 offset += 2;
33343
33344 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33345 offset += 2;
33346
33347 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_frame_request_type, tvb, offset, 1, ENC_NA0x00000000);
33348 offset += 1;
33349
33350 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_mac_address, tvb, offset, 6, ENC_NA0x00000000);
33351 offset += 6;
33352
33353 /* TODO Add Optional Subelements */
33354 break;
33355 }
33356 case 7: /* BSTA Statistics Request */
33357 {
33358 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_peer_mac_address, tvb, offset, 6, ENC_NA0x00000000);
33359 offset += 6;
33360
33361 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_randomization_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33362 offset += 2;
33363
33364 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33365 offset += 2;
33366
33367 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_group_id, tvb, offset, 1, ENC_NA0x00000000);
33368 offset += 1;
33369
33370 /* TODO Add Optional Subelements */
33371 break;
33372 }
33373 case 8: /* Location Configuration Indication (LCI) Request */
33374 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_subject, tvb, offset, 1, ENC_NA0x00000000);
33375 offset += 1;
33376
33377 /* TODO Add Optional Subelements */
33378 break;
33379 case 9: /* Transmit Stream Measurement Request */
33380 /* TODO */
33381 case 10: /* Multicast Diagnostics Request */
33382 /* TODO */
33383 case 11: /* Location Civic Request */
33384 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_subject, tvb, offset, 1, ENC_NA0x00000000);
33385 offset += 1;
33386
33387 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_civic_location_type, tvb, offset, 1, ENC_NA0x00000000);
33388 offset += 1;
33389
33390 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_service_interval_units, tvb, offset, 1, ENC_NA0x00000000);
33391 offset += 1;
33392
33393 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_location_service_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33394 offset += 2;
33395 /* TODO Add Optional Subelements */
33396 break;
33397 case 12: /* Location Identifier Request */
33398 /* TODO */
33399 case 13: /* Directional Channel Quality Request */
33400 /* TODO */
33401 case 14: /* Directional Measurement Request */
33402 /* TODO */
33403 case 15: /* Directional Statistics Request */
33404 /* TODO */
33405 case 16: /* Fine Timing Measurement Range Request */
33406 /* TODO */
33407 case 255: /* Measurement Pause Request */
33408 /* TODO */
33409 default: /* unknown */
33410 break;
33411 }
33412 if (offset < tag_len)
33413 {
33414 proto_item *tix;
33415 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_request_unknown, tvb, offset, tag_len - offset, ENC_NA0x00000000);
33416 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_request_unknown);
33417 }
33418
33419 return tvb_captured_length(tvb);
33420}
33421
33422/* 7.3.2.22 Measurement Report element (39) with update from 802.11k-2008 */
33423static int
33424ieee80211_tag_measure_rep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33425{
33426 int tag_len = tvb_reported_length(tvb);
33427 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33428 int offset = 0;
33429 proto_item *parent_item;
33430 proto_tree *sub_tree;
33431 uint8_t report_type;
33432 static int * const ieee80211_tag_measure_report_mode[] = {
33433 &hf_ieee80211_tag_measure_report_mode_late,
33434 &hf_ieee80211_tag_measure_report_mode_incapable,
33435 &hf_ieee80211_tag_measure_report_mode_refused,
33436 &hf_ieee80211_tag_measure_report_mode_reserved,
33437 NULL((void*)0)
33438 };
33439 static int * const ieee80211_tag_measure_map_field[] = {
33440 &hf_ieee80211_tag_measure_map_field_bss,
33441 &hf_ieee80211_tag_measure_map_field_ofdm,
33442 &hf_ieee80211_tag_measure_map_field_unident_signal,
33443 &hf_ieee80211_tag_measure_map_field_radar,
33444 &hf_ieee80211_tag_measure_map_field_unmeasured,
33445 &hf_ieee80211_tag_measure_map_field_reserved,
33446 NULL((void*)0)
33447 };
33448 static int * const ieee80211_tag_measure_report_frame_info[] = {
33449 &hf_ieee80211_tag_measure_report_frame_info_phy_type,
33450 &hf_ieee80211_tag_measure_report_frame_info_frame_type,
33451 NULL((void*)0)
33452 };
33453
33454 if (tag_len < 3)
33455 {
33456 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag length %u too short, must be >= 3", tag_len);
33457 return tvb_captured_length(tvb);
33458 }
33459 proto_tree_add_item(tree, hf_ieee80211_tag_measure_report_measurement_token, tvb, offset, 1, ENC_NA0x00000000);
33460 offset += 1;
33461
33462 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_report_mode,
33463 ett_tag_measure_report_mode_tree, ieee80211_tag_measure_report_mode,
33464 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33465 offset += 1;
33466
33467 parent_item = proto_tree_add_item_ret_uint8(tree, hf_ieee80211_tag_measure_report_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &report_type);
33468 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_type_tree);
33469 offset += 1;
33470
33471 if (tag_len == 3)
33472 return tvb_captured_length(tvb);
33473
33474 switch (report_type) {
33475 case 0: /* Basic Report */
33476 {
33477 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33478 offset += 1;
33479
33480 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33481 offset += 8;
33482
33483 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33484 offset += 2;
33485
33486 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_measure_basic_map_field,
33487 ett_tag_measure_report_basic_map_tree, ieee80211_tag_measure_map_field,
33488 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33489 break;
33490 }
33491 case 1: /* Clear channel assessment (CCA) report */
33492 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33493 offset += 1;
33494
33495 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33496 offset += 8;
33497
33498 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33499 offset += 2;
33500
33501 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_cca_busy_fraction, tvb, offset, 1, ENC_NA0x00000000);
33502 offset += 1;
33503 break;
33504 case 2: /* Receive power indication (RPI) histogram report */
33505 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33506 offset += 1;
33507
33508 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33509 offset += 8;
33510
33511 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33512 offset += 2;
33513
33514 parent_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report, tvb, offset, 8, ENC_NA0x00000000);
33515 sub_tree = proto_item_add_subtree(parent_item, ett_tag_measure_report_rpi_tree);
33516
33517 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_0, tvb, offset, 1, ENC_NA0x00000000);
33518 offset += 1;
33519
33520 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_1, tvb, offset, 1, ENC_NA0x00000000);
33521 offset += 1;
33522
33523 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_2, tvb, offset, 1, ENC_NA0x00000000);
33524 offset += 1;
33525
33526 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_3, tvb, offset, 1, ENC_NA0x00000000);
33527 offset += 1;
33528
33529 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_4, tvb, offset, 1, ENC_NA0x00000000);
33530 offset += 1;
33531
33532 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_5, tvb, offset, 1, ENC_NA0x00000000);
33533 offset += 1;
33534
33535 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_6, tvb, offset, 1, ENC_NA0x00000000);
33536 offset += 1;
33537
33538 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_rpi_histogram_report_7, tvb, offset, 1, ENC_NA0x00000000);
33539 offset += 1;
33540 break;
33541 case 3: /* Channel Load Report */
33542 {
33543 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33544 offset += 1;
33545
33546 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33547 offset += 1;
33548
33549 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33550 offset += 8;
33551
33552 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33553 offset += 2;
33554
33555 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_load, tvb, offset, 1, ENC_NA0x00000000);
33556 offset += 1;
33557
33558 /* TODO Add Optional Subelements */
33559 break;
33560 }
33561 case 4: /* Noise Histogram Report */
33562 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33563 offset += 1;
33564
33565 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33566 offset += 1;
33567
33568 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33569 offset += 8;
33570
33571 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33572 offset += 2;
33573
33574 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA0x00000000);
33575 offset += 1;
33576
33577 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_anpi, tvb, offset, 1, ENC_NA0x00000000);
33578 offset += 1;
33579
33580 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_0, tvb, offset, 1, ENC_NA0x00000000);
33581 offset += 1;
33582
33583 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_1, tvb, offset, 1, ENC_NA0x00000000);
33584 offset += 1;
33585
33586 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_2, tvb, offset, 1, ENC_NA0x00000000);
33587 offset += 1;
33588
33589 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_3, tvb, offset, 1, ENC_NA0x00000000);
33590 offset += 1;
33591
33592 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_4, tvb, offset, 1, ENC_NA0x00000000);
33593 offset += 1;
33594
33595 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_5, tvb, offset, 1, ENC_NA0x00000000);
33596 offset += 1;
33597
33598 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_6, tvb, offset, 1, ENC_NA0x00000000);
33599 offset += 1;
33600
33601 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_7, tvb, offset, 1, ENC_NA0x00000000);
33602 offset += 1;
33603
33604 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_8, tvb, offset, 1, ENC_NA0x00000000);
33605 offset += 1;
33606
33607 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_9, tvb, offset, 1, ENC_NA0x00000000);
33608 offset += 1;
33609
33610 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ipi_density_10, tvb, offset, 1, ENC_NA0x00000000);
33611 offset += 1;
33612
33613 /* TODO Add Optional Subelements */
33614 break;
33615 case 5: /* Beacon Report */
33616 {
33617 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33618 offset += 1;
33619
33620 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33621 offset += 1;
33622
33623 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33624 offset += 8;
33625
33626 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33627 offset += 2;
33628
33629 proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset, hf_ieee80211_tag_measure_report_frame_info,
33630 ett_tag_measure_report_frame_tree, ieee80211_tag_measure_report_frame_info,
33631 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33632 offset += 1;
33633
33634 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rcpi, tvb, offset, 1, ENC_NA0x00000000);
33635 offset += 1;
33636
33637 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_rsni, tvb, offset, 1, ENC_NA0x00000000);
33638 offset += 1;
33639
33640 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_bssid, tvb, offset, 6, ENC_NA0x00000000);
33641 offset += 6;
33642
33643 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_ant_id, tvb, offset, 1, ENC_NA0x00000000);
33644 offset += 1;
33645
33646 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
33647 offset += 4;
33648
33649 while (offset < tag_len)
33650 {
33651 uint8_t sub_id, sub_length, sub_tag_end;
33652 proto_item *sub_elem_item, *sub_elem_len_item;
33653 proto_tree *sub_elem_tree;
33654
33655 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_beacon_sub_id,
33656 tvb, offset, 1, ENC_NA0x00000000);
33657 sub_id = tvb_get_uint8(tvb, offset);
33658 offset += 1;
33659
33660 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33661
33662 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33663 tvb, offset, 1, ENC_NA0x00000000);
33664 sub_length = tvb_get_uint8(tvb, offset);
33665 offset += 1;
33666 sub_tag_end = offset + sub_length;
33667
33668 if (sub_tag_end > tag_len)
33669 {
33670 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33671 return tvb_captured_length(tvb);
33672 }
33673
33674 switch (sub_id) {
33675 case MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY1: /* Reported Frame Body (1) */
33676 {
33677 proto_tree *rep_tree;
33678 bool_Bool fixed_fields = true1;
33679
33680 rep_tree = proto_tree_add_subtree(sub_elem_tree, tvb, offset, sub_length,
33681 ett_tag_measure_reported_frame_tree, NULL((void*)0), "Reported Frame Body");
33682
33683 /* If reported frame body fragment ID sub element is present and this is not
33684 the first fragment then there are no fixed size fields */
33685 if (((tag_len - sub_tag_end) >= 4) &&
33686 (tvb_get_uint8(tvb, sub_tag_end) == MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2) &&
33687 ((tvb_get_uint8(tvb, sub_tag_end + 3) & 0x7f) > 0))
33688 fixed_fields = false0;
33689
33690 if (fixed_fields) {
33691 add_ff_timestamp(rep_tree, tvb, pinfo, offset);
33692 offset += 8;
33693 add_ff_beacon_interval(rep_tree, tvb, pinfo, offset);
33694 offset += 2;
33695 add_ff_cap_info(rep_tree, tvb, pinfo, offset);
33696 offset += 2;
33697 sub_length -= 12;
33698 }
33699
33700 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, rep_tree, sub_length, MGT_PROBE_RESP0x05, NULL((void*)0));
33701 offset += sub_length;
33702 break;
33703 }
33704 case MEASURE_REP_BEACON_SUB_REPORTED_FRAME_BODY_FRAG_ID2:
33705 {
33706 static int * const ieee80211_tag_measure_reported_frame_frag_id[] = {
33707 &hf_ieee80211_tag_measure_reported_frame_frag_rep_id,
33708 &hf_ieee80211_tag_measure_reported_frame_frag_number,
33709 &hf_ieee80211_tag_measure_reported_frame_frag_more,
33710 NULL((void*)0)
33711 };
33712 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33713 hf_ieee80211_tag_measure_reported_frame_frag_id,
33714 ett_tag_measure_reported_frame_frag_id_tree,
33715 ieee80211_tag_measure_reported_frame_frag_id,
33716 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33717 offset += 2;
33718 break;
33719 }
33720 case MEASURE_REP_BEACON_SUB_WIDE_BW_CHANNEL_SWITCH163:
33721 {
33722 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, sub_length);
33723 offset += dissect_wide_bw_channel_switch(sub_tvb, pinfo, sub_elem_tree, NULL((void*)0));
33724 break;
33725 }
33726 case MEASURE_REP_BEACON_SUB_LAST_REPORT_INDICATION164:
33727 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication,
33728 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33729 offset += 1;
33730 break;
33731 default:
33732 /* no default action */
33733 break;
33734 }
33735
33736 if (offset < sub_tag_end)
33737 {
33738 proto_item *tix;
33739 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_beacon_unknown,
33740 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33741 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_beacon_unknown);
33742 offset = sub_tag_end;
33743 }
33744 }
33745 break;
33746 }
33747 case 6: /* Frame Report */
33748 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_operating_class, tvb, offset, 1, ENC_NA0x00000000);
33749 offset += 1;
33750
33751 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_channel_number, tvb, offset, 1, ENC_NA0x00000000);
33752 offset += 1;
33753
33754 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_start_time, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
33755 offset += 8;
33756
33757 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33758 offset += 2;
33759
33760 /* TODO Add Optional Subelements */
33761 break;
33762 case 7: /* BSTA Statistics Report */
33763 /* TODO */
33764 case 8: /* Location Configuration Information Report element */
33765 //proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_parent_tsf, tvb, offset, 4, ENC_LITTLE_ENDIAN);
33766 //offset += 4;
33767
33768 while (offset < tag_len)
33769 {
33770 uint8_t sub_id, sub_length, sub_tag_end;
33771 proto_item *sub_elem_item, *sub_elem_len_item;
33772 proto_tree *sub_elem_tree;
33773
33774 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_lci_sub_id,
33775 tvb, offset, 1, ENC_NA0x00000000);
33776 sub_id = tvb_get_uint8(tvb, offset);
33777 offset += 1;
33778
33779 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33780
33781 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33782 tvb, offset, 1, ENC_NA0x00000000);
33783 sub_length = tvb_get_uint8(tvb, offset);
33784 offset += 1;
33785 sub_tag_end = offset + sub_length;
33786
33787 if (sub_tag_end > tag_len)
33788 {
33789 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33790 return tvb_captured_length(tvb);
33791 }
33792
33793 switch (sub_id) {
33794 case MEASURE_REP_LCI_SUB_REPORTED_LCI0: /* Location Configuration Information (0) */
33795 {
33796 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_lci,
33797 tvb, offset, 16, ENC_NA0x00000000);
33798 offset += 16;
33799 break;
33800 }
33801 case MEASURE_REP_LCI_SUB_REPORTED_Z4: /* Z (4) */
33802 {
33803 static int * const ieee80211_tag_measure_reported_lci_z_sta_floor_info[] = {
33804 &hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move,
33805 &hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number,
33806 NULL((void*)0)
33807 };
33808 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33809 hf_ieee80211_tag_measure_report_lci_z_sta_floor_info,
33810 ett_tag_measure_reported_lci_z_tree,
33811 ieee80211_tag_measure_reported_lci_z_sta_floor_info,
33812 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33813 offset += 2;
33814
33815 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor,
33816 tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
33817 offset += 3;
33818
33819 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty,
33820 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
33821 offset += 1;
33822 break;
33823 }
33824 case MEASURE_REP_LCI_SUB_REPORTED_URP6: /* Usage Rules/Policy (6) */
33825 {
33826 static int * const ieee80211_tag_measure_reported_lci_urp[] = {
33827 &hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed,
33828 &hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present,
33829 &hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy,
33830 &hf_ieee80211_tag_measure_report_lci_urp_reserved,
33831 NULL((void*)0)
33832 };
33833 proto_tree_add_bitmask_with_flags(sub_elem_tree, tvb, offset,
33834 hf_ieee80211_tag_measure_report_lci_urp,
33835 ett_tag_measure_reported_lci_urp_tree,
33836 ieee80211_tag_measure_reported_lci_urp,
33837 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
33838 offset += 1;
33839
33840 /* Retention Expires Relative (optional) */
33841 if ((sub_tag_end - 1) == 2 ) {
33842 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative,
33843 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33844 offset += 1;
33845 }
33846 break;
33847 }
33848 default:
33849 /* no default action */
33850 break;
33851 }
33852
33853 if (offset < sub_tag_end)
33854 {
33855 proto_item *tix;
33856 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_unknown,
33857 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33858 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_lci_unknown);
33859 offset = sub_tag_end;
33860 }
33861 }
33862 break;
33863 case 9: /* Transmit Stream Measurement Report */
33864 /* TODO */
33865 case 10: /* Multicast Diagnostics Report */
33866 /* TODO */
33867 case 11: /* Location Civic Report */
33868 proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_civic_location_type, tvb, offset, 1, ENC_NA0x00000000);
33869 offset += 1;
33870
33871 while (offset < tag_len)
33872 {
33873 uint8_t sub_id, sub_length, sub_tag_end;
33874 proto_item *sub_elem_item, *sub_elem_len_item;
33875 proto_tree *sub_elem_tree;
33876
33877 sub_elem_item = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_civic_sub_id,
33878 tvb, offset, 1, ENC_NA0x00000000);
33879 sub_id = tvb_get_uint8(tvb, offset);
33880 offset += 1;
33881
33882 sub_elem_tree = proto_item_add_subtree(sub_elem_item, ett_tag_measure_report_sub_element_tree);
33883
33884 sub_elem_len_item = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_subelement_length,
33885 tvb, offset, 1, ENC_NA0x00000000);
33886 sub_length = tvb_get_uint8(tvb, offset);
33887 offset += 1;
33888 sub_tag_end = offset + sub_length;
33889
33890 if (sub_tag_end > tag_len)
33891 {
33892 expert_add_info_format(pinfo, sub_elem_len_item, &ei_ieee80211_tag_length, "Sub Element length exceed Tag length");
33893 return tvb_captured_length(tvb);
33894 }
33895
33896 switch (sub_id) {
33897 case MEASURE_REP_CIVIC_SUB_REPORTED_LOCATION_CIVIC0: /* Location Civic (0) */
33898 {
33899 uint32_t length;
33900 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_country,
33901 tvb, offset, 2, ENC_ASCII0x00000000);
33902 offset += 2;
33903
33904 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_type,
33905 tvb, offset, 1, ENC_NA0x00000000);
33906 offset += 1;
33907
33908 proto_tree_add_item_ret_uint(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic_length,
33909 tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &length);
33910 offset += 1;
33911
33912 proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_location_civic,
33913 tvb, offset, length, ENC_ASCII0x00000000);
33914 offset += length;
33915 break;
33916 }
33917 default:
33918 /* no default action */
33919 break;
33920 }
33921
33922 if (offset < sub_tag_end)
33923 {
33924 proto_item *tix;
33925 tix = proto_tree_add_item(sub_elem_tree, hf_ieee80211_tag_measure_report_lci_unknown,
33926 tvb, offset, sub_tag_end - offset, ENC_NA0x00000000);
33927 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_lci_unknown);
33928 offset = sub_tag_end;
33929 }
33930 }
33931 break;
33932 case 12: /* Location Identifier Report */
33933 /* TODO */
33934 case 13: /* Directional Channel Quality Report */
33935 /* TODO */
33936 case 14: /* Directional Measurement Report */
33937 /* TODO */
33938 case 15: /* Directional Statistics Report */
33939 /* TODO */
33940 case 16: /* Fine Timing Measurement range Report */
33941 /* TODO */
33942 default: /* unknown */
33943 break;
33944 }
33945 if (offset < tag_len)
33946 {
33947 proto_item *tix;
33948 tix = proto_tree_add_item(sub_tree, hf_ieee80211_tag_measure_report_unknown, tvb, offset, tag_len - offset, ENC_NA0x00000000);
33949 expert_add_info(pinfo, tix, &ei_ieee80211_tag_measure_report_unknown);
33950 }
33951 return tvb_captured_length(tvb);
33952}
33953
33954/* 7.3.2.23 Quiet element (40) */
33955static int
33956ieee80211_tag_quiet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33957{
33958 int tag_len = tvb_reported_length(tvb);
33959 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33960 int offset = 0;
33961 if (tag_len != 6)
33962 {
33963 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
33964 return tvb_captured_length(tvb);
33965 }
33966
33967 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_count, tvb, offset, 1, ENC_NA0x00000000);
33968 proto_item_append_text(field_data->item_tag, " Count: %d", tvb_get_uint8(tvb, offset));
33969 offset += 1;
33970
33971 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_period, tvb, offset, 1, ENC_NA0x00000000);
33972 proto_item_append_text(field_data->item_tag, " Period: %d", tvb_get_uint8(tvb, offset));
33973 offset += 1;
33974
33975 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33976 proto_item_append_text(field_data->item_tag, " Duration: %d", tvb_get_letohs(tvb, offset));
33977 offset += 2;
33978
33979 proto_tree_add_item(tree, hf_ieee80211_tag_quiet_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
33980 proto_item_append_text(field_data->item_tag, " Offset: %d", tvb_get_letohs(tvb, offset));
33981
33982 return tvb_captured_length(tvb);
33983}
33984
33985/* 7.3.2.24 IBSS DFS element (41) */
33986static int
33987ieee80211_tag_ibss_dfs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
33988{
33989 int tag_len = tvb_reported_length(tvb);
33990 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
33991 int offset = 0;
33992 proto_item *ti_sup_map;
33993 proto_tree *sub_map_tree;
33994 if (tag_len < 7)
33995 {
33996 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 7", tag_len);
33997 return tvb_captured_length(tvb);
33998 }
33999
34000 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_owner, tvb, offset, 6, ENC_NA0x00000000);
34001 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));
34002 offset += 6;
34003
34004 proto_tree_add_item(tree, hf_ieee80211_tag_dfs_recovery_interval, tvb, offset, 1, ENC_NA0x00000000);
34005 offset += 1;
34006
34007 while (offset < tag_len)
34008 {
34009 ti_sup_map = proto_tree_add_item(tree, hf_ieee80211_tag_dfs_channel_map, tvb, offset, 2, ENC_NA0x00000000);
34010 sub_map_tree = proto_item_add_subtree(ti_sup_map, ett_tag_dfs_map_tree);
34011 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_channel_number, tvb, offset, 1, ENC_NA0x00000000);
34012 proto_tree_add_item(sub_map_tree, hf_ieee80211_tag_dfs_map, tvb, offset, 1, ENC_NA0x00000000);
34013 offset += 2;
34014 }
34015 return tvb_captured_length(tvb);
34016}
34017
34018/* 7.3.2.13 ERP Information element (42) */
34019static int
34020ieee80211_tag_erp_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
34021{
34022 int tag_len = tvb_reported_length(tvb);
34023 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
34024 int offset = 0;
34025 static int * const ieee80211_tag_erp_info_flags[] = {
34026 &hf_ieee80211_tag_erp_info_erp_present,
34027 &hf_ieee80211_tag_erp_info_use_protection,
34028 &hf_ieee80211_tag_erp_info_barker_preamble_mode,
34029 &hf_ieee80211_tag_erp_info_reserved,
34030 NULL((void*)0)
34031 };
34032
34033 if (tag_len != 1)
34034 {
34035 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
34036 return tvb_captured_length(tvb);
34037 }
34038
34039 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_erp_info,
34040 ett_tag_erp_info_tree, ieee80211_tag_erp_info_flags,
34041 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34042
34043 return tvb_captured_length(tvb);
34044}
34045
34046/* 7.3.2.32 TS Delay element (43) */
34047static int
34048ieee80211_tag_ts_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
34049{
34050 int tag_len = tvb_reported_length(tvb);
34051 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
34052 int offset = 0;
34053 if (tag_len != 4)
34054 {
34055 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
34056 return tvb_captured_length(tvb);
34057 }
34058
34059 proto_tree_add_item(tree, hf_ieee80211_ts_delay, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
34060 proto_item_append_text(field_data->item_tag, " : %d", tvb_get_ntohl(tvb, offset));
34061 return tvb_captured_length(tvb);
34062}
34063
34064/* 7.3.2.33 TCLAS Processing element (44) */
34065static int
34066ieee80211_tag_tclas_process(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
34067{
34068 int tag_len = tvb_reported_length(tvb);
34069 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
34070 int offset = 0;
34071 if (tag_len != 1)
34072 {
34073 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
34074 return tvb_captured_length(tvb);
34075 }
34076
34077 proto_tree_add_item(tree, hf_ieee80211_tclas_process, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
34078 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"));
34079 return tvb_captured_length(tvb);
34080}
34081
34082/* 802.11-2012 8.4.2.37 QoS Capability element (46) */
34083static int
34084ieee80211_tag_qos_capability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
34085{
34086 int tag_len = tvb_reported_length(tvb);
34087 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
34088 int offset = 0;
34089 if (tag_len != 1)
34090 {
34091 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 1", tag_len);
34092 return tvb_captured_length(tvb);
34093 }
34094 dissect_qos_capability(tree, tvb, pinfo, offset, field_data->ftype);
34095 return tvb_captured_length(tvb);
34096}
34097
34098static int
34099ieee80211_tag_rsn_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
34100{
34101 int tag_len = tvb_reported_length(tvb);
34102 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
34103 int offset = 0;
34104 if (tag_len < 2)
34105 {
34106 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
34107 return tvb_captured_length(tvb);
34108 }
34109
34110 dissect_rsn_ie(pinfo, tree, tvb, offset, tag_len, field_data->sanity_check);
34111 return tvb_captured_length(tvb);
34112}
34113
34114/* 7.3.2.14 Extended Supported Rates element (50) */
34115static int
34116ieee80211_tag_ext_supp_rates(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
34117{
34118 int tag_len = tvb_reported_length(tvb);
34119 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
34120 int offset = 0;
34121 if (tag_len < 1)
34122 {
34123 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);
34124 return tvb_captured_length(tvb);
34125 }
34126
34127 while (offset < tag_len)
34128 {
34129 proto_tree_add_item(tree, hf_ieee80211_tag_ext_supp_rates, tvb, offset, 1, ENC_NA0x00000000);
34130 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"));
34131 offset += 1;
34132 }
34133 proto_item_append_text(field_data->item_tag, " [Mbit/sec]");
34134 return tvb_captured_length(tvb);
34135}
34136
34137static int
34138ieee80211_tag_cisco_ccx1_ckip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
34139{
34140 int tag_len = tvb_reported_length(tvb);
34141 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
34142 int offset = 0;
34143 /* From WCS manual:
34144 * If Aironet IE support is enabled, the access point sends an Aironet
34145 * IE 0x85 (which contains the access point name, load, number of
34146 * associated clients, and so on) in the beacon and probe responses of
34147 * this WLAN, and the controller sends Aironet IEs 0x85 and 0x95
34148 * (which contains the management IP address of the controller and
34149 * the IP address of the access point) in the reassociation response
34150 * if it receives Aironet IE 0x85 in the reassociation request.
34151 */
34152
34153 if (tag_len < 26)
34154 {
34155 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u too short, must be >= 26", tag_len);
34156 return tvb_captured_length(tvb);
34157 }
34158 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown, tvb, offset, 10, ENC_NA0x00000000);
34159 offset += 10;
34160
34161 /* The Name of the sending device starts at offset 10 and is up to
34162 15 or 16 bytes in length, \0 padded */
34163 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_name, tvb, offset, 16, ENC_ASCII0x00000000);
34164 offset += 16;
34165
34166 /* Total number off associated clients and repeater access points */
34167 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_clients, tvb, offset, 1, ENC_NA0x00000000);
34168 offset += 1;
34169 proto_tree_add_item(tree, hf_ieee80211_tag_cisco_ccx1_unknown2, tvb, offset, 3, ENC_NA0x00000000);
34170 return tvb_captured_length(tvb);
34171}
34172
34173static int
34174ieee80211_tag_vendor_specific_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
34175{
34176 int tag_len = tvb_reported_length(tvb);
34177 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
34178 int offset = 0;
34179 uint32_t tag_vs_len = tag_len;
34180 uint32_t oui;
34181
34182 if (tag_len < 3)
34183 {
34184 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
34185 return tvb_captured_length(tvb);
34186 }
34187
34188 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
34189 proto_item_append_text(field_data->item_tag, ": %s", uint_get_manuf_name_if_known(oui));
34190
34191 offset += 3;
34192 tag_vs_len -= 3;
34193
34194 if (tag_len > 0) {
34195 proto_tree_add_item(field_data->item_tag, hf_ieee80211_tag_vendor_oui_type, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
34196 }
34197
34198 switch (oui) {
34199 /* 802.11 specific vendor ids */
34200 case OUI_WPAWME0x0050F2:
34201 dissect_vendor_ie_wpawme(tree, tvb, pinfo, offset, tag_vs_len, field_data->ftype);
34202 break;
34203 case OUI_RSN0x000FAC:
34204 dissect_vendor_ie_rsn(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34205 break;
34206 case OUI_PRE11N0x00904C:
34207 dissect_vendor_ie_ht(tvb, pinfo, tree, offset, field_data->item_tag, field_data->item_tag_length, tag_vs_len);
34208 break;
34209 case OUI_WFA0x506F9A:
34210 dissect_vendor_ie_wfa(pinfo, field_data->item_tag, tvb);
34211 break;
34212
34213 /* Normal IEEE vendor ids (from oui.h) */
34214 case OUI_CISCOWL0x004096: /* Cisco Wireless (Aironet) */
34215 dissect_vendor_ie_aironet(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34216 break;
34217 case OUI_MARVELL0x005043:
34218 dissect_vendor_ie_marvell(field_data->item_tag, tree, tvb, offset, tag_vs_len);
34219 break;
34220 case OUI_ATHEROS0x00037F:
34221 dissect_vendor_ie_atheros(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo, field_data->item_tag_length);
34222 break;
34223 case OUI_EXTREME_MESH0x000512:
34224 dissect_vendor_ie_extreme_mesh(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo, field_data->item_tag_length);
34225 break;
34226 case OUI_ARUBA0x000B86:
34227 dissect_vendor_ie_aruba(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34228 break;
34229 case OUI_NINTENDO0x001F32:
34230 dissect_vendor_ie_nintendo(field_data->item_tag, tree, tvb, offset, tag_vs_len);
34231 break;
34232 case OUI_ROUTERBOARD0x000C42:
34233 dissect_vendor_ie_routerboard(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34234 break;
34235 case OUI_MERU0x000CE6:
34236 dissect_vendor_ie_meru(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34237 break;
34238 case OUI_ZEBRA_EXTREME0x00A0F8:
34239 dissect_vendor_ie_extreme(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34240 break;
34241 case OUI_AEROHIVE0x001977:
34242 dissect_vendor_ie_aerohive(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34243 break;
34244 case OUI_MIST0x5C5B35:
34245 dissect_vendor_ie_mist(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34246 break;
34247 case OUI_UBIQUITI0x00156D:
34248 dissect_vendor_ie_ubiquiti(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34249 break;
34250 case OUI_METER0x848094:
34251 dissect_vendor_ie_meter(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34252 break;
34253 case OUI_RUCKUS0x001392:
34254 dissect_vendor_ie_ruckus(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34255 break;
34256 case OUI_ALCATEL_LUCENT0xDC0856:
34257 dissect_vendor_ie_alcatel(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34258 break;
34259 case OUI_SGDSN0x6A5C35:
34260 dissect_vendor_ie_sgdsn(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34261 break;
34262 case OUI_FORTINET0x00090F:
34263 dissect_vendor_ie_fortinet(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34264 break;
34265 case OUI_MOJO_ARISTA0x001174:
34266 dissect_vendor_ie_arista(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34267 break;
34268 case OUI_WISUN0x0C5A9E:
34269 dissect_vendor_ie_wisun(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34270 break;
34271 case OUI_APPLE0x0017f2:
34272 dissect_vendor_ie_apple(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34273 break;
34274 default:
34275 proto_tree_add_item(tree, hf_ieee80211_tag_vendor_data, tvb, offset + 1, tag_vs_len - 1, ENC_NA0x00000000);
34276 break;
34277 }
34278
34279 return tvb_captured_length(tvb);
34280}
34281
34282static void
34283dissect_symbol_proprietary_ie_extreme(proto_item *item _U___attribute__((unused)), proto_tree *ietree,
34284 tvbuff_t *tvb, int offset, uint32_t tag_len _U___attribute__((unused)),
34285 packet_info *pinfo _U___attribute__((unused)))
34286{
34287 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_assoc_clients, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
34288 offset += 2;
34289
34290 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_load_kbps, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
34291 offset += 2;
34292
34293 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_load_pps, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
34294 offset += 2;
34295
34296 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_client_tx_power, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
34297 offset += 2;
34298
34299 proto_tree_add_item(ietree, hf_ieee80211_symbp_extreme_timestamp, tvb, offset, 4, ENC_TIME_SECS0x00000012|ENC_LITTLE_ENDIAN0x80000000);
34300}
34301
34302static int
34303ieee80211_tag_symbol_proprietary_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
34304{
34305 int tag_len = tvb_reported_length(tvb);
34306 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
34307 int offset = 0;
34308 uint32_t tag_vs_len = tag_len;
34309 uint32_t oui;
34310
34311 if (tag_len < 3)
34312 {
34313 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 3", tag_len);
34314 return tvb_captured_length(tvb);
34315 }
34316
34317 proto_tree_add_item_ret_uint(tree, hf_ieee80211_tag_symbol_proprietary_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &oui);
34318 proto_item_append_text(field_data->item_tag, ": %s", uint_get_manuf_name_if_known(oui));
34319
34320 offset += 3;
34321 tag_vs_len -= 3;
34322
34323 switch (oui) {
34324 /* 802.11 specific vendor ids */
34325 case OUI_ZEBRA_EXTREME0x00A0F8:
34326 dissect_symbol_proprietary_ie_extreme(field_data->item_tag, tree, tvb, offset, tag_vs_len, pinfo);
34327 break;
34328 default:
34329 proto_tree_add_item(tree, hf_ieee80211_tag_symbol_proprietary_data, tvb, offset, tag_vs_len, ENC_NA0x00000000);
34330 break;
34331 }
34332
34333 return tvb_captured_length(tvb);
34334}
34335
34336#define HE_HTC_HE_SUPPORT0x00000001 0x00000001
34337#define HE_DYNAMIC_FRAGMENTATION_SUPPORT0x00000018 0x00000018
34338#define HE_ALL_ACK_SUPPORT0x00000200 0x00000200
34339#define HE_UMRS_SUPPORT0x00000400 0x00000400
34340#define HE_BSR_SUPPORT0x00000800 0x00000800
34341
34342static const val64_string he_dynamic_fragmentation_support_vals[] = {
34343 { 0, "No support for dynamic fragmentation" },
34344 { 1, "Level 1 dynamic fragmentation support" },
34345 { 2, "Level 2 dynamic fragmentation support" },
34346 { 3, "Level 3 dynamic fragmentation support" },
34347 { 0, NULL((void*)0) }
34348};
34349
34350static const val64_string he_minimum_fragmentation_size_vals[] = {
34351 { 0, "No restriction on minimum payload size" },
34352 { 1, "Minimum payload size of 128 bytes" },
34353 { 2, "Minimum payload size of 256 bytes" },
34354 { 3, "Minimum payload size of 512 bytes" },
34355 { 0, NULL((void*)0) }
34356};
34357
34358static const val64_string he_trigger_mac_padding_dur_vals[] = {
34359 { 0, "0" },
34360 { 1, "8 uS" },
34361 { 2, "16 uS" },
34362 { 3, "Reserved" },
34363 { 0, NULL((void*)0) }
34364};
34365
34366static void
34367max_frag_msdus_base_custom(char *result, uint32_t max_frag_msdus_value)
34368{
34369 if (max_frag_msdus_value == 7)
34370 snprintf(result, ITEM_LABEL_LENGTH240, "No restriction");
34371 else
34372 snprintf(result, ITEM_LABEL_LENGTH240, "%u", 1 << max_frag_msdus_value);
34373}
34374
34375static const val64_string he_link_adaptation_support_vals[] = {
34376 { 0, "No feedback if the STA does not provide HE MFB" },
34377 { 1, "Reserved" },
34378 { 2, "Unsolicited if the STA can receive and provide only unsolicited HE MFB" },
34379 { 3, "Both" },
34380 { 0, NULL((void*)0) }
34381};
34382
34383static const val64_string he_mimo_cntrl_nc_index_vals[] = {
34384 {0x00, "1 Column"},
34385 {0x01, "2 Columns"},
34386 {0x02, "3 Columns"},
34387 {0x03, "4 Columns"},
34388 {0x04, "5 Columns"},
34389 {0x05, "6 Columns"},
34390 {0x06, "7 Columns"},
34391 {0x07, "8 Columns"},
34392 {0, NULL((void*)0)}
34393};
34394
34395static const val64_string he_mimo_cntrl_nr_index_vals[] = {
34396 {0x00, "1 Row"},
34397 {0x01, "2 Rows"},
34398 {0x02, "3 Rows"},
34399 {0x03, "4 Rows"},
34400 {0x04, "5 Rows"},
34401 {0x05, "6 Rows"},
34402 {0x06, "7 Rows"},
34403 {0x07, "8 Rows"},
34404 {0, NULL((void*)0)}
34405};
34406
34407static const val64_string he_mimo_cntrl_grouping_flags[] = {
34408 { 0x00, "Carrier Groups of 4" },
34409 { 0x01, "Carrier Groups of 16" },
34410 { 0, NULL((void*)0) }
34411};
34412
34413static const val64_string he_mimo_cntrl_feedback_vals[] = {
34414 { 0x00, "SU" },
34415 { 0x01, "MU" },
34416 { 0x02, "CQI feedback" },
34417 { 0x03, "Reserved" },
34418 { 0, NULL((void*)0) }
34419};
34420
34421static int * const he_phy_first_byte_headers[] = {
34422 &hf_ieee80211_he_phy_cap_reserved_b0,
34423 NULL((void*)0),
34424};
34425
34426static int * const he_phy_b8_to_b23_headers[] = {
34427 &hf_ieee80211_he_phy_cap_punctured_preamble_rx,
34428 &hf_ieee80211_he_phy_cap_device_class,
34429 &hf_ieee80211_he_phy_cap_ldpc_coding_in_payload,
34430 &hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us,
34431 &hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts,
34432 &hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us,
34433 &hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz,
34434 &hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz,
34435 &hf_ieee80211_he_phy_cap_doppler_tx,
34436 &hf_ieee80211_he_phy_cap_doppler_rx,
34437 &hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo,
34438 &hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo,
34439 NULL((void*)0)
34440};
34441
34442static int * const he_phy_b24_to_b39_headers[] = {
34443 &hf_ieee80211_he_phy_cap_dcm_max_constellation_tx,
34444 &hf_ieee80211_he_phy_cap_dcm_max_nss_tx,
34445 &hf_ieee80211_he_phy_cap_dcm_max_constellation_rx,
34446 &hf_ieee80211_he_phy_cap_dcm_max_nss_rx,
34447 &hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu,
34448 &hf_ieee80211_he_phy_cap_su_beamformer,
34449 &hf_ieee80211_he_phy_cap_su_beamformee,
34450 &hf_ieee80211_he_phy_cap_mu_beamformer,
34451 &hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz,
34452 &hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz,
34453 NULL((void*)0)
34454};
34455
34456static int * const he_phy_b40_to_b55_headers[] = {
34457 &hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80,
34458 &hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80,
34459 &hf_ieee80211_he_phy_cap_ng_eq_16_su_fb,
34460 &hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb,
34461 &hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb,
34462 &hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb,
34463 &hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb,
34464 &hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb,
34465 &hf_ieee80211_he_phy_cap_triggered_cqi_fb,
34466 &hf_ieee80211_he_phy_cap_partial_bw_extended_range,
34467 &hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo,
34468 &hf_ieee80211_he_phy_cap_ppe_threshold_present,
34469 NULL((void*)0)
34470};
34471
34472static int * const he_phy_b56_to_b71_headers[] = {
34473 &hf_ieee80211_he_phy_cap_psr_based_sr_support,
34474 &hf_ieee80211_he_phy_cap_power_boost_factor_ar_support,
34475 &hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi,
34476 &hf_ieee80211_he_phy_cap_max_nc,
34477 &hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz,
34478 &hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz,
34479 &hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi,
34480 &hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band,
34481 &hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu,
34482 &hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu,
34483 &hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi,
34484 &hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf,
34485 &hf_ieee80211_he_phy_cap_dcm_max_ru,
34486 NULL((void*)0)
34487};
34488
34489static int * const he_phy_b72_to_b87_headers[] = {
34490 &hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support,
34491 &hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback,
34492 &hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support,
34493 &hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support,
34494 &hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb,
34495 &hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb,
34496 &hf_ieee80211_he_phy_cap_nominal_packet_padding,
34497 &hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max,
34498 &hf_ieee80211_he_phy_cap_b81_b87_reserved,
34499 NULL((void*)0)
34500};
34501
34502static int * const he_mcs_map_80_rx_headers [] = {
34503 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss,
34504 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss,
34505 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss,
34506 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss,
34507 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss,
34508 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss,
34509 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss,
34510 &hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss,
34511 NULL((void*)0)
34512};
34513
34514static int * const he_mcs_map_80_tx_headers [] = {
34515 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss,
34516 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss,
34517 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss,
34518 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss,
34519 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss,
34520 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss,
34521 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss,
34522 &hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss,
34523 NULL((void*)0)
34524};
34525
34526static int * const he_mcs_map_80p80_rx_headers [] = {
34527 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss,
34528 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss,
34529 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss,
34530 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss,
34531 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss,
34532 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss,
34533 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss,
34534 &hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss,
34535 NULL((void*)0)
34536};
34537
34538static int * const he_mcs_map_80p80_tx_headers [] = {
34539 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss,
34540 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss,
34541 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss,
34542 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss,
34543 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss,
34544 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss,
34545 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss,
34546 &hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss,
34547 NULL((void*)0)
34548};
34549
34550static int * const he_mcs_map_160_rx_headers [] = {
34551 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss,
34552 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss,
34553 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss,
34554 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss,
34555 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss,
34556 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss,
34557 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss,
34558 &hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss,
34559 NULL((void*)0)
34560};
34561
34562static int * const he_mcs_map_160_tx_headers [] = {
34563 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss,
34564 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss,
34565 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss,
34566 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss,
34567 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss,
34568 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss,
34569 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss,
34570 &hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss,
34571 NULL((void*)0)
34572};
34573
34574static const value_string ru_alloc_vals[] = {
34575 { 0, "242" },
34576 { 1, "484" },
34577 { 2, "996" },
34578 { 3, "2x996" },
34579 { 0, NULL((void*)0) }
34580};
34581
34582static const value_string constellation_vals[] = {
34583 { 0, "BPSK" },
34584 { 1, "QPSK" },
34585 { 2, "16-QAM" },
34586 { 3, "64-QAM" },
34587 { 4, "256-QAM" },
34588 { 5, "1024-QAM" },
34589 { 6, "Reserved" },
34590 { 7, "None" },
34591 { 0, NULL((void*)0) }
34592};
34593
34594#define HE_CHANNEL_WIDTH_SET_B20x04 0x04
34595#define HE_CHANNEL_WIDTH_SET_B30x08 0x08
34596
34597static void
34598dissect_he_capabilities(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34599 int offset, int len)
34600{
34601 int *he_mac_headers[] = {
34602 &hf_ieee80211_he_htc_he_support, /* 0 */
34603 &hf_ieee80211_he_twt_requester_support, /* 1 */
34604 &hf_ieee80211_he_twt_responder_support, /* 2 */
34605 &hf_ieee80211_he_dynamic_fragmentation_support, /* 3 */
34606 &hf_ieee80211_he_max_number_fragmented_msdus, /* 4 */
34607 &hf_ieee80211_he_min_fragment_size, /* 5 */
34608 &hf_ieee80211_he_trigger_frame_mac_padding_dur, /* 6 */
34609 &hf_ieee80211_he_multi_tid_aggregation_rx_support, /* 7 */
34610 &hf_ieee80211_he_he_link_adaptation_support, /* 8 */
34611 &hf_ieee80211_he_all_ack_support, /* 9 */
34612 &hf_ieee80211_he_trs_support, /* 10 */
34613 &hf_ieee80211_he_bsr_support, /* 11 */
34614 &hf_ieee80211_he_broadcast_twt_support, /* 12 */
34615 &hf_ieee80211_he_32_bit_ba_bitmap_support, /* 13 */
34616 &hf_ieee80211_he_mu_cascading_support, /* 14 */
34617 &hf_ieee80211_he_ack_enabled_aggregation_support, /* 15 */
34618 &hf_ieee80211_he_reserved_b24, /* 16 */
34619 &hf_ieee80211_he_om_control_support, /* 17 */
34620 &hf_ieee80211_he_ofdma_ra_support, /* 18 */
34621 &hf_ieee80211_he_max_a_mpdu_length_exponent_ext, /* 19 */
34622 &hf_ieee80211_he_a_msdu_fragmentation_support, /* 20 */
34623 &hf_ieee80211_he_flexible_twt_schedule_support, /* 21 */
34624 &hf_ieee80211_he_rx_control_frame_to_multibss, /* 22 */
34625 &hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation, /* 23 */
34626 &hf_ieee80211_he_qtp_support, /* 24 */
34627 &hf_ieee80211_he_bqr_support, /* 25 */
34628 &hf_ieee80211_he_psr_responder, /* 26 */
34629 &hf_ieee80211_he_ndp_feedback_report_support, /* 27 */
34630 &hf_ieee80211_he_ops_support, /* 28 */
34631 &hf_ieee80211_he_a_msdu_in_a_mpdu_support, /* 29 */
34632 &hf_ieee80211_he_multi_tid_aggregation_tx_support, /* 30 */
34633 &hf_ieee80211_he_subchannel_selective_trans_support, /* 31 */
34634 &hf_ieee80211_he_2_996_tone_ru_support, /* 32 */
34635 &hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support, /* 33 */
34636 &hf_ieee80211_he_dynamic_sm_power_save, /* 34 */
34637 &hf_ieee80211_he_punctured_sounding_support, /* 35 */
34638 &hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support, /* 36 */
34639 NULL((void*)0)
34640 };
34641 int * he_phy_channel_width_set_headers[] = {
34642 &hf_ieee80211_he_40mhz_channel_2_4ghz,
34643 &hf_ieee80211_he_40_and_80_mhz_5ghz,
34644 &hf_ieee80211_he_160_mhz_5ghz,
34645 &hf_ieee80211_he_160_80_plus_80_mhz_5ghz,
34646 &hf_ieee80211_he_242_tone_rus_in_2_4ghz,
34647 &hf_ieee80211_he_242_tone_rus_in_5ghz,
34648 &hf_ieee80211_he_chan_width_reserved,
34649 NULL((void*)0)
34650 };
34651
34652 uint64_t he_mac_caps = tvb_get_letoh40(tvb, offset);
34653 uint8_t phy_channel_width_set = 0;
34654 proto_tree *phy_cap_tree = NULL((void*)0);
34655 unsigned he_mcs_and_nss_len = 4;
34656 proto_tree *sup_he_mcs_and_nss_tree = NULL((void*)0);
34657 proto_tree *rx_tx_he_mcs_map_80 = NULL((void*)0);
34658 proto_tree *rx_tx_he_mcs_map_160 = NULL((void*)0);
34659 proto_tree *rx_tx_he_mcs_map_80_80 = NULL((void*)0);
34660
34661 /* Is this 2.4GHz or 5GHz? */
34662 if (pinfo->pseudo_header->ieee_802_11.has_frequency) {
34663 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)
) {
34664 he_phy_channel_width_set_headers[1] = &hf_ieee80211_he_24ghz_b1_reserved;
34665 he_phy_channel_width_set_headers[2] = &hf_ieee80211_he_24ghz_b2_reserved;
34666 he_phy_channel_width_set_headers[3] = &hf_ieee80211_he_24ghz_b3_reserved;
34667 he_phy_channel_width_set_headers[5] = &hf_ieee80211_he_24ghz_b5_reserved;
34668 } else {
34669 he_phy_channel_width_set_headers[0] = &hf_ieee80211_he_5ghz_b0_reserved;
34670 he_phy_channel_width_set_headers[4] = &hf_ieee80211_he_5ghz_b4_reserved;
34671 }
34672 }
34673
34674 /* Change some header fields depending on HE_HTC_HE_SUPPORT and FRAGMENTATION */
34675 if (!(he_mac_caps & HE_HTC_HE_SUPPORT0x00000001)) {
34676 he_mac_headers[8] = &hf_ieee80211_he_reserved_bits_15_16;
34677 he_mac_headers[10] = &hf_ieee80211_he_reserved_bit_18;
34678 he_mac_headers[11] = &hf_ieee80211_he_reserved_bit_19;
34679 he_mac_headers[17] = &hf_ieee80211_he_reserved_bit_25;
34680 he_mac_headers[25] = &hf_ieee80211_he_reserved_bit_34;
34681 }
34682 if (!(he_mac_caps & HE_DYNAMIC_FRAGMENTATION_SUPPORT0x00000018)) {
34683 he_mac_headers[4] = &hf_ieee80211_he_reserved_bits_5_7;
34684 he_mac_headers[5] = &hf_ieee80211_he_reserved_bits_8_9;
34685 he_mac_headers[20] = &hf_ieee80211_he_reserved_bit_29;
34686 }
34687
34688 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_mac_capabilities,
34689 ett_he_mac_capabilities, he_mac_headers,
34690 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34691 offset += 6;
34692
34693 /* Get and isolate the phy channel width set */
34694 phy_channel_width_set = tvb_get_uint8(tvb, offset) >> 1;
34695 /* Save this info so we can refer to it later. It might need to be global */
34696 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, HE_CHANNEL_WIDTH_KEY,
34697 GINT_TO_POINTER(phy_channel_width_set | (1<<31))((gpointer) (glong) (phy_channel_width_set | (1<<31))));
34698
34699 phy_cap_tree = proto_tree_add_subtree(tree, tvb, offset, 11, ett_he_phy_capabilities,
34700 NULL((void*)0),
34701 "HE PHY Capabilities Information");
34702
34703 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34704 hf_ieee80211_he_phy_reserved_b0, ett_he_phy_cap_first_byte,
34705 he_phy_first_byte_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
34706 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34707 hf_ieee80211_he_phy_chan_width_set, ett_he_phy_cap_chan_width_set,
34708 he_phy_channel_width_set_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
34709 offset++;
34710 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34711 hf_ieee80211_he_phy_b8_to_b23, ett_he_phy_cap_b8_to_b23,
34712 he_phy_b8_to_b23_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34713 offset += 2;
34714 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34715 hf_ieee80211_he_phy_b24_to_b39, ett_he_phy_cap_b24_to_b39,
34716 he_phy_b24_to_b39_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34717 offset += 2;
34718 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34719 hf_ieee80211_he_phy_b40_to_b55, ett_he_phy_cap_b40_to_b55,
34720 he_phy_b40_to_b55_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34721 offset += 2;
34722 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34723 hf_ieee80211_he_phy_b56_to_b71, ett_he_phy_cap_b56_to_b71,
34724 he_phy_b56_to_b71_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34725 offset += 2;
34726 proto_tree_add_bitmask_with_flags(phy_cap_tree, tvb, offset,
34727 hf_ieee80211_he_phy_b72_to_b87, ett_he_phy_cap_b72_to_b87,
34728 he_phy_b72_to_b87_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34729 offset += 2;
34730
34731 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34732 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34733 "Insufficient bytes for Phy Capabilities "
34734 "Rx and Tx Maps 80MHz!");
34735 return;
34736 }
34737
34738 /* Need the length first */
34739 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B20x04)
34740 he_mcs_and_nss_len += 4;
34741
34742 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B30x08)
34743 he_mcs_and_nss_len += 4;
34744
34745 sup_he_mcs_and_nss_tree = proto_tree_add_subtree(tree, tvb, offset,
34746 he_mcs_and_nss_len, ett_he_mcs_and_nss_set, NULL((void*)0),
34747 "Supported HE-MCS and NSS Set");
34748 rx_tx_he_mcs_map_80 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree, tvb,
34749 offset, 4, ett_he_rx_tx_he_mcs_map_lte_80, NULL((void*)0),
34750 "Rx and Tx MCS Maps <= 80 MHz");
34751 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80, tvb, offset,
34752 hf_ieee80211_he_rx_he_mcs_map_lte_80,
34753 ett_he_rx_mcs_map_lte_80, he_mcs_map_80_rx_headers,
34754 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34755 offset += 2;
34756
34757 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34758 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34759 "Insufficient bytes for Phy Capabilities "
34760 "Tx Maps 80MHz!");
34761 return;
34762 }
34763
34764 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80, tvb, offset,
34765 hf_ieee80211_he_tx_he_mcs_map_lte_80,
34766 ett_he_tx_mcs_map_lte_80, he_mcs_map_80_tx_headers,
34767 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34768 offset += 2;
34769
34770 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B20x04) {
34771 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34772 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34773 "Insufficient bytes for Phy Capabilities "
34774 "Rx and Tx MCS Maps 160MHz!");
34775 return;
34776 }
34777 rx_tx_he_mcs_map_160 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree,
34778 tvb, offset, 4, ett_he_rx_tx_he_mcs_map_160, NULL((void*)0),
34779 "Rx and Tx MCS Maps 160 MHz");
34780 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_160, tvb, offset,
34781 hf_ieee80211_he_rx_he_mcs_map_160,
34782 ett_he_rx_mcs_map_160, he_mcs_map_160_rx_headers,
34783 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34784 offset += 2;
34785
34786 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34787 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34788 "Insufficient bytes for Phy Capabilities "
34789 "Tx MCS Maps 160MHz!");
34790 return;
34791 }
34792
34793 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_160, tvb, offset,
34794 hf_ieee80211_he_tx_he_mcs_map_160,
34795 ett_he_tx_mcs_map_160, he_mcs_map_160_tx_headers,
34796 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34797 offset += 2;
34798 }
34799
34800 if (phy_channel_width_set & HE_CHANNEL_WIDTH_SET_B30x08) {
34801 if (tvb_reported_length_remaining(tvb, offset) < 2) {
34802 expert_add_info_format(pinfo, phy_cap_tree, &ei_ieee80211_tag_length,
34803 "Insufficient bytes for Phy Capabilities "
34804 "Rx and Tx MCS Maps 80+80 MHz!");
34805 return;
34806 }
34807
34808 rx_tx_he_mcs_map_80_80 = proto_tree_add_subtree(sup_he_mcs_and_nss_tree,
34809 tvb, offset, 4, ett_he_rx_tx_he_mcs_map_80_80, NULL((void*)0),
34810 "Rx and Tx MCS Maps 80+80 MHz");
34811 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80_80, tvb, offset,
34812 hf_ieee80211_he_rx_he_mcs_map_80_80,
34813 ett_he_rx_mcs_map_80_80, he_mcs_map_80p80_rx_headers,
34814 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34815 offset += 2;
34816 proto_tree_add_bitmask_with_flags(rx_tx_he_mcs_map_80_80, tvb, offset,
34817 hf_ieee80211_he_tx_he_mcs_map_80_80,
34818 ett_he_tx_mcs_map_80_80, he_mcs_map_80p80_tx_headers,
34819 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34820 offset += 2;
34821 }
34822
34823 if (offset < len) {
34824 uint8_t ppe_thresholds_field = tvb_get_uint8(tvb, offset);
34825 uint8_t nss_count = ppe_thresholds_field & 0x07, nss_index = 0;
34826 uint8_t ru_index_bitmask = (ppe_thresholds_field >> 3) & 0x0F;
34827 proto_tree *ppe_tree = NULL((void*)0);
34828 int i = 0;
34829 int bit_offset = 7; /* How many bits we are into the bytes */
34830
34831 ppe_tree = proto_tree_add_subtree(tree, tvb, offset, len - offset + 1,
34832 ett_he_ppe_threshold, NULL((void*)0),
34833 "PPE Thresholds");
34834 proto_tree_add_item(ppe_tree, hf_ieee80211_he_ppe_thresholds_nss, tvb, offset,
34835 1, ENC_NA0x00000000);
34836 proto_tree_add_item(ppe_tree, hf_ieee80211_he_ppe_thresholds_ru_index_bitmask, tvb,
34837 offset, 1, ENC_NA0x00000000);
34838
34839 /*
34840 * Now, for each of the nss values, add a sub-tree with its thresholds.
34841 * The actual count is one more than the number in the first three bits.
34842 */
34843 while (nss_index < nss_count + 1) {
34844 int start_offset = 0;
34845 proto_tree *nss_tree = NULL((void*)0);
34846 proto_item *nssti = NULL((void*)0);
34847 uint8_t l_ru_bitmask = ru_index_bitmask;
34848
34849 nss_tree = proto_tree_add_subtree_format(ppe_tree, tvb, offset, -1,
34850 ett_he_ppe_nss, &nssti, "NSS %d", nss_index);
34851 start_offset = offset;
34852
34853 for (i = 0; i < 4; i++) {
34854 if (l_ru_bitmask & 0x01) {
34855 int bits_avail = 8 - bit_offset, bits_needed = 6 - bits_avail;
34856 uint8_t the_bits = 0;
34857 int ru_start_offset = offset;
34858 proto_tree *ru_alloc_tree = NULL((void*)0);
34859 proto_item *rualti = NULL((void*)0);
34860
34861 ru_alloc_tree = proto_tree_add_subtree_format(nss_tree, tvb, offset,
34862 -1, ett_he_ppe_ru_alloc, &rualti,
34863 "RU allocation: %s",
34864 val_to_str_const(i, ru_alloc_vals, "Unk"));
34865
34866 /*
34867 * Assemble the bits we require ... we need 6, or 2x3
34868 */
34869 if (bits_avail >= 6) { /* We can use the current byte */
34870 the_bits = (tvb_get_uint8(tvb, offset) >> bit_offset) & 0x3F;
34871 } else { /* We need two adjacent bytes */
34872 the_bits = (tvb_get_uint8(tvb, offset) >> bit_offset);
34873 offset++;
34874 the_bits = the_bits |
34875 ((tvb_get_uint8(tvb, offset) &
34876 ((1 << bits_needed) - 1)) << bits_avail);
34877 }
34878 /*
34879 * Now we have two three bit fields, use them.
34880 */
34881 proto_tree_add_uint(ru_alloc_tree, hf_ieee80211_he_ppe_ppet16, tvb, ru_start_offset,
34882 offset - ru_start_offset + 1, the_bits & 0x07);
34883 proto_tree_add_uint(ru_alloc_tree, hf_ieee80211_he_ppe_ppet8, tvb, ru_start_offset,
34884 offset - ru_start_offset + 1, the_bits >> 3);
34885
34886 bit_offset = (bit_offset + 6) % 8;
34887 proto_item_set_len(rualti, offset - ru_start_offset + 1);
34888 }
34889 l_ru_bitmask = l_ru_bitmask >> 1;
34890 }
34891
34892
34893 proto_item_set_len(nssti, offset - start_offset);
34894 nss_index++;
34895 }
34896 }
34897
34898 /* Add an Expert Info about extra bytes ... */
34899
34900}
34901
34902static int * const he_operation_headers[] = {
34903 &hf_ieee80211_he_operation_default_pe_duration,
34904 &hf_ieee80211_he_operation_twt_required,
34905 &hf_ieee80211_he_operation_txop_duration_rts_threshold,
34906 &hf_ieee80211_he_operation_vht_operation_information_present,
34907 &hf_ieee80211_he_operation_co_hosted_bss,
34908 &hf_ieee80211_he_operation_er_su_disable,
34909 &hf_ieee80211_he_operation_6ghz_operation_information_present,
34910 &hf_ieee80211_he_operation_reserved_b16_b23,
34911 NULL((void*)0)
34912};
34913
34914static int * const he_bss_color_info_headers[] = {
34915 &hf_ieee80211_he_bss_color_info_bss_color,
34916 &hf_ieee80211_he_bss_color_partial_bss_color,
34917 &hf_ieee80211_he_bss_color_bss_color_disabled,
34918 NULL((void*)0)
34919};
34920
34921static int * const he_operation_6ghz_control[] = {
34922 &hf_ieee80211_he_operation_6ghz_control_channel_width,
34923 &hf_ieee80211_he_operation_6ghz_control_duplicate_beacon,
34924 &hf_ieee80211_he_operation_6ghz_control_regulatory_info,
34925 &hf_ieee80211_he_operation_6ghz_control_reserved,
34926 NULL((void*)0)
34927};
34928
34929static const value_string he_mcs_map_vals[] = {
34930 { 0, "Support for HE-MCS 0-7" },
34931 { 1, "Support for HE-MCS 0-9" },
34932 { 2, "Support for HE-MCS 0-11" },
34933 { 3, "Not supported for HE PPDUs" },
34934 { 0, NULL((void*)0) }
34935};
34936
34937static int * const he_basic_he_mcs_header[] = {
34938 &hf_ieee80211_he_oper_max_he_mcs_for_1_ss,
34939 &hf_ieee80211_he_oper_max_he_mcs_for_2_ss,
34940 &hf_ieee80211_he_oper_max_he_mcs_for_3_ss,
34941 &hf_ieee80211_he_oper_max_he_mcs_for_4_ss,
34942 &hf_ieee80211_he_oper_max_he_mcs_for_5_ss,
34943 &hf_ieee80211_he_oper_max_he_mcs_for_6_ss,
34944 &hf_ieee80211_he_oper_max_he_mcs_for_7_ss,
34945 &hf_ieee80211_he_oper_max_he_mcs_for_8_ss,
34946 NULL((void*)0)
34947};
34948
34949#define VHT_OPERATION_INFORMATION_PRESENT0x004000 0x004000
34950#define CO_HOSTED_BSS0x008000 0x008000
34951#define SIXGHZ_OPERATION_INFORMATION_PRESENT0x020000 0x020000
34952
34953static const value_string channel_width_vals[] = {
34954 { 0, "20 MHz or 40 MHz BSS Bandwidth" },
34955 { 1, "80 MHz, 160 MHz or 80+80 MHz BSS Bandwidth" },
34956 { 2, "160 MHz BSS Bandwidth (deprecated)" },
34957 { 3, "Non-contiguous 80+80 MHz BSS Bandwidth (deprecated)" },
34958 { 0, NULL((void*)0) }
34959};
34960
34961static void
34962dissect_he_operation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
34963 int offset, int len _U___attribute__((unused)))
34964{
34965 uint32_t op_params = tvb_get_letoh24(tvb, offset);
34966
34967 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34968 hf_ieee80211_he_operation_parameter, ett_he_operation_params,
34969 he_operation_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34970 offset += 3;
34971
34972 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34973 hf_ieee80211_he_bss_color_information, ett_he_bss_color_information,
34974 he_bss_color_info_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34975 offset += 1;
34976
34977 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
34978 hf_ieee80211_he_operation_basic_mcs, ett_he_oper_basic_mcs,
34979 he_basic_he_mcs_header, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
34980 offset += 2;
34981
34982 if (op_params & VHT_OPERATION_INFORMATION_PRESENT0x004000) {
34983 proto_tree *vht_op_info = NULL((void*)0);
34984
34985 vht_op_info = proto_tree_add_subtree(tree, tvb, offset, 3,
34986 ett_he_operation_vht_op_info, NULL((void*)0),
34987 "VHT Operation Information");
34988 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_width, tvb,
34989 offset, 1, ENC_NA0x00000000);
34990 offset++;
34991
34992 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_center_freq_0,
34993 tvb, offset, 1, ENC_NA0x00000000);
34994 offset++;
34995
34996 proto_tree_add_item(vht_op_info, hf_ieee80211_he_operation_channel_center_freq_1,
34997 tvb, offset, 1, ENC_NA0x00000000);
34998 offset++;
34999 }
35000
35001 if (op_params & CO_HOSTED_BSS0x008000) {
35002 proto_tree_add_item(tree, hf_ieee80211_he_operation_max_co_hosted_bssid_indicator,
35003 tvb, offset, 1, ENC_NA0x00000000);
35004 offset++;
35005 }
35006
35007 if (op_params & SIXGHZ_OPERATION_INFORMATION_PRESENT0x020000) {
35008 proto_tree *sixghz_tree = NULL((void*)0);
35009
35010 sixghz_tree = proto_tree_add_subtree(tree, tvb, offset, 5,
35011 ett_he_operation_6ghz, NULL((void*)0),
35012 "6 GHz Operation Information");
35013 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_primary_channel, tvb,
35014 offset, 1, ENC_NA0x00000000);
35015 offset++;
35016
35017 proto_tree_add_bitmask_with_flags(sixghz_tree, tvb, offset,
35018 hf_ieee80211_he_operation_6ghz_control, ett_he_operation_6ghz_control,
35019 he_operation_6ghz_control, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35020 offset++;
35021
35022 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_channel_center_freq_0,
35023 tvb, offset, 1, ENC_NA0x00000000);
35024 offset++;
35025
35026 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_channel_center_freq_1,
35027 tvb, offset, 1, ENC_NA0x00000000);
35028 offset++;
35029
35030 proto_tree_add_item(sixghz_tree, hf_ieee80211_he_operation_6ghz_minimum_rate,
35031 tvb, offset, 1, ENC_NA0x00000000);
35032 offset++;
35033 }
35034}
35035
35036static int * const uora_headers[] = {
35037 &hf_ieee80211_he_uora_eocwmin,
35038 &hf_ieee80211_he_uora_owcwmax,
35039 &hf_ieee80211_he_uora_reserved,
35040 NULL((void*)0)
35041};
35042
35043static void
35044dissect_uora_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
35045 int offset)
35046{
35047 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35048 hf_ieee80211_he_uora_field, ett_he_uora_tree, uora_headers,
35049 ENC_NA0x00000000, BMT_NO_APPEND0x01);
35050 offset++;
35051}
35052
35053static int * const muac_aci_aifsn_headers[] = {
35054 &hf_ieee80211_he_muac_aifsn,
35055 &hf_ieee80211_he_muac_acm,
35056 &hf_ieee80211_he_muac_aci,
35057 &hf_ieee80211_he_muac_reserved,
35058 NULL((void*)0)
35059};
35060
35061static int
35062dissect_muac_param_record(tvbuff_t *tvb, proto_tree *tree, int offset)
35063{
35064 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35065 hf_ieee80211_he_muac_aci_aifsn, ett_he_aic_aifsn,
35066 muac_aci_aifsn_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
35067 offset++;
35068
35069 proto_tree_add_item(tree, hf_ieee80211_he_muac_ecwmin_ecwmax, tvb, offset, 1, ENC_NA0x00000000);
35070 offset++;
35071
35072 proto_tree_add_item(tree, hf_ieee80211_he_mu_edca_timer, tvb, offset, 1, ENC_NA0x00000000);
35073 offset++;
35074
35075 return offset;
35076}
35077
35078static int
35079dissect_mu_edca_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
35080 int offset, int len _U___attribute__((unused)))
35081{
35082 proto_tree *param_tree = NULL((void*)0);
35083
35084 /* Is this from an AP or an STA? */
35085 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_qos_info_ap,
35086 ett_ff_qos_info, ieee80211_ff_qos_info_ap_fields,
35087 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35088 offset++;
35089
35090 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
35091 NULL((void*)0), "MUAC_BE Parameter Record");
35092 offset = dissect_muac_param_record(tvb, param_tree, offset);
35093
35094 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
35095 NULL((void*)0), "MUAC_BK Parameter Record");
35096 offset = dissect_muac_param_record(tvb, param_tree, offset);
35097
35098 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
35099 NULL((void*)0), "MUAC_VI Parameter Record");
35100 offset = dissect_muac_param_record(tvb, param_tree, offset);
35101
35102 param_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_he_mu_edca_param,
35103 NULL((void*)0), "MUAC_VO Parameter Record");
35104 offset = dissect_muac_param_record(tvb, param_tree, offset);
35105
35106 return offset;
35107}
35108
35109#define SRP_DISALLOWED0x01 0x01
35110#define NON_SRG_OBSS_PD_SR_DISALLOWED0x02 0x02
35111#define NON_SRG_OFFSET_PRESENT0x04 0x04
35112#define SRG_INFORMATION_PRESENT0x08 0x08
35113#define HESIGA_SPATIAL_REUSE_VAL15_ALLOWED0x10 0x10
35114
35115static int * const sr_control_field_headers[] = {
35116 &hf_ieee80211_he_srp_disallowed,
35117 &hf_ieee80211_he_non_srg_obss_pd_sr_disallowed,
35118 &hf_ieee80211_he_non_srg_offset_present,
35119 &hf_ieee80211_he_srg_information_present,
35120 &hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed,
35121 &hf_ieee80211_he_sr_control_reserved,
35122 NULL((void*)0)
35123};
35124
35125static int
35126dissect_spatial_reuse_parameter_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35127 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35128{
35129 uint8_t sr_control = tvb_get_uint8(tvb, offset);
35130
35131 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_spatial_reuse_sr_control,
35132 ett_he_spatial_reuse_control,
35133 sr_control_field_headers,
35134 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35135 offset++;
35136
35137 if (sr_control & NON_SRG_OFFSET_PRESENT0x04) {
35138 proto_tree_add_item(tree, hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset,
35139 tvb, offset, 1, ENC_NA0x00000000);
35140 offset++;
35141 }
35142
35143 if (sr_control & SRG_INFORMATION_PRESENT0x08) {
35144 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_obss_pd_min_offset, tvb,
35145 offset, 1, ENC_NA0x00000000);
35146 offset++;
35147 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_obss_pd_max_offset, tvb,
35148 offset, 1, ENC_NA0x00000000);
35149 offset++;
35150 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_bss_color_bitmap, tvb,
35151 offset, 8, ENC_NA0x00000000);
35152 offset += 8;
35153 proto_tree_add_item(tree, hf_ieee80211_he_spatial_srg_partial_bssid_bitmap,
35154 tvb, offset, 8, ENC_NA0x00000000);
35155 offset += 8;
35156 }
35157
35158 return offset;
35159}
35160
35161static void
35162dissect_ndp_feedback_report_set(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35163 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35164{
35165 proto_tree_add_item(tree, hf_ieee80211_he_resource_request_buffer_thresh, tvb, offset,
35166 1, ENC_NA0x00000000);
35167}
35168
35169static int * const bss_new_color_headers[] = {
35170 &hf_ieee80211_he_new_bss_color_info_color,
35171 &hf_ieee80211_he_new_bss_color_info_reserved,
35172 NULL((void*)0)
35173};
35174
35175static void
35176dissect_bss_color_change(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35177 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35178{
35179 proto_tree_add_item(tree, hf_ieee80211_he_bss_color_change_switch_countdown, tvb, offset,
35180 1, ENC_NA0x00000000);
35181 offset++;
35182
35183 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35184 hf_ieee80211_he_bss_color_change_new_color_info,
35185 ett_he_bss_new_color_info, bss_new_color_headers,
35186 ENC_NA0x00000000, BMT_NO_APPEND0x01);
35187}
35188
35189static int * const ess_info_field_headers[] = {
35190 &hf_ieee80211_he_ess_report_planned_ess,
35191 &hf_ieee80211_he_ess_report_edge_of_ess,
35192 NULL((void*)0)
35193};
35194
35195static void
35196dissect_ess_report(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35197 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35198{
35199 uint8_t bss_trans_thresh = tvb_get_uint8(tvb, offset) >> 2;
35200
35201
35202 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_he_ess_report_info_field,
35203 ett_he_ess_report_info_field,
35204 ess_info_field_headers,
35205 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35206 if (bss_trans_thresh == 63)
35207 proto_tree_add_int_format(tree, hf_ieee80211_he_ess_report_recommend_transition_thresh,
35208 tvb, offset, 1, bss_trans_thresh,
35209 "Recommended BSS Transition Threshold: %d (No recommendation)",
35210 bss_trans_thresh);
35211 else
35212 proto_tree_add_int_format(tree, hf_ieee80211_he_ess_report_recommend_transition_thresh, tvb,
35213 offset, 1, bss_trans_thresh,
35214 "Recommended BSS Transition Threshold: %d (%ddBm)",
35215 bss_trans_thresh, -100 + bss_trans_thresh);
35216}
35217
35218static void
35219dissect_ops(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35220 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35221{
35222 proto_tree_add_item(tree, hf_ieee80211_he_ops_duration, tvb, offset, 1,
35223 ENC_NA0x00000000);
35224}
35225
35226static void
35227dissect_max_channel_switch_time(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35228 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35229{
35230 proto_tree_add_item(tree, hf_ieee80211_max_channel_switch_time, tvb, offset,
35231 3, ENC_LITTLE_ENDIAN0x80000000);
35232}
35233
35234static void
35235dissect_oci(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35236 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35237{
35238 proto_tree_add_item(tree, hf_ieee80211_oci_operating_class, tvb, offset,
35239 1, ENC_NA0x00000000);
35240 offset += 1;
35241
35242 proto_tree_add_item(tree, hf_ieee80211_oci_primary_channel_number, tvb,
35243 offset, 1, ENC_NA0x00000000);
35244 offset += 1;
35245
35246 proto_tree_add_item(tree, hf_ieee80211_oci_frequency_segment_1, tvb,
35247 offset, 1, ENC_NA0x00000000);
35248 offset += 1;
35249
35250 /* Does it have the OCT fields? */
35251 if (len > 3) {
35252 if (len != 6) {
35253 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
35254 "OCI element with OCT field length must be 6 bytes");
35255 }
35256
35257 proto_tree_add_item(tree, hf_ieee80211_oci_oct_operating_class, tvb,
35258 offset, 1, ENC_NA0x00000000);
35259 offset += 1;
35260
35261 proto_tree_add_item(tree, hf_ieee80211_oci_oct_primary_channel_number, tvb,
35262 offset, 1, ENC_NA0x00000000);
35263 offset += 1;
35264
35265 proto_tree_add_item(tree, hf_ieee80211_oci_oct_frequency_segment_1, tvb,
35266 offset, 1, ENC_NA0x00000000);
35267 }
35268}
35269
35270static void
35271dissect_multiple_bssid_configuration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35272 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35273{
35274
35275 proto_tree_add_item(tree, hf_ieee80211_multiple_bssid_configuration_bssid_count, tvb, offset, 1, ENC_NA0x00000000);
35276 offset += 1;
35277
35278 proto_tree_add_item(tree, hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity, tvb, offset, 1, ENC_NA0x00000000);
35279 /*offset += 1;*/
35280
35281}
35282
35283static void
35284dissect_non_inheritance(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35285 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35286{
35287 proto_tree *element_id_list = NULL((void*)0);
35288 proto_tree *element_id_ext_list = NULL((void*)0);
35289
35290 uint8_t element_id_list_length = tvb_get_uint8(tvb, offset);
35291
35292 element_id_list = proto_tree_add_subtree(tree, tvb, offset, element_id_list_length + 1,
35293 ett_non_inheritance_element_id_list,
35294 NULL((void*)0), "Element ID List");
35295
35296 proto_tree_add_item(element_id_list, hf_ieee80211_non_inheritance_element_id_list_length,
35297 tvb, offset, 1, ENC_NA0x00000000);
35298 offset += 1;
35299
35300 while (element_id_list_length > 0) {
35301 proto_tree_add_item(element_id_list, hf_ieee80211_non_inheritance_element_id_list_element_id,
35302 tvb, offset, 1, ENC_NA0x00000000);
35303 element_id_list_length--;
35304 offset++;
35305 }
35306
35307 uint8_t element_id_ext_list_length = tvb_get_uint8(tvb, offset);
35308
35309 element_id_ext_list = proto_tree_add_subtree(tree, tvb, offset, element_id_ext_list_length + 1,
35310 ett_non_inheritance_element_id_ext_list,
35311 NULL((void*)0), "Element ID Extension List");
35312
35313 proto_tree_add_item(element_id_ext_list, hf_ieee80211_non_inheritance_element_id_ext_list_length,
35314 tvb, offset, 1, ENC_NA0x00000000);
35315 offset += 1;
35316
35317 while (element_id_ext_list_length > 0) {
35318 proto_tree_add_item(element_id_ext_list, hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext,
35319 tvb, offset, 1, ENC_NA0x00000000);
35320 element_id_ext_list_length--;
35321 offset++;
35322 }
35323}
35324
35325static void
35326dissect_known_bssid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35327 proto_tree *tree, int offset, int len)
35328{
35329
35330 proto_tree_add_item(tree, hf_ieee80211_known_bssid_bitmap, tvb, offset, len, ENC_NA0x00000000);
35331
35332}
35333
35334static void
35335dissect_short_ssid(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35336 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35337{
35338
35339 while(len > 0){
35340
35341 proto_tree_add_item(tree, hf_ieee80211_short_ssid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35342 offset += 4;
35343 len -=4;
35344 }
35345}
35346
35347static int
35348dissect_password_identifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35349 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35350{
35351 proto_tree_add_item(tree, hf_ieee80211_sae_password_identifier, tvb, offset,
35352 len, ENC_ASCII0x00000000);
35353 offset += len;
35354
35355 return offset;
35356}
35357
35358#define SCS_ADD0 0
35359#define SCS_REMOVE1 1
35360#define SCS_CHANGE2 2
35361
35362static const range_string scs_request_type_rvals[] = {
35363 { SCS_ADD0, SCS_ADD0, "Add" },
35364 { SCS_REMOVE1, SCS_REMOVE1, "Remove" },
35365 { SCS_CHANGE2, SCS_CHANGE2, "Change" },
35366 { 3, 255, "Reserved" },
35367 { 0, 0, NULL((void*)0) }
35368};
35369
35370static int * const user_prio_bitmap_headers[] = {
35371 &hf_ieee80211_user_prio_bitmap_bit0,
35372 &hf_ieee80211_user_prio_bitmap_bit1,
35373 &hf_ieee80211_user_prio_bitmap_bit2,
35374 &hf_ieee80211_user_prio_bitmap_bit3,
35375 &hf_ieee80211_user_prio_bitmap_bit4,
35376 &hf_ieee80211_user_prio_bitmap_bit5,
35377 &hf_ieee80211_user_prio_bitmap_bit6,
35378 &hf_ieee80211_user_prio_bitmap_bit7,
35379 NULL((void*)0)
35380};
35381
35382static void
35383dissect_mscs_descriptor_element(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35384 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35385{
35386 uint8_t request_type = tvb_get_uint8(tvb, offset);
35387
35388 proto_tree_add_item(tree, hf_ieee80211_mscs_descriptor_type, tvb, offset, 1,
35389 ENC_NA0x00000000);
35390 offset += 1;
35391
35392 if (request_type == SCS_REMOVE1) {
35393 proto_tree_add_item(tree, hf_ieee80211_mscs_user_prio_control_reserved,
35394 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35395 offset += 2;
35396 } else {
35397 proto_tree *user_prio_tree = NULL((void*)0);
35398
35399 user_prio_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
35400 ett_mscs_user_prio, NULL((void*)0),
35401 "User Priority Control");
35402 proto_tree_add_bitmask_with_flags(user_prio_tree, tvb, offset,
35403 hf_ieee80211_user_prio_bitmap,
35404 ett_ieee80211_user_prio_bitmap,
35405 user_prio_bitmap_headers,
35406 ENC_NA0x00000000, BMT_NO_APPEND0x01);
35407 offset += 1;
35408
35409 proto_tree_add_item(user_prio_tree, hf_ieee80211_user_prio_limit, tvb,
35410 offset, 1, ENC_NA0x00000000);
35411 proto_tree_add_item(user_prio_tree, hf_ieee80211_user_prio_reserved, tvb,
35412 offset, 1, ENC_NA0x00000000);
35413 offset += 1;
35414 }
35415
35416 if (request_type == SCS_REMOVE1) {
35417 proto_tree_add_item(tree, hf_ieee80211_stream_timeout_reserved, tvb,
35418 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35419 } else {
35420 proto_tree_add_item(tree, hf_ieee80211_stream_timeout, tvb,
35421 offset, 4, ENC_LITTLE_ENDIAN0x80000000);
35422 }
35423 offset += 4;
35424
35425 /*
35426 * If there is nothing more in the TVB we are done.
35427 */
35428 if (tvb_reported_length_remaining(tvb, offset) == 0)
35429 return;
35430
35431 /*
35432 * There may be tclas elements following and optional MSCS elements.
35433 * A TCLAS Mask element will start with 0xFF <len> 0x89
35434 */
35435 while (tvb_reported_length_remaining(tvb, offset) &&
35436 tvb_get_uint8(tvb, offset) == 0xFF) {
35437 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35438 }
35439
35440 /*
35441 * Any optional MSCS elements come next. Should be 1 byte ID, 1 byte len
35442 * and len bytes.
35443 */
35444 if (offset < len) {
35445 uint8_t sub_elt_len;
35446
35447 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_id, tvb, offset, 1,
35448 ENC_NA0x00000000);
35449 offset += 1;
35450
35451 sub_elt_len = tvb_get_uint8(tvb, offset);
35452 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_len, tvb, offset, 1,
35453 ENC_NA0x00000000);
35454 offset += 1;
35455
35456 proto_tree_add_item(tree, hf_ieee80211_mscs_subelement_data, tvb, offset,
35457 sub_elt_len, ENC_NA0x00000000);
35458 }
35459}
35460
35461static void
35462dissect_tclas_mask_element(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35463 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35464{
35465 ieee80211_frame_classifier(tvb, pinfo, tree, offset, len);
35466}
35467
35468static int * const intra_access_prio_headers[] = {
35469 &hf_ieee80211_intra_access_prio_user_prio,
35470 &hf_ieee80211_intra_access_prio_alt_queue,
35471 &hf_ieee80211_intra_access_prio_drop_elig,
35472 &hf_ieee80211_intra_access_prio_reserved,
35473 NULL((void*)0)
35474};
35475
35476static int
35477ieee80211_tag_intra_access_cat_prio(tvbuff_t *tvb, packet_info *pinfo,
35478 proto_tree *tree, void *data)
35479{
35480 int tag_len = tvb_reported_length(tvb);
35481 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t *)data;
35482 int offset = 0;
35483
35484 if (tag_len != 1) {
35485 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
35486 return tvb_captured_length(tvb);
35487 }
35488
35489 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35490 hf_ieee80211_intra_access_prio,
35491 ett_ieee80211_intra_access_prio,
35492 intra_access_prio_headers,
35493 ENC_NA0x00000000, BMT_NO_APPEND0x01);
35494
35495 return tvb_captured_length(tvb);
35496}
35497
35498static int
35499ieee80211_tag_scs_descriptor(tvbuff_t *tvb, packet_info *pinfo,
35500 proto_tree *tree, void *data _U___attribute__((unused)))
35501{
35502 int offset = 0;
35503 uint8_t request_type = tvb_get_uint8(tvb, offset + 1);
35504
35505 proto_tree_add_item(tree, hf_ieee80211_scs_descriptor_scsid, tvb, offset, 1,
35506 ENC_NA0x00000000);
35507 offset += 1;
35508
35509 proto_tree_add_item(tree, hf_ieee80211_scs_descriptor_type, tvb, offset, 1,
35510 ENC_NA0x00000000);
35511 offset += 1;
35512
35513 if (request_type == SCS_ADD0 || request_type == SCS_CHANGE2) {
35514 /* There will only be one intra access priority */
35515 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35516
35517 /* There will be at least one tclass element ... */
35518 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35519 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
35520 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35521 }
35522 /* There could be a TCLAS PROCESS element ... */
35523 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35524 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
35525 add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35526 }
35527
35528 /* There could be one QoS Char element ... */
35529 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
35530 tvb_get_uint8(tvb, offset) == TAG_ELEMENT_ID_EXTENSION255 &&
35531 tvb_get_uint8(tvb, offset+2) == ETAG_QOS_CHARACTERISTICS113) {
35532 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
35533 }
35534
35535 /* There can be zero or one TSPEC elements */
35536 if (tvb_captured_length_remaining(tvb, offset) > 0) {
35537 static const uint8_t ids[] = { TAG_TSPEC13 };
35538 if(add_tagged_field(pinfo, tree, tvb, offset, 0, ids, G_N_ELEMENTS(ids)(sizeof (ids) / sizeof ((ids)[0])), NULL((void*)0)) == 0){
35539 /* Add an expert info */
35540 }
35541 }
35542
35543 }
35544
35545 /* There could be Optional subelements here too ... */
35546
35547 return tvb_captured_length(tvb);
35548}
35549
35550/*
35551 * Just a list of finite cyclic group numbers as 16-bit uints.
35552 */
35553static void
35554dissect_rejected_groups(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35555 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35556{
35557 while (tvb_reported_length_remaining(tvb, offset)) {
35558 proto_tree_add_item(tree, hf_ieee80211_rejected_groups_group, tvb, offset,
35559 2, ENC_LITTLE_ENDIAN0x80000000);
35560 offset += 2;
35561 }
35562}
35563
35564/*
35565 * Just a string of bytes
35566 */
35567static void
35568dissect_anti_clogging_token(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35569 proto_tree *tree, int offset, int len)
35570{
35571 proto_tree_add_item(tree, hf_ieee80211_sae_anti_clogging_token, tvb, offset,
35572 len, ENC_NA0x00000000);
35573}
35574
35575/*
35576 * There will be from 1 to 4 24-bit fields in the order of AC=BK, AC=BE,
35577 * AC=VI and AC=VO.
35578 */
35579
35580static int * const esp_headers[] = {
35581 &hf_ieee80211_esp_access_category,
35582 &hf_ieee80211_esp_reserved,
35583 &hf_ieee80211_esp_data_format,
35584 &hf_ieee80211_esp_ba_windows_size,
35585 &hf_ieee80211_esp_est_air_time_frac,
35586 &hf_ieee80211_esp_data_ppdu_duration_target,
35587 NULL((void*)0)
35588};
35589
35590static const value_string esp_access_category_vals[] = {
35591 { 0, "AC=BK" },
35592 { 1, "AC=BE" },
35593 { 2, "AC=VI" },
35594 { 3, "AC=VO" },
35595 { 0, NULL((void*)0) }
35596};
35597
35598static const value_string esp_data_format_vals[] = {
35599 { 0, "No aggregation is expected to be performed" },
35600 { 1, "A-MSDU aggregation is expected but not A-MPDUs when type is data" },
35601 { 2, "A-MSDU aggregation is NOT expected but A-MPDUs aggregation is when type is data" },
35602 { 3, "A-MSDU aggregation is expected and A-MPDU aggregation is when type is data" },
35603 { 0, NULL((void*)0) }
35604};
35605
35606static const value_string esp_ba_window_size_vals[] = {
35607 { 0, "Block Ack not expected to be used" },
35608 { 1, "2" },
35609 { 2, "4" },
35610 { 3, "6" },
35611 { 4, "8" },
35612 { 5, "16" },
35613 { 6, "32" },
35614 { 7, "64" },
35615 { 0, NULL((void*)0) }
35616};
35617
35618static int
35619dissect_estimated_service_params(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35620 proto_tree *tree, int offset, int len)
35621{
35622 while (len > 0) {
35623 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35624 hf_ieee80211_estimated_service_params, ett_ieee80211_esp,
35625 esp_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35626 offset += 3;
35627 len -= 3;
35628 }
35629
35630 return offset;
35631}
35632
35633static int
35634dissect_future_channel_guidance(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
35635 proto_tree *tree, int offset, int len _U___attribute__((unused)))
35636{
35637 proto_tree_add_item(tree, hf_ieee80211_fcg_new_channel_number, tvb, offset,
35638 4, ENC_LITTLE_ENDIAN0x80000000);
35639 offset += 4;
35640
35641 if (len - 4 > 0) {
35642 proto_tree_add_item(tree, hf_ieee80211_fcg_extra_info, tvb, offset, len - 4,
35643 ENC_NA0x00000000);
35644 offset += len - 4;
35645 }
35646
35647 return offset;
35648}
35649
35650/* IANA, "Transform Type 4 - Diffie-Hellman Group Transform IDs" */
35651static const value_string owe_dh_parameter_group_vals[] = {
35652 { 0, "None" },
35653 { 1, "768-bit MODP Group" },
35654 { 2, "1024-bit MODP Group" },
35655 { 5, "1536-bit MODP Group" },
35656 { 14, "2048-bit MODP Group"},
35657 { 15, "3072-bit MODP Group"},
35658 { 16, "4096-bit MODP Group"},
35659 { 17, "6144-bit MODP Group"},
35660 { 18, "8192-bit MODP Group"},
35661 { 19, "256-bit random ECP group"},
35662 { 20, "384-bit random ECP group"},
35663 { 21, "521-bit random ECP group"},
35664 { 22, "1024-bit MODP Group with 160-bit Prime Order Subgroup"},
35665 { 23, "2048-bit MODP Group with 224-bit Prime Order Subgroup"},
35666 { 24, "2048-bit MODP Group with 256-bit Prime Order Subgroup"},
35667 { 25, "192-bit Random ECP Group"},
35668 { 26, "224-bit Random ECP Group"},
35669 { 27, "brainpoolP224r1"},
35670 { 28, "brainpoolP256r1"},
35671 { 29, "brainpoolP384r1"},
35672 { 30, "brainpoolP512r1"},
35673 { 31, "Curve25519"},
35674 { 32, "Curve448"},
35675 { 0, NULL((void*)0) }
35676};
35677
35678static int
35679dissect_owe_dh_parameter(tvbuff_t *tvb, packet_info *pinfo,
35680 proto_tree *tree, int offset, int len _U___attribute__((unused)), association_sanity_check_t* sanity_check)
35681{
35682 if (len < 2) {
35683 expert_add_info_format(pinfo, tree, &ei_ieee80211_tag_length,
35684 "OWE: Diffie-Hellman Parameter must be at least 2 "
35685 "octets long");
35686 return offset + len;
35687 }
35688
35689 ieee80211_packet_data_t *packet_data = get_or_create_packet_data(pinfo);
35690 packet_data->owe_group = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35691 if (sanity_check != NULL((void*)0)) {
35692 sanity_check->owe_group = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35693 }
35694
35695 proto_tree_add_item(tree, hf_ieee80211_owe_dh_parameter_group, tvb, offset,
35696 2, ENC_LITTLE_ENDIAN0x80000000);
35697 proto_tree_add_item(tree, hf_ieee80211_owe_dh_parameter_public_key, tvb, offset + 2,
35698 len - 2, ENC_NA0x00000000);
35699 offset += len;
35700
35701 return offset;
35702}
35703
35704static int * const ieee80211_twt_ctrl_field[] = {
35705 &hf_ieee80211_tag_twt_ndp_paging_indicator,
35706 &hf_ieee80211_tag_twt_responder_pm_mode,
35707 &hf_ieee80211_tag_twt_neg_type,
35708 &hf_ieee80211_tag_twt_info_frame_disabled,
35709 &hf_ieee80211_tag_twt_wake_duration_unit,
35710 &hf_ieee80211_tag_twt_link_id_bitmap_present,
35711 &hf_ieee80211_tag_twt_aligned_twt,
35712 NULL((void*)0),
35713};
35714
35715static int * const ieee80211_twt_req_type_field[] = {
35716 &hf_ieee80211_tag_twt_req_type_req,
35717 &hf_ieee80211_tag_twt_req_type_setup_cmd,
35718 &hf_ieee80211_tag_twt_req_type_trigger,
35719 &hf_ieee80211_tag_twt_req_type_implicit,
35720 &hf_ieee80211_tag_twt_req_type_flow_type,
35721 &hf_ieee80211_tag_twt_req_type_flow_id,
35722 &hf_ieee80211_tag_twt_req_type_wake_int_exp,
35723 &hf_ieee80211_tag_twt_req_type_prot,
35724 NULL((void*)0),
35725};
35726
35727static int * const ieee80211_bcst_twt_req_type_field[] = {
35728 &hf_ieee80211_tag_twt_req_type_req,
35729 &hf_ieee80211_tag_twt_req_type_setup_cmd,
35730 &hf_ieee80211_tag_twt_req_type_trigger,
35731 &hf_ieee80211_tag_twt_req_type_last_bcst_parm_set,
35732 &hf_ieee80211_tag_twt_req_type_flow_type,
35733 &hf_ieee80211_tag_twt_req_type_bcst_twt_recom,
35734 &hf_ieee80211_tag_twt_req_type_wake_int_exp,
35735 &hf_ieee80211_tag_twt_req_type_aligned,
35736 NULL((void*)0),
35737};
35738
35739static int * const ieee80211_twt_ndp_paging_field[] = {
35740 &hf_ieee80211_tag_twt_ndp_paging_p_id,
35741 &hf_ieee80211_tag_twt_ndp_max_ndp_paging_period,
35742 &hf_ieee80211_tag_twt_ndp_partial_tsf_offset,
35743 &hf_ieee80211_tag_twt_ndp_action,
35744 &hf_ieee80211_tag_twt_ndp_min_sleep_duration,
35745 &hf_ieee80211_tag_twt_ndp_reserved,
35746 NULL((void*)0)
35747};
35748
35749static int * const ieee80211_twt_broadcast_info_field[] = {
35750 &hf_ieee80211_tag_twt_bcast_info_persistence,
35751 &hf_ieee80211_tag_twt_bcast_info_id,
35752 &hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info,
35753 &hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present,
35754 NULL((void*)0)
35755};
35756
35757static int * const ieee80211_twt_traffic_info_control_field[] = {
35758 &hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid,
35759 &hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid,
35760 &hf_ieee80211_tag_twt_traffic_info_reserved,
35761 NULL((void*)0)
35762};
35763
35764static const value_string twt_ndp_action_vals[] = {
35765 { 0, "Send a PD-Poll or uplink trigger frame" },
35766 { 1, "Wake up at the time indicated by Min Sleep Duration" },
35767 { 2, "Wake up to receive the Beacon" },
35768 { 3, "Wake up to receive the DTIM Beacon" },
35769 { 4, "Wake up at the time indicated by the sum of the Min Sleep Duration and the ASD" },
35770 { 5, "Reserved" },
35771 { 6, "Reserved" },
35772 { 7, "Reserved" },
35773 { 0, NULL((void*)0) }
35774};
35775
35776static int
35777ieee80211_tag_twt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
35778{
35779 int tag_len;
35780 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
35781 int offset = 0;
35782 proto_item *item = NULL((void*)0);
35783 bool_Bool twt_requester;
35784 uint8_t setup_command;
35785 uint8_t ctrl_field;
35786 uint16_t req_type;
35787 uint8_t neg_type;
35788 bool_Bool last_bcast = false0;
35789
35790 ctrl_field = tvb_get_uint8(tvb, offset);
35791 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35792 hf_ieee80211_tag_twt_control_field,
35793 ett_twt_control_field_tree,
35794 ieee80211_twt_ctrl_field,
35795 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35796 offset += 1;
35797 neg_type = (ctrl_field & 0xc) >> 2;
35798
35799 while (!last_bcast) {
35800 tag_len = tvb_captured_length_remaining(tvb, offset);
35801 if (tag_len < 2) {
35802 expert_add_info(pinfo, item ? item : tree,
35803 &ei_ieee80211_twt_bcast_info_no_term);
35804 return tvb_captured_length(tvb);
35805 }
35806 req_type = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35807 if (neg_type & 0x2) { /* If a bcast TWT */
35808 // 2 bytes - request type
35809 // 2 bytes - target wake time
35810 // 1 byte - nominal minimum interval TWT wake duration
35811 // 2 bytes - TWT wake interval mantissa
35812 // 2 byte - Broadcast TWT info
35813 // total: 10 bytes.
35814 if (tag_len < 9) {
35815 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
35816 "Tag Length %u wrong, must be >= 9", tag_len);
35817 return tvb_captured_length(tvb);
35818 }
35819 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35820 hf_ieee80211_tag_twt_req_type_field,
35821 ett_twt_req_type_tree,
35822 ieee80211_bcst_twt_req_type_field,
35823 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35824 last_bcast = (req_type & 0x20) >> 5;
35825 } else {
35826 // 2 bytes - request type
35827 // 8 bytes - target wake time
35828 // 1 byte - nominal minimum interval TWT wake duration
35829 // 2 bytes - TWT wake interval mantissa
35830 // 1 byte - channel
35831 // total: 14 bytes.
35832 if (tag_len < 14) {
35833 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
35834 "Tag Length %u wrong, must be >= 14", tag_len);
35835 return tvb_captured_length(tvb);
35836 }
35837 item = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35838 hf_ieee80211_tag_twt_req_type_field,
35839 ett_twt_req_type_tree,
35840 ieee80211_twt_req_type_field,
35841 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35842 last_bcast = true1;
35843 }
35844
35845 twt_requester = req_type & 0x1;
35846 setup_command = (req_type & 0xe) >> 1;
35847
35848 switch (setup_command) {
35849 case REQUEST_TWT0:
35850 case SUGGEST_TWT1:
35851 case DEMAND_TWT2:
35852 // we must be TWT requester
35853 if (!twt_requester) {
35854 expert_add_info_format(pinfo, item,
35855 &ei_ieee80211_twt_setup_bad_command,
35856 "Command %d is not allowed if TWT Request is not set",
35857 setup_command);
35858 return tvb_captured_length(tvb);
35859 }
35860 break;
35861 case TWT_GROUPING3:
35862 // TODO: There are more tests needed here
35863 // Fall through since we can't be requester here as well.
35864 case ACCEPT_TWT4:
35865 case ALTERNATE_TWT5:
35866 // we can't be TWT requester
35867 if (twt_requester) {
35868 expert_add_info_format(pinfo, item,
35869 &ei_ieee80211_twt_setup_bad_command,
35870 "Command %d is not allowed if TWT Request is set",
35871 setup_command);
35872 return tvb_captured_length(tvb);
35873 }
35874 break;
35875 case DICTATE_TWT6:
35876 case REJECT_TWT7:
35877 // TODO: Unclear what to do here. Looks like we can't be Requester, OTOH
35878 // the spec doesn't say anything
35879 break;
35880 default:
35881 break;
35882 }
35883
35884 offset += 2;
35885
35886 if (neg_type & 0x2) { /* If a bcast TWT */
35887 uint16_t twt_info;
35888
35889 proto_tree_add_item(tree, hf_ieee80211_tag_twt_target_wake_time_short,
35890 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35891 offset += 2;
35892
35893 proto_tree_add_item(tree, hf_ieee80211_tag_twt_nom_min_twt_wake_dur, tvb,
35894 offset, 1, ENC_NA0x00000000);
35895 offset += 1;
35896
35897 proto_tree_add_item(tree, hf_ieee80211_tag_twt_wake_interval_mantissa,
35898 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35899 offset += 2;
35900
35901 twt_info = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
35902 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35903 hf_ieee80211_tag_twt_broadcast_info,
35904 ett_twt_broadcast_info_tree,
35905 ieee80211_twt_broadcast_info_field,
35906 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
35907 offset += 2;
35908 if (twt_info & 0x01) { /* RTWT Traffic Info */
35909 proto_tree *info_tree;
35910 info_tree = proto_tree_add_subtree(tree, tvb, offset, 3, ett_twt_traffic_info_tree,
35911 NULL((void*)0), "Restricted TWT Traffic Info");
35912 proto_tree_add_bitmask_with_flags(info_tree, tvb, offset,
35913 hf_ieee80211_tag_twt_traffic_info_control,
35914 ett_twt_traffic_info_control_tree,
35915 ieee80211_twt_traffic_info_control_field,
35916 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35917 offset += 1;
35918
35919 proto_tree_add_item(info_tree, hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap,
35920 tvb, offset, 1, ENC_NA0x00000000);
35921 offset += 1;
35922
35923 proto_tree_add_item(info_tree, hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap,
35924 tvb, offset, 1, ENC_NA0x00000000);
35925 offset += 1;
35926 }
35927 } else {
35928 proto_tree_add_item(tree, hf_ieee80211_tag_twt_target_wake_time, tvb,
35929 offset, 8, ENC_LITTLE_ENDIAN0x80000000);
35930 offset += 8;
35931
35932 proto_tree_add_item(tree, hf_ieee80211_tag_twt_nom_min_twt_wake_dur, tvb,
35933 offset, 1, ENC_NA0x00000000);
35934 offset += 1;
35935
35936 item = proto_tree_add_item(tree,
35937 hf_ieee80211_tag_twt_wake_interval_mantissa,
35938 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
35939 offset += 2;
35940
35941 proto_tree_add_item(tree, hf_ieee80211_tag_twt_channel, tvb, offset, 1,
35942 ENC_NA0x00000000);
35943 offset += 1;
35944
35945 if (ctrl_field & 0x01) { /* NDP Paging */
35946 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
35947 hf_ieee80211_tag_twt_ndp_paging_field,
35948 ett_twt_ndp_paging_field_tree,
35949 ieee80211_twt_ndp_paging_field,
35950 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_FALSE0x04);
35951 offset += 4;
35952 }
35953
35954 if (ctrl_field & 0x40) { /* Link ID Bitmap */
35955 proto_tree_add_item(tree, hf_ieee80211_tag_twt_link_id_bitmap, tvb, offset, 2,
35956 ENC_LITTLE_ENDIAN0x80000000);
35957 offset += 2;
35958 }
35959
35960 if (ctrl_field & 0x80) { /* Aligned TWT Link Bitmap */
35961 proto_tree_add_item(tree, hf_ieee80211_tag_twt_aligned_twt_link_bitmap, tvb, offset, 2,
35962 ENC_LITTLE_ENDIAN0x80000000);
35963 offset += 2;
35964 }
35965 }
35966 }
35967
35968 return tvb_captured_length(tvb);
35969}
35970
35971static int
35972dissect_rsnx_ie(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, int tag_len)
35973{
35974 int offset = 0;
35975 proto_item *octet;
35976 static int * const octet1[] = {
35977 &hf_ieee80211_tag_rsnx_length,
35978 &hf_ieee80211_tag_rsnx_protected_twt_operations_support,
35979 &hf_ieee80211_tag_rsnx_sae_hash_to_element,
35980 &hf_ieee80211_tag_rsnx_sae_pk,
35981 &hf_ieee80211_tag_rsnx_protected_wur_frame_support,
35982 NULL((void*)0)
35983 };
35984 static int * const octet2[] = {
35985 &hf_ieee80211_tag_rsnx_secure_ltf_support,
35986 &hf_ieee80211_tag_rsnx_secure_rtt_supported,
35987 &hf_ieee80211_tag_rsnx_urnm_mfpr_x20,
35988 &hf_ieee80211_tag_rsnx_protected_announce_support,
35989 &hf_ieee80211_tag_rsnx_pbac,
35990 &hf_ieee80211_tag_rsnx_extended_s1g_action_protection,
35991 &hf_ieee80211_tag_rsnx_spp_amsdu_capable,
35992 &hf_ieee80211_tag_rsnx_urnm_mfpr,
35993 NULL((void*)0)
35994 };
35995 static int * const octet3[] = {
35996 &hf_ieee80211_tag_rsnx_kek_in_pasn,
35997 NULL((void*)0)
35998 };
35999 static int * const octet4[] = {
36000 &hf_ieee80211_tag_rsnx_assoc_encryption,
36001 &hf_ieee80211_tag_rsnx_pmksa_privacy,
36002 NULL((void*)0)
36003 };
36004
36005 /* octet 1 */
36006 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);
36007 proto_item_append_text(octet, " (octet %d)", offset + 1);
36008
36009 offset += 1;
36010 if (offset >= tag_len) {
36011 return offset;
36012 }
36013
36014 /* octet 2 */
36015 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);
36016 proto_item_append_text(octet, " (octet %d)", offset + 1);
36017
36018 offset += 1;
36019 if (offset >= tag_len) {
36020 return offset;
36021 }
36022
36023 /* octet 3 */
36024 octet = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rsnx, ett_tag_rsnx_octet3, octet3, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36025 proto_item_append_text(octet, " (octet %d)", offset + 1);
36026
36027 offset += 1;
36028 if (offset >= tag_len) {
36029 return offset;
36030 }
36031
36032 /* octet 4 */
36033 octet = proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_tag_rsnx, ett_tag_rsnx_octet4, octet4, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36034 proto_item_append_text(octet, " (octet %d)", offset + 1);
36035
36036 offset += 1;
36037 if (offset >= tag_len) {
36038 return offset;
36039 }
36040
36041 /* all rest of payload is reserved... */
36042 while (offset < tag_len) {
36043 proto_tree_add_item(tree, hf_ieee80211_tag_rsnx_reserved, tvb, offset, 1,
36044 ENC_LITTLE_ENDIAN0x80000000);
36045 offset += 1;
36046 }
36047
36048 return offset;
36049}
36050
36051static int
36052ieee80211_tag_rsnx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36053{
36054 int tag_len = tvb_reported_length(tvb);
36055 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36056
36057 if (tag_len < 1) {
36058 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 1", tag_len);
36059 return 0;
36060 }
36061 proto_item_append_text(field_data->item_tag, " (%u octet%s)", tag_len, plurality(tag_len, "", "s")((tag_len) == 1 ? ("") : ("s")));
36062
36063 dissect_rsnx_ie(tvb, pinfo, tree, tag_len);
36064
36065 return tvb_captured_length(tvb);
36066}
36067
36068static int
36069ieee80211_tag_fils_indication(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36070{
36071 int tag_len = tvb_reported_length(tvb);
36072 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36073 int offset = 0;
36074 uint16_t info;
36075 uint8_t nr_realm, nr_pk, i, len;
36076 proto_item *item;
36077 proto_tree *subtree;
36078
36079 if (tag_len < 2)
36080 {
36081 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
36082 return tvb_captured_length(tvb);
36083 }
36084
36085 static int * const ieee80211_tag_fils_indication_info[] = {
36086 &hf_ieee80211_tag_fils_indication_info_nr_pk,
36087 &hf_ieee80211_tag_fils_indication_info_nr_realm,
36088 &hf_ieee80211_tag_fils_indication_info_ip_config,
36089 &hf_ieee80211_tag_fils_indication_info_cache_id_included,
36090 &hf_ieee80211_tag_fils_indication_info_hessid_included,
36091 &hf_ieee80211_tag_fils_indication_info_ska_without_pfs,
36092 &hf_ieee80211_tag_fils_indication_info_ska_with_pfs,
36093 &hf_ieee80211_tag_fils_indication_info_pka,
36094 &hf_ieee80211_tag_fils_indication_info_reserved,
36095 NULL((void*)0)
36096 };
36097
36098 info = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000);
36099 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_fils_indication_info, ENC_LITTLE_ENDIAN0x80000000);
36100 offset += 2;
36101
36102 nr_pk = info & 0x07;
36103 nr_realm = (info >> 3) & 0x07;
36104
36105 /* Cache identifier */
36106 if (info & (1 << 7)) {
36107 proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_cache_identifier, tvb, offset, 2, ENC_NA0x00000000);
36108 offset += 2;
36109 }
36110
36111 /* HESSID */
36112 if (info & (1 << 8)) {
36113 proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_hessid, tvb, offset, 6, ENC_NA0x00000000);
36114 offset += 6;
36115 }
36116
36117 /* Realm identifiers */
36118 if (nr_realm > 0) {
36119 item = proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_realm_list, tvb, offset, nr_realm * 2, ENC_NA0x00000000);
36120 subtree = proto_item_add_subtree(item, ett_fils_indication_realm_list);
36121 proto_item_append_text(item, ": %u", nr_realm);
36122
36123 for (i = 0; i < nr_realm; i++) {
36124 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_realm_identifier, tvb, offset, 2, ENC_NA0x00000000);
36125 offset += 2;
36126 }
36127 }
36128
36129 /* PK identifiers */
36130 if (nr_pk > 0) {
36131 item = proto_tree_add_item(tree, hf_ieee80211_tag_fils_indication_public_key_list, tvb, offset, tag_len - offset, ENC_NA0x00000000);
36132 subtree = proto_item_add_subtree(item, ett_fils_indication_public_key_list);
36133 proto_item_append_text(item, ": %u", nr_pk);
36134
36135 for (i = 0; i < nr_pk; i++) {
36136 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_type, tvb, offset, 1, ENC_NA0x00000000);
36137 offset += 1;
36138
36139 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_length, tvb, offset, 1, ENC_NA0x00000000);
36140 len = tvb_get_uint8(tvb, offset);
36141 offset += 1;
36142
36143 proto_tree_add_item(subtree, hf_ieee80211_tag_fils_indication_public_key_indicator, tvb, offset, len, ENC_NA0x00000000);
36144 offset += len;
36145 }
36146 }
36147
36148 return tvb_captured_length(tvb);
36149}
36150
36151static int
36152ieee80211_tag_element_id_extension(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36153{
36154 int tag_len = tvb_reported_length(tvb);
36155 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36156 int offset = 0;
36157 int ext_tag_len;
36158 uint8_t ext_tag_no;
36159
36160 if (tag_len < 1)
36161 {
36162 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 1", tag_len);
36163 return tvb_captured_length(tvb);
36164 }
36165 ext_tag_no = tvb_get_uint8(tvb, offset++);
36166 ext_tag_len = tag_len - 1;
36167
36168 switch (ext_tag_no) {
36169 case ETAG_FILS_REQ_PARAMS2:
36170 dissect_fils_req_params(tree, pinfo, tvb, offset, ext_tag_len);
36171 break;
36172 case ETAG_FILS_SESSION4:
36173 proto_tree_add_item(tree, hf_ieee80211_fils_session, tvb, offset, ext_tag_len, ENC_NA0x00000000);
36174 if (field_data->sanity_check != NULL((void*)0)) {
36175 field_data->sanity_check->has_fils_session = true1;
36176 }
36177 break;
36178 case ETAG_FILS_WRAPPED_DATA8:
36179 dissect_wrapped_data(tree, pinfo, tvb, offset, ext_tag_len);
36180 break;
36181 case ETAG_FILS_NONCE13:
36182 proto_tree_add_item(tree, hf_ieee80211_fils_nonce, tvb, offset, ext_tag_len, ENC_NA0x00000000);
36183 break;
36184 case ETAG_ESTIMATED_SERVICE_PARAM11:
36185 dissect_estimated_service_params(tvb, pinfo, tree, offset, ext_tag_len);
36186 break;
36187 case ETAG_FUTURE_CHANNEL_GUIDANCE14:
36188 dissect_future_channel_guidance(tvb, pinfo, tree, offset, ext_tag_len);
36189 break;
36190 case ETAG_OWE_DH_PARAMETER32:
36191 dissect_owe_dh_parameter(tvb, pinfo, tree, offset, ext_tag_len, field_data->sanity_check);
36192 break;
36193 case ETAG_PASSWORD_IDENTIFIER33:
36194 dissect_password_identifier(tvb, pinfo, tree, offset, ext_tag_len);
36195 break;
36196 case ETAG_HE_CAPABILITIES35:
36197 dissect_he_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
36198 break;
36199 case ETAG_HE_OPERATION36:
36200 dissect_he_operation(tvb, pinfo, tree, offset, ext_tag_len);
36201 break;
36202 case ETAG_UORA_PARAMETER_SET37:
36203 dissect_uora_parameter_set(tvb, pinfo, tree, offset);
36204 break;
36205 case ETAG_MU_EDCA_PARAMETER_SET38:
36206 dissect_mu_edca_parameter_set(tvb, pinfo, tree, offset, ext_tag_len);
36207 break;
36208 case ETAG_SPATIAL_REUSE_PARAMETER_SET39:
36209 dissect_spatial_reuse_parameter_set(tvb, pinfo, tree, offset, ext_tag_len);
36210 break;
36211 case ETAG_NDP_FEEDBACK_REPORT_PARAMETER_SET41:
36212 dissect_ndp_feedback_report_set(tvb, pinfo, tree, offset, ext_tag_len);
36213 break;
36214 case ETAG_BSS_COLOR_CHANGE_ANNOUNCEMENT42:
36215 dissect_bss_color_change(tvb, pinfo, tree, offset, ext_tag_len);
36216 break;
36217 case ETAG_QUIET_TIME_PERIOD_SETUP43:
36218 dissect_quiet_time_period(tvb, pinfo, tree, offset, ext_tag_len);
36219 break;
36220 case ETAG_ESS_REPORT45:
36221 dissect_ess_report(tvb, pinfo, tree, offset, ext_tag_len);
36222 break;
36223 case ETAG_OPS46:
36224 dissect_ops(tvb, pinfo, tree, offset, ext_tag_len);
36225 break;
36226 case ETAG_MAX_CHANNEL_SWITCH_TIME52:
36227 dissect_max_channel_switch_time(tvb, pinfo, tree, offset, ext_tag_len);
36228 break;
36229 case ETAG_OCI54:
36230 dissect_oci(tvb, pinfo, tree, offset, ext_tag_len);
36231 break;
36232 case ETAG_MULTIPLE_BSSID_CONFIGURATION55:
36233 dissect_multiple_bssid_configuration(tvb, pinfo, tree, offset, ext_tag_len);
36234 break;
36235 case ETAG_NON_INHERITANCE56:
36236 dissect_non_inheritance(tvb, pinfo, tree, offset, ext_tag_len);
36237 break;
36238 case ETAG_KNOWN_BSSID57:
36239 dissect_known_bssid(tvb, pinfo, tree, offset, ext_tag_len);
36240 break;
36241 case ETAG_SHORT_SSID58:
36242 dissect_short_ssid(tvb, pinfo, tree, offset, ext_tag_len);
36243 break;
36244 case ETAG_MSCS_DESCRIPTOR_ELEMENT88:
36245 dissect_mscs_descriptor_element(tvb, pinfo, tree, offset, ext_tag_len);
36246 break;
36247 case ETAG_TCLAS_MASK89:
36248 dissect_tclas_mask_element(tvb, pinfo, tree, offset, ext_tag_len);
36249 break;
36250 case ETAG_REJECTED_GROUPS92:
36251 dissect_rejected_groups(tvb, pinfo, tree, offset, ext_tag_len);
36252 break;
36253 case ETAG_ANTI_CLOGGING_TOKEN93:
36254 dissect_anti_clogging_token(tvb, pinfo, tree, offset, ext_tag_len);
36255 break;
36256 case ETAG_EXTENDED_REQUEST10:
36257 dissect_extended_request(tvb, pinfo, tree, offset, ext_tag_len);
36258 break;
36259 case ETAG_HE_6GHZ_BAND_CAPABILITIES59:
36260 dissect_he_6ghz_band_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
36261 break;
36262 case ETAG_RANGING_PARAMETERS101:
36263 dissect_ranging_parameters(tvb, pinfo, tree, offset, ext_tag_len);
36264 break;
36265 case ETAG_DIRECTION_MEASUREMENT_RESULTS102:
36266 dissect_direction_measurement_results(tvb, pinfo, tree, offset, ext_tag_len);
36267 break;
36268 case ETAG_FTM_SYNC_INFO9:
36269 proto_tree_add_item(tree, hf_ieee80211_tag_ftm_tsf_sync_info, tvb, offset, ext_tag_len, ENC_NA0x00000000);
36270 break;
36271 case ETAG_SECURE_LTF_PARAMETERS94:
36272 dissect_secure_ltf_parameters(tvb, pinfo, tree, offset, ext_tag_len);
36273 break;
36274 case ETAG_ISTA_AVAILABILITY_WINDOW98:
36275 dissect_ista_availability_window(tvb, pinfo, tree, offset, ext_tag_len);
36276 break;
36277 case ETAG_RSTA_AVAILABILITY_WINDOW99:
36278 dissect_rsta_availability_window(tvb, pinfo, tree, offset, ext_tag_len);
36279 break;
36280 case ETAG_PASN_PARAMETERS100:
36281 dissect_pasn_parameters(tvb, pinfo, tree, offset, ext_tag_len);
36282 break;
36283 case ETAG_MULTI_LINK107:
36284 dissect_multi_link(tvb, pinfo, tree, offset, ext_tag_len);
36285 break;
36286 case ETAG_EHT_OPERATION106:
36287 dissect_eht_operation(tvb, pinfo, tree, offset, ext_tag_len);
36288 break;
36289 case ETAG_EHT_CAPABILITIES108:
36290 dissect_eht_capabilities(tvb, pinfo, tree, offset, ext_tag_len);
36291 break;
36292 case ETAG_TID_TO_LINK_MAPPING109:
36293 dissect_tid_to_link_mapping(tvb, pinfo, tree, offset, ext_tag_len);
36294 break;
36295 case ETAG_MULTI_LINK_TRAFFIC110:
36296 dissect_multi_link_traffic(tvb, pinfo, tree, offset, ext_tag_len);
36297 break;
36298 case ETAG_QOS_CHARACTERISTICS113:
36299 dissect_qos_characteristics(tvb, pinfo, tree, offset, ext_tag_len);
36300 break;
36301 case ETAG_AKM_SUITE_SELECTOR114:
36302 dissect_akm_suite_selector(tvb, pinfo, tree, offset, ext_tag_len);
36303 break;
36304 case ETAG_MLO_LINK_INFORMATION133:
36305 dissect_mlo_link_information(tvb, pinfo, tree, offset, ext_tag_len);
36306 break;
36307 case ETAG_AID_BITMAP134:
36308 dissect_aid_bitmap(tvb, pinfo, tree, offset, ext_tag_len);
36309 break;
36310 case ETAG_BANDWIDTH_INDICATION135:
36311 dissect_bandwidth_indication(tvb, pinfo, tree, offset, ext_tag_len);
36312 break;
36313 case ETAG_NONAP_STA_REGULATORY_CONNECT137:
36314 dissect_nonap_sta_regulatory_connect(tvb, pinfo, tree, offset, ext_tag_len);
36315 break;
36316 default:
36317 proto_tree_add_item(tree, hf_ieee80211_ext_tag_data, tvb, offset, ext_tag_len, ENC_NA0x00000000);
36318 expert_add_info_format(pinfo, field_data->item_tag, &ei_ieee80211_tag_data,
36319 "Dissector for 802.11 Extension Tag"
36320 " (%s) code not implemented, Contact"
36321 " Wireshark developers if you want this supported", val_to_str_ext(pinfo->pool, ext_tag_no,
36322 &tag_num_vals_eid_ext_ext, "%d"));
36323 proto_item_append_text(field_data->item_tag, ": Undecoded");
36324 break;
36325 }
36326
36327 return tvb_captured_length(tvb);
36328}
36329
36330/* Conflict: WAPI Vs. IEEE */
36331static int
36332ieee80211_tag_ie_68_conflict(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36333{
36334 int tag_len = tvb_reported_length(tvb);
36335 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36336 if (tag_len >= 20) { /* It Might be WAPI*/
36337 dissect_wapi_param_set(tvb, pinfo, tree, 0, tag_len, field_data->item_tag_length, field_data->item_tag, field_data->ftype);
36338 }
36339 else { /* BSS AC Access Delay (68) */
36340 dissect_bss_ac_access_delay_ie(tvb, pinfo, tree, 0, tag_len, field_data->item_tag_length);
36341 }
36342 return tvb_captured_length(tvb);
36343}
36344
36345static int
36346ieee80211_tag_mesh_peering_mgmt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36347{
36348 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36349 int tag_len = tvb_reported_length(tvb);
36350 int offset = 0;
36351 int ampe_frame = 0;
36352
36353 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_proto, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36354 offset += 2;
36355 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_local_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36356 offset += 2;
36357
36358 if (field_data && field_data->sanity_check)
36359 ampe_frame = field_data->sanity_check->ampe_frame;
36360
36361 switch (ampe_frame)
36362 { /* Self-protected action field */
36363 case SELFPROT_ACTION_MESH_PEERING_OPEN1:
36364 break;
36365
36366 case SELFPROT_ACTION_MESH_PEERING_CONFIRM2:
36367 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36368 break;
36369
36370 case SELFPROT_ACTION_MESH_PEERING_CLOSE3:
36371 if ((tag_len == 8) || (tag_len == 24))
36372 {
36373 proto_tree_add_item(tree, hf_ieee80211_mesh_peering_peer_link_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36374 offset += 2;
36375 }
36376 add_ff_reason_code(tree, tvb, pinfo, offset);
36377 break;
36378
36379 /* unexpected values */
36380 default:
36381 proto_tree_add_expert(tree, pinfo, &ei_ieee80211_mesh_peering_unexpected , tvb, offset, tag_len);
36382 break;
36383 }
36384 if (tag_len - offset == 16)
36385 {
36386 proto_tree_add_item(tree, hf_ieee80211_rsn_pmkid, tvb, offset, 16, ENC_NA0x00000000);
36387 }
36388 return tvb_captured_length(tvb);
36389}
36390
36391static int
36392ieee80211_tag_mesh_configuration(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36393{
36394
36395 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36396 int tag_len = tvb_reported_length(tvb);
36397 if (tag_len != 7)
36398 {
36399 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
36400 return tvb_captured_length(tvb);
36401 }
36402
36403 int offset = 0;
36404 proto_item *item;
36405 proto_tree *subtree;
36406 static int * const ieee80211_mesh_config_cap[] = {
36407 &hf_ieee80211_mesh_config_cap_accepting,
36408 &hf_ieee80211_mesh_config_cap_mcca_support,
36409 &hf_ieee80211_mesh_config_cap_mcca_enabled,
36410 &hf_ieee80211_mesh_config_cap_forwarding,
36411 &hf_ieee80211_mesh_config_cap_mbca_enabled,
36412 &hf_ieee80211_mesh_config_cap_tbtt_adjusting,
36413 &hf_ieee80211_mesh_config_cap_power_save_level,
36414 &hf_ieee80211_mesh_config_cap_reserved,
36415 NULL((void*)0)
36416 };
36417
36418 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_protocol, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36419 proto_tree_add_item(tree, hf_ieee80211_mesh_config_path_sel_metric, tvb, offset + 1, 1, ENC_LITTLE_ENDIAN0x80000000);
36420 proto_tree_add_item(tree, hf_ieee80211_mesh_config_congestion_control, tvb, offset + 2, 1, ENC_LITTLE_ENDIAN0x80000000);
36421 proto_tree_add_item(tree, hf_ieee80211_mesh_config_sync_method, tvb, offset + 3, 1, ENC_LITTLE_ENDIAN0x80000000);
36422 proto_tree_add_item(tree, hf_ieee80211_mesh_config_auth_protocol, tvb, offset + 4, 1, ENC_LITTLE_ENDIAN0x80000000);
36423 item = proto_tree_add_item(tree, hf_ieee80211_mesh_config_formation_info, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36424 subtree = proto_item_add_subtree(item, ett_mesh_formation_info_tree);
36425 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_conn_to_mesh_gate, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36426 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_num_of_peerings, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36427 proto_tree_add_item(subtree, hf_ieee80211_mesh_form_info_conn_to_as, tvb, offset + 5, 1, ENC_LITTLE_ENDIAN0x80000000);
36428
36429 proto_tree_add_bitmask_with_flags(tree, tvb, offset + 6, hf_ieee80211_mesh_config_capability,
36430 ett_mesh_config_cap_tree, ieee80211_mesh_config_cap,
36431 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36432 return tvb_captured_length(tvb);
36433}
36434
36435static int
36436ieee80211_tag_mesh_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36437{
36438 int offset = 0;
36439 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36440 int tag_len = tvb_reported_length(tvb);
36441 const uint8_t* mesh_id;
36442
36443 proto_tree_add_item_ret_string(tree, hf_ieee80211_mesh_id, tvb, offset, tag_len, ENC_ASCII0x00000000|ENC_NA0x00000000, pinfo->pool, &mesh_id);
36444 if (tag_len > 0) {
36445 char* s = format_text(pinfo->pool, (const char*)mesh_id, tag_len);
36446 col_append_fstr(pinfo->cinfo, COL_INFO, ", MESHID=%s", s);
36447 proto_item_append_text(field_data->item_tag, ": %s", s);
36448 }
36449 /* Make sure dissector is accepted */
36450 return ((tag_len > 0) ? tag_len : 1);
36451}
36452
36453static int
36454ieee80211_tag_beacon_timing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36455{
36456 int tag_len = tvb_reported_length(tvb);
36457 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36458 int offset = 0;
36459 uint32_t value;
36460 proto_item *item;
36461 proto_tree *subtree;
36462
36463 static int * const ieee80211_beacon_timing_rctrl_byte[] = {
36464 &hf_ieee80211_bcn_timing_rctrl_more,
36465 &hf_ieee80211_bcn_timing_rctrl_element_num,
36466 &hf_ieee80211_bcn_timing_rctrl_status_num,
36467 NULL((void*)0),
36468 };
36469
36470 /* Beacon timing element (120) */
36471 if (tag_len < 1) {
36472 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36473 "Tag length %u too short, must be greater than 1", tag_len);
36474 return tvb_captured_length(tvb);
36475 }
36476
36477 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_bcn_timing_rctrl,
36478 ett_bcn_timing_rctrl_tree, ieee80211_beacon_timing_rctrl_byte,
36479 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36480 offset += 1;
36481
36482 while (offset < tag_len) {
36483 item = proto_tree_add_item(tree, hf_ieee80211_bcn_timing_info, tvb, offset, 6, ENC_NA0x00000000);
36484 subtree = proto_item_add_subtree(item, ett_bcn_timing_info_tree);
36485 proto_item_append_text(item, " %u", ((offset / 6) + 1));
36486
36487 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &value);
36488 proto_item_append_text(item, ": STA ID: %u", value);
36489 offset += 1;
36490
36491 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_tbtt, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000, &value);
36492 proto_item_append_text(item, ", STA TBTT: %u", value);
36493 offset += 3;
36494
36495 proto_tree_add_item_ret_uint(subtree, hf_ieee80211_bcn_timing_info_nsta_bi, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &value);
36496 proto_item_append_text(item, ", STA BI: %u", value);
36497 offset += 2;
36498 }
36499
36500 proto_item_append_text(field_data->item_tag, " (%d entr%s)", offset / 6, plurality(offset / 6, "y", "ies")((offset / 6) == 1 ? ("y") : ("ies")));
36501
36502 return tvb_captured_length(tvb);
36503}
36504
36505static int
36506ieee80211_tag_gann(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36507{
36508 int tag_len = tvb_reported_length(tvb);
36509 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36510 int offset = 0;
36511
36512 static int * const ieee80211_gann_flags_byte[] = {
36513 &hf_ieee80211_gann_flags_reserved,
36514 NULL((void*)0),
36515 };
36516
36517 /* Gate Announcement (125) */
36518 if (tag_len != 15) {
36519 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36520 "Tag length %u wrong, must be = 15", tag_len);
36521 return tvb_captured_length(tvb);
36522 }
36523
36524 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_gann_flags,
36525 ett_gann_flags_tree, ieee80211_gann_flags_byte,
36526 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36527 offset += 1;
36528
36529 proto_tree_add_item(tree, hf_ieee80211_gann_hop_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36530 offset += 1;
36531 proto_tree_add_item(tree, hf_ieee80211_gann_elem_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36532 offset += 1;
36533 proto_tree_add_item(tree, hf_ieee80211_gann_mesh_gate_addr, tvb, offset, 6, ENC_NA0x00000000);
36534 offset += 6;
36535 proto_tree_add_item(tree, hf_ieee80211_gann_seq_num, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36536 offset += 4;
36537 proto_tree_add_item(tree, hf_ieee80211_gann_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36538
36539 return tvb_captured_length(tvb);
36540}
36541
36542static int
36543ieee80211_tag_mesh_preq(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36544{
36545 int offset = 0;
36546
36547 uint32_t flags;
36548 uint8_t targs, i;
36549
36550 proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &flags);
36551 offset += 1;
36552 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36553 offset += 1;
36554 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36555 offset += 1;
36556 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_pdid, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36557 offset += 4;
36558 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA0x00000000);
36559 offset += 6;
36560 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36561 offset += 4;
36562
36563 if (flags & (1<<6)) {
36564 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_ext, tvb, offset, 6, ENC_NA0x00000000);
36565 offset += 6;
36566 }
36567 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36568 offset += 4;
36569 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36570 offset += 4;
36571 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36572 targs = tvb_get_uint8(tvb, offset);
36573 offset += 1;
36574 for (i = 0; i < targs; i++) {
36575 static int * const targ_flags[] = {
36576 &hf_ieee80211_ff_hwmp_targ_to_flags,
36577 &hf_ieee80211_ff_hwmp_targ_usn_flags,
36578 NULL((void*)0)
36579 };
36580
36581 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_ff_hwmp_targ_flags,
36582 ett_hwmp_targ_flags_tree, targ_flags, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36583
36584 offset += 1;
36585 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36586 offset += 6;
36587 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36588 offset += 4;
36589 }
36590
36591 return tvb_captured_length(tvb);
36592}
36593
36594static int
36595ieee80211_tag_mesh_prep(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36596{
36597 int offset = 0;
36598
36599 uint32_t flags;
36600 proto_tree_add_item_ret_uint(tree, hf_ieee80211_ff_hwmp_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &flags);
36601 offset += 1;
36602 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36603 offset += 1;
36604 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset , 1, ENC_LITTLE_ENDIAN0x80000000);
36605 offset += 1;
36606 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36607 offset += 6;
36608 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36609 offset += 4;
36610 if (flags & (1<<6)) {
36611 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA0x00000000);
36612 offset += 6;
36613 }
36614 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36615 offset += 4;
36616 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36617 offset += 4;
36618 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sta, tvb, offset, 6, ENC_NA0x00000000);
36619 offset += 6;
36620 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_orig_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36621 return tvb_captured_length(tvb);
36622}
36623
36624static int
36625ieee80211_tag_mesh_perr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36626{
36627 int offset = 0;
36628 uint8_t targs, i;
36629
36630 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36631 offset += 1;
36632 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_count, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36633 targs = tvb_get_uint8(tvb, offset);
36634 offset += 1;
36635 for (i = 0; i < targs; i++) {
36636 uint8_t flags = tvb_get_uint8(tvb, offset);
36637
36638 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36639 offset += 1;
36640 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sta, tvb, offset, 6, ENC_NA0x00000000);
36641 offset += 6;
36642 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36643 offset += 4;
36644 if (flags & (1<<6)) {
36645 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_targ_ext, tvb, offset, 6, ENC_NA0x00000000);
36646 offset += 6;
36647 }
36648 offset += add_ff_reason_code(tree, tvb, pinfo, offset);
36649 }
36650 return tvb_captured_length(tvb);
36651}
36652
36653static int
36654ieee80211_tag_pxu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36655{
36656 int tag_len = tvb_reported_length(tvb);
36657 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36658 int offset = 0;
36659 uint32_t pxu_count = 0, i, proxy_info_len;
36660 uint8_t pxu_flag;
36661 proto_item *item;
36662 proto_tree *subtree;
36663
36664 static int * const ieee80211_pxu_proxy_info_flags_byte[] = {
36665 &hf_ieee80211_pxu_proxy_info_flags_delete,
36666 &hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy,
36667 &hf_ieee80211_pxu_proxy_info_flags_lifetime,
36668 &hf_ieee80211_pxu_proxy_info_flags_reserved,
36669 NULL((void*)0),
36670 };
36671
36672 /* PXU element (137) */
36673 if (tag_len < 8) {
36674 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36675 "Tag length %u wrong, must be at least 8", tag_len);
36676 return tvb_captured_length(tvb);
36677 }
36678
36679 proto_tree_add_item(tree, hf_ieee80211_pxu_pxu_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36680 offset += 1;
36681 proto_tree_add_item(tree, hf_ieee80211_pxu_pxu_origin_mac, tvb, offset, 6, ENC_NA0x00000000);
36682 offset += 6;
36683 proto_tree_add_item_ret_uint(tree, hf_ieee80211_pxu_no_proxy_info, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000, &pxu_count);
36684 offset += 1;
36685
36686 for (i = 0; i < pxu_count; i++) {
36687 pxu_flag = tvb_get_uint8(tvb, offset);
36688 proxy_info_len = 1 + 6 + 4 + ((pxu_flag & 0x2) ? 0 : 6) + ((pxu_flag & 0x4) ? 4 : 0);
36689
36690 item = proto_tree_add_item(tree, hf_ieee80211_pxu_proxy_info, tvb, offset, proxy_info_len, ENC_NA0x00000000);
36691 subtree = proto_item_add_subtree(item, ett_pxu_proxy_info_tree);
36692 proto_item_append_text(item, " #%u", (i + 1));
36693
36694 proto_tree_add_bitmask_with_flags(subtree, tvb, offset, hf_ieee80211_pxu_proxy_info_flags,
36695 ett_pxu_proxy_info_flags_tree, ieee80211_pxu_proxy_info_flags_byte,
36696 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36697 offset += 1;
36698
36699 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_ext_mac, tvb, offset, 6, ENC_NA0x00000000);
36700 offset += 6;
36701
36702 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_seq_num, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36703 offset += 4;
36704
36705 if (!(pxu_flag & 0x2)) {
36706 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_proxy_mac, tvb, offset, 6, ENC_NA0x00000000);
36707 offset += 6;
36708 }
36709
36710 if (pxu_flag & 0x4) {
36711 proto_tree_add_item(subtree, hf_ieee80211_pxu_proxy_info_lifetime, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36712 offset += 4;
36713 }
36714 }
36715
36716 proto_item_append_text(field_data->item_tag, " (%d entr%s)", pxu_count, plurality(pxu_count, "y", "ies")((pxu_count) == 1 ? ("y") : ("ies")));
36717 return tvb_captured_length(tvb);
36718}
36719
36720static int
36721ieee80211_tag_pxuc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
36722{
36723 int tag_len = tvb_reported_length(tvb);
36724 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36725 int offset = 0;
36726
36727 /* PXUC element (138) */
36728 if (tag_len != 7) {
36729 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36730 "Tag length %u wrong, must be = 7", tag_len);
36731 return tvb_captured_length(tvb);
36732 }
36733
36734 proto_tree_add_item(tree, hf_ieee80211_pxuc_pxu_id, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36735 offset += 1;
36736 proto_tree_add_item(tree, hf_ieee80211_pxuc_pxu_recip_mac, tvb, offset, 6, ENC_NA0x00000000);
36737
36738 return tvb_captured_length(tvb);
36739}
36740
36741static int
36742ieee80211_tag_mic(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
36747 if ((tag_len != 16) && (tag_len != 24))
36748 {
36749 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36750 "MIC Tag Length %u wrong, must be 16 or 24", tag_len);
36751 return tvb_captured_length(tvb);
36752 }
36753
36754 proto_tree_add_item(tree, hf_ieee80211_mesh_mic, tvb, 0, tag_len, ENC_NA0x00000000);
36755 return tvb_captured_length(tvb);
36756}
36757
36758static int
36759ieee80211_tag_rann(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
36760{
36761 int offset = 0;
36762 proto_tree_add_item(tree, hf_ieee80211_rann_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36763 offset += 1;
36764 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_hopcount, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36765 offset += 1;
36766 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36767 offset += 1;
36768 proto_tree_add_item(tree, hf_ieee80211_rann_root_sta, tvb, offset, 6, ENC_NA0x00000000);
36769 offset += 6;
36770 proto_tree_add_item(tree, hf_ieee80211_rann_sn, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36771 offset += 4;
36772 proto_tree_add_item(tree, hf_ieee80211_rann_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36773 offset += 4;
36774 proto_tree_add_item(tree, hf_ieee80211_ff_hwmp_metric, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36775 return tvb_captured_length(tvb);
36776}
36777
36778/* Mesh Channel Switch Parameters (118) */
36779static int
36780ieee80211_tag_mesh_channel_switch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36781{
36782 int tag_len = tvb_reported_length(tvb);
36783 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36784 int offset = 0;
36785 static int * const ieee80211_mesh_chswitch_flag[] = {
36786 &hf_ieee80211_mesh_chswitch_flag_initiator,
36787 &hf_ieee80211_mesh_chswitch_flag_txrestrict,
36788 NULL((void*)0)
36789 };
36790
36791 if (tag_len != 6)
36792 {
36793 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
36794 return tvb_captured_length(tvb);
36795 }
36796
36797 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN0x80000000);
36798 proto_item_append_text(field_data->item_tag, " TTL: %d", tvb_get_uint8(tvb, offset));
36799 offset += 1;
36800
36801 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_ieee80211_mesh_channel_switch_flag,
36802 ett_mesh_chswitch_flag_tree, ieee80211_mesh_chswitch_flag, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
36803 offset += 1;
36804
36805 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_reason_code, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36806 offset += 2;
36807
36808 proto_tree_add_item(tree, hf_ieee80211_mesh_channel_switch_precedence_value, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36809 return tvb_captured_length(tvb);
36810}
36811
36812/* Mesh Awake Window Parameters (119) */
36813static int
36814ieee80211_tag_mesh_awake_window(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36815{
36816 int tag_len = tvb_reported_length(tvb);
36817 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36818 int offset = 0;
36819
36820 if (tag_len != 2) {
36821 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length,
36822 "Tag length %u wrong, must be = 2", tag_len);
36823 return tvb_captured_length(tvb);
36824 }
36825
36826 proto_tree_add_item(tree, hf_ieee80211_mesh_awake_window, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36827 return tvb_captured_length(tvb);
36828}
36829
36830static int
36831ieee80211_tag_channel_switch_announcement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36832{
36833 int tag_len = tvb_reported_length(tvb);
36834 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36835 int offset = 0;
36836 if (tag_len != 4)
36837 {
36838 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
36839 return tvb_captured_length(tvb);
36840 }
36841
36842 add_ff_extended_channel_switch_announcement(tree, tvb, pinfo, offset);
36843 return tvb_captured_length(tvb);
36844}
36845
36846static int
36847ieee80211_tag_supported_operating_classes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36848{
36849 int tag_len = tvb_reported_length(tvb);
36850 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36851 int offset = 0;
36852 proto_item* item = NULL((void*)0);
36853 uint8_t field_len = 0;
36854 uint8_t alt_op_class_field[256];
36855
36856 if (tag_len < 2) {
36857 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be >= 2", tag_len);
36858 return tvb_captured_length(tvb);
36859 } else if (tag_len > 255) {
36860 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, uint8 <= 255", tag_len);
36861 return tvb_captured_length(tvb);
36862 }
36863
36864 proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_current, tvb, offset++, 1, ENC_NA0x00000000);
36865
36866 for (int i = offset; i < tag_len; i++) {
36867 uint8_t op_class = tvb_get_uint8(tvb, i);
36868 /* Field terminates immediately before OneHundredAndThirty or Zero delimiter */
36869 if (op_class == 130 || op_class == 0) {
36870 break;
36871 }
36872 alt_op_class_field[field_len++] = op_class;
36873 }
36874 if (field_len) {
36875 item = proto_tree_add_item(tree, hf_ieee80211_tag_supported_ope_classes_alternate, tvb, offset, field_len, ENC_NA0x00000000);
36876 }
36877 for (int i = 0; i < field_len; i++) {
36878 proto_item_append_text(item, i == 0 ? ": %d":", %d", alt_op_class_field[i]);
36879 }
36880
36881 /* TODO parse optional Current Operating Class Extension Sequence field */
36882 /* TODO parse optional Operating Class Duple Sequence field */
36883 return tvb_captured_length(tvb);
36884}
36885
36886static int
36887ieee80211_tag_bss_parameter_change(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36888{
36889 int tag_len = tvb_reported_length(tvb);
36890 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36891 int offset = 0;
36892 bool_Bool size;
36893 if (tag_len != 7)
36894 {
36895 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 7", tag_len);
36896 return tvb_captured_length(tvb);
36897 }
36898 size = (tvb_get_uint8(tvb, offset) & 0x02) >> 1;
36899 proto_tree_add_item(tree, hf_ieee80211_tag_move, tvb, offset, 1, ENC_NA0x00000000);
36900 proto_tree_add_item(tree, hf_ieee80211_tag_size, tvb, offset, 1, ENC_NA0x00000000);
36901 offset += 1;
36902 proto_tree_add_item(tree, hf_ieee80211_tag_tbtt_offset, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
36903 offset += 4;
36904 if(size == true1) { /* if size bit is 0, the field is reserved. */
36905 proto_tree_add_item(tree, hf_ieee80211_tag_bi_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
36906 }
36907 return tvb_captured_length(tvb);
36908}
36909
36910static int
36911ieee80211_tag_dmg_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
36912{
36913 int tag_len = tvb_reported_length(tvb);
36914 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
36915 int offset = 0;
36916 static int * const ieee80211_tag_dmg_cap1[] = {
36917 &hf_ieee80211_tag_reverse_direction,
36918 &hf_ieee80211_tag_hlts,
36919 &hf_ieee80211_tag_tpc,
36920 &hf_ieee80211_tag_spsh,
36921 &hf_ieee80211_tag_rx_antenna,
36922 &hf_ieee80211_tag_fast_link,
36923 &hf_ieee80211_tag_num_sectors,
36924 &hf_ieee80211_tag_rxss_length,
36925 &hf_ieee80211_tag_reciprocity,
36926 &hf_ieee80211_tag_max_ampdu_exp,
36927 NULL((void*)0)
36928 };
36929
36930 static int * const ieee80211_tag_dmg_cap2[] = {
36931 &hf_ieee80211_tag_min_mpdu_spacing,
36932 &hf_ieee80211_tag_ba_flow_control,
36933 &hf_ieee80211_tag_max_sc_rx_mcs,
36934 &hf_ieee80211_tag_max_ofdm_rx_mcs,
36935 &hf_ieee80211_tag_max_sc_tx_mcs,
36936 &hf_ieee80211_tag_max_ofdm_tx_mcs,
36937 NULL((void*)0)
36938 };
36939
36940 static int * const ieee80211_tag_dmg_cap3[] = {
36941 &hf_ieee80211_tag_low_power_supported,
36942 &hf_ieee80211_tag_code_rate,
36943 &hf_ieee80211_tag_dtp,
36944 &hf_ieee80211_tag_appdu_supp,
36945 &hf_ieee80211_tag_heartbeat,
36946 &hf_ieee80211_tag_other_aid,
36947 &hf_ieee80211_tag_pattern_recip,
36948 &hf_ieee80211_tag_heartbeat_elapsed,
36949 &hf_ieee80211_tag_grant_ack_supp,
36950 &hf_ieee80211_tag_RXSSTxRate_supp,
36951 NULL((void*)0)
36952 };
36953
36954 static int * const ieee80211_tag_dmg_cap4[] = {
36955 &hf_ieee80211_tag_pcp_tddti,
36956 &hf_ieee80211_tag_pcp_PSA,
36957 &hf_ieee80211_tag_pcp_handover,
36958 &hf_ieee80211_tag_pcp_max_assoc,
36959 &hf_ieee80211_tag_pcp_power_src,
36960 &hf_ieee80211_tag_pcp_decenter,
36961 &hf_ieee80211_tag_pcp_forwarding,
36962 &hf_ieee80211_tag_pcp_center,
36963 NULL((void*)0)
36964 };
36965
36966 static int * const ieee80211_tag_dmg_cap5[] = {
36967 &hf_ieee80211_tag_ext_sc_mcs_max_tx,
36968 &hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8,
36969 &hf_ieee80211_tag_ext_sc_mcs_max_rx,
36970 &hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8,
36971 NULL((void*)0)
36972 };
36973
36974 /*
36975 * Plenty of devices still do not conform to the older version of this
36976 * field. So, it must be at least 17 bytes in length.
36977 */
36978 if (tag_len < 17)
36979 {
36980 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);
36981 return tvb_captured_length(tvb);
36982 }
36983
36984 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_sta_addr, tvb, offset, 6, ENC_NA0x00000000);
36985 offset += 6;
36986 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_capa_aid, tvb, offset, 1, ENC_NA0x00000000);
36987 offset += 1;
36988 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_dmg_cap1, ENC_LITTLE_ENDIAN0x80000000);
36989 offset += 3;
36990 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_dmg_cap2, ENC_LITTLE_ENDIAN0x80000000);
36991 offset += 3;
36992 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_dmg_cap3, ENC_LITTLE_ENDIAN0x80000000);
36993 offset += 2;
36994 proto_tree_add_bitmask_list(tree, tvb, offset, 2, ieee80211_tag_dmg_cap4, ENC_LITTLE_ENDIAN0x80000000);
36995 offset += 2;
36996
36997 /*
36998 * There are many captures out there that do not conform to the 2016
36999 * version, so give them a malformed IE message now after we have dissected
37000 * the above
37001 */
37002 if (tag_len != 22)
37003 {
37004 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);
37005 return tvb_captured_length(tvb);
37006 }
37007
37008 proto_tree_add_item(tree, hf_ieee80211_tag_sta_beam_track, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37009 offset += 2;
37010 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_dmg_cap5, ENC_LITTLE_ENDIAN0x80000000);
37011 offset += 1;
37012 proto_tree_add_item(tree, hf_ieee80211_tag_max_basic_sf_amsdu, tvb, offset, 1, ENC_NA0x00000000);
37013 offset += 1;
37014 proto_tree_add_item(tree, hf_ieee80211_tag_max_short_sf_amsdu, tvb, offset, 1, ENC_NA0x00000000);
37015
37016 return tvb_captured_length(tvb);
37017}
37018
37019static int
37020ieee80211_tag_dmg_operation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37021{
37022 int tag_len = tvb_reported_length(tvb);
37023 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37024 int offset = 0;
37025 static int * const ieee80211_tag_dmg_operation_flags[] = {
37026 &hf_ieee80211_tag_pcp_tddti,
37027 &hf_ieee80211_tag_pcp_PSA,
37028 &hf_ieee80211_tag_pcp_handover,
37029 NULL((void*)0)
37030 };
37031
37032 if (tag_len != 10)
37033 {
37034 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 10", tag_len);
37035 return tvb_captured_length(tvb);
37036 }
37037 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_dmg_operation_flags, ENC_LITTLE_ENDIAN0x80000000);
37038 offset += 2;
37039 proto_tree_add_item(tree, hf_ieee80211_tag_PSRSI, tvb, offset, 1, ENC_NA0x00000000);
37040 offset += 1;
37041 proto_tree_add_item(tree, hf_ieee80211_tag_min_BHI_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37042 offset += 2;
37043 proto_tree_add_item(tree, hf_ieee80211_tag_brdct_sta_info_dur, tvb, offset, 1, ENC_NA0x00000000);
37044 offset += 1;
37045 proto_tree_add_item(tree, hf_ieee80211_tag_assoc_resp_confirm_time, tvb, offset, 1, ENC_NA0x00000000);
37046 offset += 1;
37047 proto_tree_add_item(tree, hf_ieee80211_tag_min_pp_duration, tvb, offset, 1, ENC_NA0x00000000);
37048 offset += 1;
37049 proto_tree_add_item(tree, hf_ieee80211_tag_SP_idle_timeout, tvb, offset, 1, ENC_NA0x00000000);
37050 offset += 1;
37051 proto_tree_add_item(tree, hf_ieee80211_tag_max_lost_beacons, tvb, offset, 1, ENC_NA0x00000000);
37052 return tvb_captured_length(tvb);
37053}
37054
37055static int
37056ieee80211_tag_antenna_section_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37057{
37058 int tag_len = tvb_reported_length(tvb);
37059 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37060 int offset = 0;
37061 static int * const ieee80211_tag_antenna[] = {
37062 &hf_ieee80211_tag_type,
37063 &hf_ieee80211_tag_tap1,
37064 &hf_ieee80211_tag_state1,
37065 &hf_ieee80211_tag_tap2,
37066 &hf_ieee80211_tag_state2,
37067 NULL((void*)0)
37068 };
37069
37070 if (tag_len != 4)
37071 {
37072 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 4", tag_len);
37073 return tvb_captured_length(tvb);
37074 }
37075 proto_tree_add_bitmask_list(tree, tvb, offset, 4, ieee80211_tag_antenna, ENC_LITTLE_ENDIAN0x80000000);
37076 return tvb_captured_length(tvb);
37077}
37078
37079static int
37080ieee80211_tag_extended_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37081{
37082 int tag_len = tvb_reported_length(tvb);
37083 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37084 int offset = 0;
37085 int i;
37086 bool_Bool isGrant;
37087 proto_tree * alloc_tree;
37088 if ((tag_len%15) != 0)
37089 {
37090 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);
37091 return tvb_captured_length(tvb);
37092 }
37093 isGrant = ((field_data->ftype==CTRL_GRANT0x164)||(field_data->ftype==CTRL_GRANT_ACK0x167));
37094 for(i=0; i < tag_len; i+=15) {
37095 alloc_tree = proto_tree_add_subtree_format(tree, tvb, offset, 15, ett_allocation_tree, NULL((void*)0), "Allocation %d", i/15);
37096 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_id, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37097 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_allocation_type, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37098 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pseudo_static, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37099 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_truncatable, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37100 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_extendable, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37101 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_pcp_active, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37102 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_lp_sc_used, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37103 offset += 2;
37104 offset += add_ff_beamforming_ctrl(alloc_tree, tvb, pinfo, offset, isGrant);
37105 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_src_aid, tvb, offset, 1, ENC_NA0x00000000);
37106 offset += 1;
37107 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_dest_aid, tvb, offset, 1, ENC_NA0x00000000);
37108 offset += 1;
37109 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_start, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
37110 offset += 4;
37111 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37112 offset += 2;
37113 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_num_blocks, tvb, offset, 1, ENC_NA0x00000000);
37114 offset += 1;
37115 proto_tree_add_item(alloc_tree, hf_ieee80211_tag_alloc_block_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37116 offset += 2;
37117 }
37118 return tvb_captured_length(tvb);
37119}
37120
37121static int
37122ieee80211_tag_sta_availability(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37123{
37124 int tag_len = tvb_reported_length(tvb);
37125 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37126 int offset = 0;
37127 int i;
37128 proto_tree * sta_info_tree;
37129 if ((tag_len%2) != 0)
37130 {
37131 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);
37132 return tvb_captured_length(tvb);
37133 }
37134 for(i=0; i < tag_len; i+=2) {
37135 sta_info_tree = proto_tree_add_subtree_format(tree, tvb, offset, 2, ett_sta_info, NULL((void*)0), "STA Info %d", i/2);
37136 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_aid, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37137 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_cbap, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37138 proto_tree_add_item(sta_info_tree, hf_ieee80211_tag_pp_avail, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37139 offset += 2;
37140 }
37141 return tvb_captured_length(tvb);
37142}
37143
37144static int
37145ieee80211_tag_next_dmg_ati(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37146{
37147 int tag_len = tvb_reported_length(tvb);
37148 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37149 int offset = 0;
37150 if (tag_len != 6)
37151 {
37152 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be = 6", tag_len);
37153 return tvb_captured_length(tvb);
37154 }
37155 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
37156 offset += 4;
37157 proto_tree_add_item(tree, hf_ieee80211_tag_next_ati_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37158 return tvb_captured_length(tvb);
37159}
37160
37161static int
37162ieee80211_tag_nextpcp_list(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37163{
37164 int tag_len = tvb_reported_length(tvb);
37165 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37166 int offset = 0;
37167 int i;
37168 if (tag_len < 1)
37169 {
37170 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);
37171 return tvb_captured_length(tvb);
37172 }
37173 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_token, tvb, offset, 1, ENC_NA0x00000000);
37174 offset += 1;
37175 for(i=0; i < tag_len-1; i+=1) {
37176 proto_tree_add_item(tree, hf_ieee80211_tag_nextpcp_list, tvb, offset, 1, ENC_NA0x00000000);
37177 offset += 1;
37178 }
37179 return tvb_captured_length(tvb);
37180}
37181
37182static int
37183ieee80211_tag_pcp_handover(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37184{
37185 int tag_len = tvb_reported_length(tvb);
37186 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37187 int offset = 0;
37188 if (tag_len != 13)
37189 {
37190 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 13", tag_len);
37191 return tvb_captured_length(tvb);
37192 }
37193 proto_tree_add_item(tree, hf_ieee80211_tag_old_bssid, tvb, offset, 6, ENC_NA0x00000000);
37194 offset += 6;
37195 proto_tree_add_item(tree, hf_ieee80211_tag_new_pcp_addr, tvb, offset, 6, ENC_NA0x00000000);
37196 offset += 6;
37197 proto_tree_add_item(tree, hf_ieee80211_tag_remaining_BI, tvb, offset, 1, ENC_NA0x00000000);
37198 return tvb_captured_length(tvb);
37199}
37200
37201static int
37202ieee80211_tag_beamlink_maintenance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37203{
37204 int tag_len = tvb_reported_length(tvb);
37205 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37206 int offset = 0;
37207 if (tag_len != 1)
37208 {
37209 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
37210 return tvb_captured_length(tvb);
37211 }
37212 add_ff_beamformed_link(tree, tvb, pinfo, offset);
37213 return tvb_captured_length(tvb);
37214}
37215
37216static int
37217ieee80211_tag_quiet_period_res(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37218{
37219 int tag_len = tvb_reported_length(tvb);
37220 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37221 int offset = 0;
37222 if (tag_len != 10)
37223 {
37224 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 10", tag_len);
37225 return tvb_captured_length(tvb);
37226 }
37227 proto_tree_add_item(tree, hf_ieee80211_tag_request_token, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37228 offset += 2;
37229 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA0x00000000);
37230 offset += 6;
37231 add_ff_sta_address(tree, tvb, pinfo, offset);
37232 return tvb_captured_length(tvb);
37233}
37234
37235static int
37236ieee80211_tag_relay_transfer_param(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37237{
37238 int tag_len = tvb_reported_length(tvb);
37239 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37240 int offset = 0;
37241
37242 if (tag_len != 8)
37243 {
37244 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
37245 return tvb_captured_length(tvb);
37246 }
37247 proto_tree_add_item(tree, hf_ieee80211_tag_duplex_relay, tvb, offset, 1, ENC_NA0x00000000);
37248 proto_tree_add_item(tree, hf_ieee80211_tag_cooperation_relay, tvb, offset, 1, ENC_NA0x00000000);
37249 proto_tree_add_item(tree, hf_ieee80211_tag_tx_mode, tvb, offset, 1, ENC_NA0x00000000);
37250 proto_tree_add_item(tree, hf_ieee80211_tag_link_change_interval, tvb, offset+1, 1, ENC_NA0x00000000);
37251 proto_tree_add_item(tree, hf_ieee80211_tag_data_sensing_time, tvb, offset+2, 1, ENC_NA0x00000000);
37252 proto_tree_add_item(tree, hf_ieee80211_tag_first_period, tvb, offset+3, 2, ENC_LITTLE_ENDIAN0x80000000);
37253 proto_tree_add_item(tree, hf_ieee80211_tag_second_period, tvb, offset+5, 2, ENC_LITTLE_ENDIAN0x80000000);
37254 return tvb_captured_length(tvb);
37255}
37256
37257static int
37258ieee80211_tag_dmg_beam_refinement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37259{
37260 int tag_len = tvb_reported_length(tvb);
37261 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37262 int offset = 0;
37263 static int * const ieee80211_dmg_beam_refinement_fields[] = {
37264 &hf_ieee80211_tag_initiator,
37265 &hf_ieee80211_tag_tx_train_res,
37266 &hf_ieee80211_tag_rx_train_res,
37267 &hf_ieee80211_tag_tx_trn_ok,
37268 &hf_ieee80211_tag_txss_fbck_req,
37269 &hf_ieee80211_tag_bs_fbck,
37270 &hf_ieee80211_tag_bs_fbck_antenna_id,
37271 &hf_ieee80211_tag_snr_requested,
37272 &hf_ieee80211_tag_channel_measurement_requested,
37273 &hf_ieee80211_tag_number_of_taps_requested,
37274 &hf_ieee80211_tag_sector_id_order_req,
37275 &hf_ieee80211_tag_snr_present,
37276 &hf_ieee80211_tag_channel_measurement_present,
37277 &hf_ieee80211_tag_tap_delay_present,
37278 &hf_ieee80211_tag_number_of_taps_present,
37279 &hf_ieee80211_tag_number_of_measurement,
37280 &hf_ieee80211_tag_sector_id_order_present,
37281 &hf_ieee80211_tag_number_of_beams,
37282 &hf_ieee80211_tag_mid_extension,
37283 &hf_ieee80211_tag_capability_request,
37284 &hf_ieee80211_tag_beam_refine_reserved,
37285 NULL((void*)0)
37286 };
37287
37288 if (tag_len != 5)
37289 {
37290 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
37291 return tvb_captured_length(tvb);
37292 }
37293
37294 proto_tree_add_bitmask_list(tree, tvb, offset, 5, ieee80211_dmg_beam_refinement_fields, ENC_LITTLE_ENDIAN0x80000000);
37295 return tvb_captured_length(tvb);
37296}
37297
37298static int
37299ieee80211_tag_wakeup_schedule_ad(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37300{
37301 int tag_len = tvb_reported_length(tvb);
37302 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37303 int offset = 0;
37304
37305 if (tag_len != 8)
37306 {
37307 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
37308 return tvb_captured_length(tvb);
37309 }
37310 proto_tree_add_item(tree, hf_ieee80211_tag_bi_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
37311 offset += 4;
37312 proto_tree_add_item(tree, hf_ieee80211_tag_sleep_cycle, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37313 offset += 2;
37314 proto_tree_add_item(tree, hf_ieee80211_tag_num_awake_bis, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37315 return tvb_captured_length(tvb);
37316}
37317
37318static int
37319ieee80211_tag_dmg_tspec(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37320{
37321 int tag_len = tvb_reported_length(tvb);
37322 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37323 int offset = 0;
37324
37325 bool_Bool isGrant;
37326 int num_constraints;
37327 if (tag_len < 14)
37328 {
37329 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);
37330 return tvb_captured_length(tvb);
37331 }
37332 static int * const ieee80211_tag_tspec_flags[] = {
37333 &hf_ieee80211_tag_tspec_allocation_id,
37334 &hf_ieee80211_tag_tspec_allocation_type,
37335 &hf_ieee80211_tag_tspec_allocation_format,
37336 &hf_ieee80211_tag_tspec_pseudo_static,
37337 &hf_ieee80211_tag_tspec_truncatable,
37338 &hf_ieee80211_tag_tspec_extendable,
37339 &hf_ieee80211_tag_tspec_lp_sc_used,
37340 &hf_ieee80211_tag_tspec_up,
37341 &hf_ieee80211_tag_tap2,
37342 &hf_ieee80211_tag_tspec_dest_aid,
37343 NULL((void*)0)
37344 };
37345
37346 proto_tree_add_bitmask_list(tree, tvb, offset, 3, ieee80211_tag_tspec_flags, ENC_LITTLE_ENDIAN0x80000000);
37347 offset += 3;
37348 isGrant = ((field_data->ftype==CTRL_GRANT0x164)||(field_data->ftype==CTRL_GRANT_ACK0x167));
37349 offset += add_ff_beamforming_ctrl(tree, tvb, pinfo, 2, isGrant);
37350 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_allocation_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37351 offset += 2;
37352 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37353 offset += 2;
37354 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_max_allocation, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37355 offset += 2;
37356 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_min_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37357 offset += 2;
37358 num_constraints = tvb_get_uint8(tvb, offset);
37359 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_num_of_constraints, tvb, offset, 1, ENC_NA0x00000000);
37360 offset += 1;
37361 while(num_constraints > 0) {
37362 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_start_time, tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
37363 offset += 4;
37364 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37365 offset += 2;
37366 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_period, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37367 offset += 2;
37368 proto_tree_add_item(tree, hf_ieee80211_tag_tspec_tsconst_interferer_mac, tvb, offset, 2, ENC_NA0x00000000);
37369 offset += 6;
37370 num_constraints--;
37371 }
37372 return tvb_captured_length(tvb);
37373}
37374
37375static int
37376ieee80211_tag_channel_measurement_fb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37377{
37378 int tag_len = tvb_reported_length(tvb);
37379 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37380 int offset = 0;
37381
37382 int num_measurement;
37383 if (tag_len%5 != 0)
37384 {
37385 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);
37386 return tvb_captured_length(tvb);
37387 }
37388 num_measurement = tvb_get_uint8(tvb, offset+1);
37389 offset += 2;
37390 while(num_measurement > 0) {
37391 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA0x00000000);
37392 offset += 1;
37393 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_relative_I, tvb, offset, 1, ENC_NA0x00000000);
37394 offset += 1;
37395 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_relative_Q, tvb, offset, 1, ENC_NA0x00000000);
37396 offset += 1;
37397 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_tap_delay, tvb, offset, 1, ENC_NA0x00000000);
37398 offset += 1;
37399 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_sector_id, tvb, offset, 1, ENC_NA0x00000000);
37400 proto_tree_add_item(tree, hf_ieee80211_tag_channel_measurement_feedback_antenna_id, tvb, offset, 1, ENC_NA0x00000000);
37401 offset += 1;
37402 num_measurement--;
37403 }
37404 return tvb_captured_length(tvb);
37405}
37406
37407static int
37408ieee80211_tag_awake_window(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37409{
37410 int tag_len = tvb_reported_length(tvb);
37411 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37412
37413 if (tag_len != 2)
37414 {
37415 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 2", tag_len);
37416 }
37417 else
37418 {
37419 proto_tree_add_item(tree, hf_ieee80211_tag_awake_window, tvb, 0, 2, ENC_LITTLE_ENDIAN0x80000000);
37420 }
37421 return tvb_captured_length(tvb);
37422}
37423
37424static int
37425ieee80211_tag_addba_ext(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37426{
37427 int tag_len = tvb_reported_length(tvb);
37428 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37429
37430 if (tag_len != 1)
37431 {
37432 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 1", tag_len);
37433 }
37434 else
37435 {
37436 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_no_frag, tvb, 0, 1, ENC_NA0x00000000);
37437 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_he_fragmentation_operation, tvb, 0, 1, ENC_NA0x00000000);
37438 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_reserved, tvb, 0, 1, ENC_NA0x00000000);
37439 proto_tree_add_item(tree, hf_ieee80211_tag_addba_ext_buffer_size, tvb, 0, 1, ENC_NA0x00000000);
37440 }
37441 return tvb_captured_length(tvb);
37442}
37443
37444static int
37445ieee80211_tag_multi_band(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37446{
37447 int tag_len = tvb_reported_length(tvb);
37448 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37449 int offset = 0;
37450 bool_Bool chiper_present, addr_present;
37451 static int * const ieee80211_tag_multi_band_ctrl[] = {
37452 &hf_ieee80211_tag_multi_band_ctrl_sta_role,
37453 &hf_ieee80211_tag_multi_band_ctrl_addr_present,
37454 &hf_ieee80211_tag_multi_band_ctrl_cipher_present,
37455 NULL((void*)0)
37456 };
37457 static int * const ieee80211_tag_multi_band_conn[] = {
37458 &hf_ieee80211_tag_multi_band_conn_ap,
37459 &hf_ieee80211_tag_multi_band_conn_pcp,
37460 &hf_ieee80211_tag_multi_band_conn_dls,
37461 &hf_ieee80211_tag_multi_band_conn_tdls,
37462 &hf_ieee80211_tag_multi_band_conn_ibss,
37463 NULL((void*)0)
37464 };
37465
37466 if (tag_len < 22)
37467 {
37468 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);
37469 return tvb_captured_length(tvb);
37470 }
37471 chiper_present = (tvb_get_letohs(tvb, offset) & 0x08) >> 3;
37472 addr_present = (tvb_get_letohs(tvb, offset) & 0x10) >> 4;
37473 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_multi_band_ctrl, ENC_NA0x00000000);
37474 offset += 1;
37475 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37476 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_oper_class, tvb, offset, 1, ENC_NA0x00000000);
37477 offset += 1;
37478 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_channel_number, tvb, offset, 1, ENC_NA0x00000000);
37479 offset += 1;
37480 proto_tree_add_item(tree, hf_ieee80211_tag_bssid, tvb, offset, 6, ENC_NA0x00000000);
37481 offset += 6;
37482 offset += add_ff_beacon_interval(tree, tvb, pinfo, 2);
37483 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_tsf_offset, tvb, offset, 8, ENC_LITTLE_ENDIAN0x80000000);
37484 offset += 8;
37485
37486 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_multi_band_conn, ENC_NA0x00000000);
37487 offset += 1;
37488 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_fst_timeout, tvb, offset, 1, ENC_NA0x00000000);
37489 offset += 1;
37490 if(addr_present)
37491 {
37492 proto_tree_add_item(tree, hf_ieee80211_tag_multi_band_sta_mac, tvb, offset, 6, ENC_NA0x00000000);
37493 offset += 6;
37494 }
37495 if(chiper_present)
37496 {
37497 proto_item *rsn_pcs_count, *rsn_pcs_item, *rsn_sub_pcs_item;
37498 proto_tree *rsn_pcs_tree, *rsn_sub_pcs_tree;
37499 int ii;
37500 uint16_t pcs_count;
37501 int tag_end = tvb_reported_length(tvb);
37502 rsn_pcs_count = proto_tree_add_item_ret_uint16(tree, hf_ieee80211_rsn_pcs_count, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000, &pcs_count);
37503 offset += 2;
37504
37505 if (offset + (pcs_count * 4) > tag_end)
37506 {
37507 expert_add_info_format(pinfo, rsn_pcs_count, &ei_ieee80211_rsn_pcs_count,
37508 "Pairwise Cipher Suite Count too large, 4*%u > %d", pcs_count, tag_end - offset);
37509 pcs_count = (tag_end - offset) / 4;
37510 }
37511
37512 rsn_pcs_item = proto_tree_add_item(tree, hf_ieee80211_rsn_pcs_list, tvb, offset, pcs_count * 4, ENC_NA0x00000000);
37513 rsn_pcs_tree = proto_item_add_subtree(rsn_pcs_item, ett_rsn_pcs_tree);
37514 for (ii = 0; ii < pcs_count; ii++)
37515 {
37516 rsn_sub_pcs_item = proto_tree_add_item(rsn_pcs_tree, hf_ieee80211_rsn_pcs, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
37517 rsn_sub_pcs_tree = proto_item_add_subtree(rsn_sub_pcs_item, ett_rsn_sub_pcs_tree);
37518 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_oui, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
37519
37520 /* Check if OUI is 00:0F:AC (ieee80211) */
37521 if (tvb_get_ntoh24(tvb, offset) == OUI_RSN0x000FAC)
37522 {
37523 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_80211_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
37524 proto_item_append_text(rsn_pcs_item, " %s", rsn_pcs_return(pinfo->pool, tvb_get_ntohl(tvb, offset)));
37525 } else {
37526 proto_tree_add_item(rsn_sub_pcs_tree, hf_ieee80211_rsn_pcs_type, tvb, offset+3, 1, ENC_LITTLE_ENDIAN0x80000000);
37527 }
37528 offset += 4;
37529 }
37530 }
37531
37532 return tvb_captured_length(tvb);
37533}
37534
37535static int
37536ieee80211_tag_dmg_link_margin(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37537{
37538 int tag_len = tvb_reported_length(tvb);
37539 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37540 int offset = 0;
37541
37542 if (tag_len != 8)
37543 {
37544 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 8", tag_len);
37545 return tvb_captured_length(tvb);
37546 }
37547 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA0x00000000);
37548 offset += 1;
37549 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_mcs, tvb, offset, 1, ENC_NA0x00000000);
37550 offset += 1;
37551 proto_tree_add_item(tree, hf_ieee80211_tag_dmg_link_adapt_link_margin, tvb, offset, 1, ENC_NA0x00000000);
37552 offset += 1;
37553 proto_tree_add_item(tree, hf_ieee80211_ff_snr, tvb, offset, 1, ENC_NA0x00000000);
37554 offset += 1;
37555 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
37556 return tvb_captured_length(tvb);
37557}
37558
37559static int
37560ieee80211_tag_dmg_link_adaption_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37561{
37562 int tag_len = tvb_reported_length(tvb);
37563 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37564 int offset = 0;
37565
37566 if (tag_len != 5)
37567 {
37568 expert_add_info_format(pinfo, field_data->item_tag_length, &ei_ieee80211_tag_length, "Tag Length %u wrong, must be 5", tag_len);
37569 return tvb_captured_length(tvb);
37570 }
37571 proto_tree_add_item(tree, hf_ieee80211_tag_activity, tvb, offset, 1, ENC_NA0x00000000);
37572 offset += 1;
37573 proto_tree_add_item(tree, hf_ieee80211_tag_ref_timestamp, tvb, offset, 3, ENC_LITTLE_ENDIAN0x80000000);
37574 return tvb_captured_length(tvb);
37575}
37576
37577static int
37578ieee80211_tag_switching_stream(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37579{
37580 int tag_len = tvb_reported_length(tvb);
37581 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37582 int offset = 0;
37583 static int * const ieee80211_tag_switching_stream_flags[] = {
37584 &hf_ieee80211_tag_switching_stream_old_tid,
37585 &hf_ieee80211_tag_switching_stream_old_direction,
37586 &hf_ieee80211_tag_switching_stream_new_tid,
37587 &hf_ieee80211_tag_switching_stream_new_direction,
37588 &hf_ieee80211_tag_switching_stream_new_valid_id,
37589 &hf_ieee80211_tag_switching_stream_llt_type,
37590 NULL((void*)0)
37591 };
37592
37593 int param_num;
37594 if (tag_len < 4)
37595 {
37596 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);
37597 return tvb_captured_length(tvb);
37598 }
37599 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37600 offset += add_ff_band_id(tree, tvb, pinfo, 1);
37601 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_non_qos, tvb, offset, 1, ENC_NA0x00000000);
37602 offset += 1;
37603 param_num = tvb_get_letohs(tvb, offset);
37604 proto_tree_add_item(tree, hf_ieee80211_tag_switching_stream_param_num, tvb, offset, 1, ENC_NA0x00000000);
37605 offset += 1;
37606 while(param_num > 0)
37607 {
37608 proto_tree_add_bitmask_list(tree, tvb, offset, 1, ieee80211_tag_switching_stream_flags, ENC_NA0x00000000);
37609 param_num--;
37610 offset += 2;
37611 }
37612 return tvb_captured_length(tvb);
37613}
37614
37615static const range_string channel_usage_mode[] = {
37616 { 0, 0, "Channel-usage-aidable BSS" },
37617 { 1, 1, "Off-channel TDLS Direct Link" },
37618 { 2, 2, "Channel-usage-aidable BSS in which none of the channel-usage-aiding BSSs that belong to the same ESS" },
37619 { 3, 3, "Unavailability Indication" },
37620 { 4, 4, "Channel-usage-aidable BSS Channel Switch Request" },
37621 { 5, 5, "Capability Notification" },
37622 { 6, 254, "Reserved" },
37623 { 255, 255, "Unknown Request" },
37624 { 0, 0, NULL((void*)0) }
37625};
37626
37627static int
37628ieee80211_tag_channel_usage(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37629{
37630 int tag_len = tvb_reported_length(tvb);
37631 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37632 int offset = 0;
37633
37634 if (tag_len < 1)
37635 {
37636 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);
37637 return tvb_captured_length(tvb);
37638 }
37639
37640 proto_tree_add_item(tree, hf_ieee80211_tag_channel_usage_mode, tvb, offset, 1, ENC_NA0x00000000);
37641 offset += 1;
37642
37643 while (offset < tag_len) {
37644 offset += add_ff_operating_class(tree, tvb, pinfo, offset);
37645 offset += add_ff_channel(tree, tvb, pinfo, offset);
37646 }
37647
37648 return tvb_captured_length(tvb);
37649}
37650
37651static const range_string dms_req_type[] = {
37652 { 0, 0, "Add" },
37653 { 1, 1, "Remove" },
37654 { 2, 2, "Change" },
37655 { 3, 255, "Reserved" },
37656 { 0, 0, NULL((void*)0) }
37657};
37658
37659static int
37660ieee80211_tag_dms_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37661{
37662 int tag_len = tvb_reported_length(tvb);
37663 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37664 int offset = 0;
37665
37666 if (tag_len < 3)
37667 {
37668 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);
37669 return tvb_captured_length(tvb);
37670 }
37671
37672 proto_tree_add_item(tree, hf_ieee80211_tag_dms_id, tvb, offset, 1, ENC_NA0x00000000);
37673 offset += 1;
37674
37675 proto_tree_add_item(tree, hf_ieee80211_tag_dms_length, tvb, offset, 1, ENC_NA0x00000000);
37676 offset += 1;
37677
37678 proto_tree_add_item(tree, hf_ieee80211_tag_dms_req_type, tvb, offset, 1, ENC_NA0x00000000);
37679 offset += 1;
37680
37681 /* There will be at least one tclass element ... */
37682 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37683 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
37684 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37685 }
37686 /* There could be a TCLAS PROCESS element ... */
37687 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37688 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
37689 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37690 }
37691 /* There could be a TSPEC element ... */
37692 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37693 tvb_get_uint8(tvb, offset) == TAG_TSPEC13) {
37694 /*offset += */add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37695 }
37696 /* Subelements? */
37697
37698 return tvb_captured_length(tvb);
37699}
37700
37701static const range_string dms_resp_type[] = {
37702 { 0, 0, "Accept" },
37703 { 1, 1, "Denied" },
37704 { 2, 2, "Terminate" },
37705 { 3, 3, "GCR Advertise" },
37706 { 4, 255, "Reserved" },
37707 { 0, 0, NULL((void*)0) }
37708};
37709
37710static int
37711ieee80211_tag_dms_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
37712{
37713 int tag_len = tvb_reported_length(tvb);
37714 ieee80211_tagged_field_data_t* field_data = (ieee80211_tagged_field_data_t*)data;
37715 int offset = 0;
37716
37717 if (tag_len < 5)
37718 {
37719 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);
37720 return tvb_captured_length(tvb);
37721 }
37722
37723 proto_tree_add_item(tree, hf_ieee80211_tag_dms_id, tvb, offset, 1, ENC_NA0x00000000);
37724 offset += 1;
37725
37726 proto_tree_add_item(tree, hf_ieee80211_tag_dms_length, tvb, offset, 1, ENC_NA0x00000000);
37727 offset += 1;
37728
37729 proto_tree_add_item(tree, hf_ieee80211_tag_dms_resp_type, tvb, offset, 1, ENC_NA0x00000000);
37730 offset += 1;
37731
37732 proto_tree_add_item(tree, hf_ieee80211_tag_dms_last_seq_control, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
37733 offset += 2;
37734
37735 /* There will be at least one tclass element ... */
37736 while ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37737 tvb_get_uint8(tvb, offset) == TAG_TCLAS14) {
37738 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37739 }
37740 /* There could be a TCLAS PROCESS element ... */
37741 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37742 tvb_get_uint8(tvb, offset) == TAG_TCLAS_PROCESS44) {
37743 offset += add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37744 }
37745 /* There could be a TSPEC element ... */
37746 if ((tvb_captured_length_remaining(tvb, offset) > 0) &&
37747 tvb_get_uint8(tvb, offset) == TAG_TSPEC13) {
37748 /*offset += */add_tagged_field(pinfo, tree, tvb, offset, 0, NULL((void*)0), 0, NULL((void*)0));
37749 }
37750 /* Subelements? */
37751
37752 return tvb_captured_length(tvb);
37753}
37754
37755static void
37756ieee_80211_add_tagged_parameters(tvbuff_t *tvb, int offset, packet_info *pinfo,
37757 proto_tree *tree, int tagged_parameters_len, int ftype,
37758 association_sanity_check_t *association_sanity_check)
37759{
37760 int next_len;
37761 beacon_padding = 0; /* this is for the beacon padding confused with ssid fix */
37762 while (tagged_parameters_len > 0) {
37763 uint8_t tag_no = tvb_get_uint8(tvb, offset);
37764
37765 /* TODO make callers optionally specify the list of valid IE IDs? */
37766 if ((next_len=add_tagged_field (pinfo, tree, tvb, offset, ftype, NULL((void*)0), 0, association_sanity_check)) == 0)
37767 break;
37768 if (next_len > tagged_parameters_len) {
37769 /* XXX - flag this as an error? */
37770 next_len = tagged_parameters_len;
37771 }
37772 offset += next_len;
37773 tagged_parameters_len -= next_len;
37774
37775 /* If FILS is used, all data after the FILS Session tag in a (re)association message is encrypted */
37776 if (association_sanity_check != NULL((void*)0) && association_sanity_check->has_fils_session) {
37777 proto_tree_add_item(tree, hf_ieee80211_fils_encrypted_data, tvb, offset, tagged_parameters_len, ENC_NA0x00000000);
37778 break;
37779 }
37780
37781 /* In an AMPE frame the data following the MIC element is encrypted */
37782 if ((tag_no == TAG_MIC140) && (association_sanity_check != NULL((void*)0)) && association_sanity_check->ampe_frame) {
37783 proto_tree_add_item(tree, hf_ieee80211_mesh_ampe_encrypted_data, tvb, offset, tagged_parameters_len, ENC_NA0x00000000);
37784 break;
37785 }
37786 }
37787}
37788
37789static void
37790ieee_80211_do_association_sanity_check(packet_info *pinfo, association_sanity_check_t *sanity_check)
37791{
37792 /* Given a [re-]association request frame, consider it in its totality and
37793 add expert information as appropriate */
37794
37795 if (sanity_check->association_has_mobility_domain_element) {
37796 /* This is an FT association, warn about any non-FT AKM suites */
37797 if (sanity_check->has_non_ft_akm_suite) {
37798 expert_add_info_format(pinfo, sanity_check->rsn_first_non_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
37799 "Non-FT AKM suite is prohibited for FT association request");
37800 }
37801 } else {
37802 /* This is a non-FT association, warn about any FT AKM suites */
37803 if (sanity_check->has_ft_akm_suite) {
37804 expert_add_info_format(pinfo, sanity_check->rsn_first_ft_akm_suite, &ei_ieee80211_mismatched_akm_suite,
37805 "FT AKM suite is prohibited for non-FT association request");
37806 }
37807 }
37808}
37809
37810static conversation_t *find_or_create_wlan_conversation(packet_info *pinfo)
37811{
37812 /* HACK to avoid collision with conversation in EAP dissector */
37813 pinfo->srcport = GPOINTER_TO_UINT(((guint) (gulong) (p_get_proto_data(wmem_file_scope(), pinfo,
proto_wlan, ASSOC_COUNTER_KEY)))
37814 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)))
;
37815 pinfo->destport = pinfo->srcport;
37816 return find_or_create_conversation(pinfo);
37817}
37818
37819static ieee80211_conversation_data_t* get_or_create_conversation_data(conversation_t *conversation) {
37820 ieee80211_conversation_data_t *conversation_data = (ieee80211_conversation_data_t*)conversation_get_proto_data(conversation, proto_wlan);
37821 if (!conversation_data) {
37822 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)))
;
37823 conversation_add_proto_data(conversation, proto_wlan, conversation_data);
37824 }
37825 memset(conversation_data, 0, sizeof(ieee80211_conversation_data_t));
37826 return conversation_data;
37827}
37828
37829/* ************************************************************************* */
37830/* Dissect 802.11 management frame */
37831/* ************************************************************************* */
37832static void dissect_mgt_action(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset, association_sanity_check_t *sanity_check)
37833{
37834 proto_item *lcl_fixed_hdr;
37835 proto_tree *lcl_fixed_tree;
37836 proto_tree *tagged_tree;
37837 int tagged_parameter_tree_len;
37838
37839 lcl_fixed_tree = proto_tree_add_subtree(tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
37840 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0, sanity_check);
37841
37842 proto_item_set_len(lcl_fixed_hdr, offset);
37843 if (ieee80211_tvb_invalid)
37844 return; /* Buffer not available for further processing */
37845 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
37846 if (tagged_parameter_tree_len > 0) {
37847 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
37848 tagged_parameter_tree_len);
37849 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37850 tagged_parameter_tree_len, MGT_ACTION0x0D,
37851 sanity_check);
37852 }
37853}
37854
37855static void
37856dissect_ieee80211_mgt(uint16_t fcf, tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
37857{
37858 proto_item *ti;
37859 proto_tree *mgt_tree;
37860 proto_tree *fixed_tree;
37861 proto_tree *tagged_tree;
37862 int offset = 0;
37863 int tagged_parameter_tree_len;
37864 bool_Bool is_s1g = sta_is_s1g(pinfo);
37865
37866 conversation_t *conversation;
37867 ieee80211_conversation_data_t *conversation_data;
37868
37869 association_sanity_check_t association_sanity_check;
37870 memset(&association_sanity_check, 0, sizeof(association_sanity_check));
37871
37872
37873 ieee80211_tvb_invalid = false0;
37874
37875 ti = proto_tree_add_item(tree, hf_ieee80211_mgt, tvb, 0, -1, ENC_NA0x00000000);
37876 mgt_tree = proto_item_add_subtree(ti, ett_80211_mgt);
37877 /*
37878 * Add the frame type to the pinfo for those cases where it is needed
37879 * to determine other things.
37880 * XXX - Is there any reason why this is file scoped? Couldn't this
37881 * be pinfo->pool?
37882 */
37883 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)))))
);
37884
37885 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)))
)
37886 {
37887
37888 case MGT_ASSOC_REQ0x00:
37889 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 4, false0);
37890 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37891 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
37892 offset = 4; /* Size of fixed fields */
37893
37894 tagged_parameter_tree_len =
37895 tvb_reported_length_remaining(tvb, offset);
37896 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37897 tagged_parameter_tree_len);
37898 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37899 tagged_parameter_tree_len, MGT_ASSOC_REQ0x00, &association_sanity_check);
37900 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
37901
37902 if (!pinfo->fd->visited) {
37903 association_counter++;
37904 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
37905 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
37906 }
37907 conversation = find_or_create_wlan_conversation(pinfo);
37908 conversation_data = get_or_create_conversation_data(conversation);
37909 set_conversation_last_akm_suite(conversation_data,
37910 association_sanity_check.last_akm_suite);
37911 conversation_data->owe_group = association_sanity_check.owe_group;
37912 break;
37913
37914
37915 case MGT_ASSOC_RESP0x01:
37916 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, is_s1g ? 4 : 6,
37917 false0);
37918 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37919 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
37920 if (!is_s1g) {
37921 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
37922 offset = 6; /* Size of fixed fields */
37923 } else {
37924 offset = 4;
37925 }
37926
37927 tagged_parameter_tree_len =
37928 tvb_reported_length_remaining(tvb, offset);
37929 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37930 tagged_parameter_tree_len);
37931 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37932 tagged_parameter_tree_len, MGT_ASSOC_RESP0x01, &association_sanity_check);
37933 break;
37934
37935
37936 case MGT_REASSOC_REQ0x02:
37937 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 10, false0);
37938 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37939 add_ff_listen_ival(fixed_tree, tvb, pinfo, 2);
37940 add_ff_current_ap_addr(fixed_tree, tvb, pinfo, 4);
37941 offset = 10; /* Size of fixed fields */
37942
37943 tagged_parameter_tree_len =
37944 tvb_reported_length_remaining(tvb, offset);
37945 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37946 tagged_parameter_tree_len);
37947 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37948 tagged_parameter_tree_len, MGT_REASSOC_REQ0x02, &association_sanity_check);
37949 ieee_80211_do_association_sanity_check(pinfo, &association_sanity_check);
37950
37951 if (!pinfo->fd->visited) {
37952 association_counter++;
37953 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
37954 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
37955 }
37956 conversation = find_or_create_wlan_conversation(pinfo);
37957 conversation_data = get_or_create_conversation_data(conversation);
37958 set_conversation_last_akm_suite(conversation_data,
37959 association_sanity_check.last_akm_suite);
37960 conversation_data->owe_group = association_sanity_check.owe_group;
37961 break;
37962
37963 case MGT_REASSOC_RESP0x03:
37964 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 6, false0);
37965 add_ff_cap_info(fixed_tree, tvb, pinfo, 0);
37966 add_ff_status_code(fixed_tree, tvb, pinfo, 2);
37967 if (!is_s1g) {
37968 add_ff_assoc_id(fixed_tree, tvb, pinfo, 4);
37969 offset = 6; /* Size of fixed fields */
37970 } else {
37971 offset = 4;
37972 }
37973
37974 tagged_parameter_tree_len =
37975 tvb_reported_length_remaining(tvb, offset);
37976 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37977 tagged_parameter_tree_len);
37978 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37979 tagged_parameter_tree_len, MGT_REASSOC_RESP0x03, &association_sanity_check);
37980 break;
37981
37982
37983 case MGT_PROBE_REQ0x04:
37984 offset = 0;
37985 tagged_parameter_tree_len =
37986 tvb_reported_length_remaining(tvb, offset);
37987 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
37988 tagged_parameter_tree_len);
37989 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
37990 tagged_parameter_tree_len, MGT_PROBE_REQ0x04, NULL((void*)0));
37991 break;
37992
37993 case MGT_PROBE_RESP0x05:
37994 {
37995 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
37996 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
37997 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
37998 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
37999 offset = 12; /* Size of fixed fields */
38000
38001 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
38002 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
38003 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_PROBE_RESP0x05, NULL((void*)0));
38004 break;
38005 }
38006 case MGT_MEASUREMENT_PILOT0x06:
38007 {
38008 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
38009 offset += add_ff_timestamp(fixed_tree, tvb, pinfo, offset);
38010 offset += add_ff_measurement_pilot_int(fixed_tree, tvb, pinfo, offset);
38011 offset += add_ff_beacon_interval(fixed_tree, tvb, pinfo, offset);
38012 offset += add_ff_cap_info(fixed_tree, tvb, pinfo, offset);
38013 offset += add_ff_country_str(fixed_tree, tvb, pinfo, offset);
38014 offset += add_ff_max_reg_pwr(fixed_tree, tvb, pinfo, offset);
38015 offset += add_ff_max_tx_pwr(fixed_tree, tvb, pinfo, offset);
38016 offset += add_ff_tx_pwr_used(fixed_tree, tvb, pinfo, offset);
38017 offset += add_ff_transceiver_noise_floor(fixed_tree, tvb, pinfo, offset);
38018 /* TODO DS Parameter Set ??? */
38019
38020 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
38021 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset, tagged_parameter_tree_len);
38022 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree, tagged_parameter_tree_len, MGT_MEASUREMENT_PILOT0x06, NULL((void*)0));
38023 break;
38024 }
38025 case MGT_BEACON0x08: /* Dissect protocol payload fields */
38026 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 12, false0);
38027 add_ff_timestamp(fixed_tree, tvb, pinfo, 0);
38028 add_ff_beacon_interval(fixed_tree, tvb, pinfo, 8);
38029 add_ff_cap_info(fixed_tree, tvb, pinfo, 10);
38030 offset = 12; /* Size of fixed fields */
38031
38032 tagged_parameter_tree_len =
38033 tvb_reported_length_remaining(tvb, offset);
38034 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
38035 tagged_parameter_tree_len);
38036 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
38037 tagged_parameter_tree_len, MGT_BEACON0x08, NULL((void*)0));
38038 break;
38039
38040 case MGT_ATIM0x09:
38041 break;
38042
38043 case MGT_DISASS0x0A:
38044 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2, false0);
38045 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
38046 offset = 2; /* Size of fixed fields */
38047 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
38048 if (tagged_parameter_tree_len > 0) {
38049 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
38050 tagged_parameter_tree_len);
38051 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
38052 tagged_parameter_tree_len, MGT_DISASS0x0A, NULL((void*)0));
38053 }
38054
38055 conversation = find_wlan_conversation_pinfo(pinfo);
38056 if (conversation) {
38057 conversation_delete_proto_data(conversation, proto_wlan);
38058 }
38059 break;
38060
38061 case MGT_AUTHENTICATION0x0B:
38062 offset = 6; /* Size of fixed fields */
38063
38064 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, offset, true1);
38065 offset = dissect_auth_frame(fixed_tree, pinfo, tvb);
38066 proto_item_append_text(fixed_tree, " (%d bytes)", offset);
38067 proto_item_set_len(fixed_tree, offset);
38068
38069 tagged_parameter_tree_len =
38070 tvb_reported_length_remaining(tvb, offset);
38071 if (tagged_parameter_tree_len > 0)
38072 {
38073 tagged_tree = get_tagged_parameter_tree(mgt_tree,
38074 tvb,
38075 offset,
38076 tagged_parameter_tree_len);
38077 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
38078 tagged_parameter_tree_len, MGT_AUTHENTICATION0x0B, NULL((void*)0));
38079 }
38080 break;
38081
38082 case MGT_DEAUTHENTICATION0x0C:
38083 fixed_tree = get_fixed_parameter_tree(mgt_tree, tvb, 0, 2, false0);
38084 add_ff_reason_code(fixed_tree, tvb, pinfo, 0);
38085 offset = 2; /* Size of fixed fields */
38086 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
38087 if (tagged_parameter_tree_len > 0) {
38088 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
38089 tagged_parameter_tree_len);
38090 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
38091 tagged_parameter_tree_len, MGT_DEAUTHENTICATION0x0C, NULL((void*)0));
38092 }
38093
38094 conversation = find_wlan_conversation_pinfo(pinfo);
38095 if (conversation) {
38096 conversation_delete_proto_data(conversation, proto_wlan);
38097 }
38098 break;
38099
38100 case MGT_ACTION0x0D:
38101 dissect_mgt_action(tvb, pinfo, mgt_tree, offset, &association_sanity_check);
38102 break;
38103
38104 case MGT_ACTION_NO_ACK0x0E:
38105 {
38106 proto_item *lcl_fixed_hdr;
38107 proto_tree *lcl_fixed_tree;
38108 lcl_fixed_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, &lcl_fixed_hdr, "Fixed parameters");
38109
38110 offset += add_ff_action(lcl_fixed_tree, tvb, pinfo, 0, NULL((void*)0));
38111
38112 proto_item_set_len(lcl_fixed_hdr, offset);
38113 if (ieee80211_tvb_invalid)
38114 break; /* Buffer not available for further processing */
38115 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
38116 if (tagged_parameter_tree_len > 0)
38117 {
38118 tagged_tree = get_tagged_parameter_tree(mgt_tree, tvb, offset,
38119 tagged_parameter_tree_len);
38120 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
38121 tagged_parameter_tree_len, MGT_ACTION_NO_ACK0x0E, NULL((void*)0));
38122 }
38123 break;
38124 }
38125 case MGT_ARUBA_WLAN0x0F:
38126 {
38127 proto_tree *aruba_tree;
38128 uint16_t type;
38129 type = tvb_get_ntohs(tvb, offset);
38130
38131 aruba_tree = proto_tree_add_subtree(mgt_tree, tvb, 0, 0, ett_fixed_parameters, NULL((void*)0), "Aruba Management");
38132
38133 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
38134 offset += 2;
38135 switch(type){
38136 case 0x0003: /* MTU Size */
38137 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_mtu, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
38138 break;
38139 case 0x0005: /* HeartBeat Sequence */
38140 proto_tree_add_item(aruba_tree, hf_ieee80211_aruba_hb_seq, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
38141 break;
38142 }
38143 break;
38144 }
38145 }
38146}
38147
38148/*
38149 * Dissect a Block Ack request (which is also used in Trigger frames).
38150 */
38151static int * const block_ack_control_headers[] = {
38152 &hf_ieee80211_block_ack_control_ack_policy,
38153 &hf_ieee80211_block_ack_control_type,
38154 &hf_ieee80211_block_ack_control_reserved,
38155 &hf_ieee80211_block_ack_control_tid_info,
38156 NULL((void*)0)
38157};
38158
38159static int * const multi_sta_aid_tid_headers[] = {
38160 &hf_ieee80211_block_ack_multi_sta_aid11,
38161 &hf_ieee80211_block_ack_multi_sta_ack_type,
38162 &hf_ieee80211_block_ack_multi_sta_tid,
38163 NULL((void*)0)
38164};
38165
38166/*
38167 * These bits are shown in reverse order in the spec.
38168 */
38169#define BASIC_BLOCK_ACK0x0 0x0
38170#define EXTENDED_COMPRESSED_BLOCK_ACK0x1 0x1
38171#define COMPRESSED_BLOCK_ACK0x2 0x2
38172#define MULTI_TID_BLOCK_ACK0x3 0x3
38173#define GCR_BLOCK_ACK0x6 0x6
38174#define GLK_GCR_BLOCK_ACK0xA 0xA
38175#define MULTI_STA_BLOCK_ACK0xB 0xB
38176
38177static const value_string block_ack_type_vals[] = {
38178 { BASIC_BLOCK_ACK0x0, "Basic BlockAck" },
38179 { EXTENDED_COMPRESSED_BLOCK_ACK0x1, "Extended Compressed BlockAck" },
38180 { COMPRESSED_BLOCK_ACK0x2, "Compressed BlockAck" },
38181 { MULTI_TID_BLOCK_ACK0x3, "Multi-TID BlockAck" },
38182 { GCR_BLOCK_ACK0x6, "GCR BlockAck" },
38183 { GLK_GCR_BLOCK_ACK0xA, "GLK-GCR BlockAck" },
38184 { MULTI_STA_BLOCK_ACK0xB, "Multi-STA BlockAck" },
38185 { 0, NULL((void*)0) }
38186};
38187
38188static int
38189dissect_ieee80211_block_ack_bitmap(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
38190 proto_tree *tree, int offset, uint16_t ssn, unsigned bitmap_size)
38191{
38192 uint64_t bitmap;
38193 uint16_t last_ack_frame_pos = 0;
38194 int f;
38195 int i;
38196 unsigned j;
38197
38198 proto_item *ba_bitmap_item = proto_tree_add_item(tree,
38199 hf_ieee80211_block_ack_bitmap,
38200 tvb, offset, bitmap_size, ENC_NA0x00000000);
38201 proto_item *ba_bitmap_tree = proto_item_add_subtree(ba_bitmap_item,
38202 ett_block_ack_bitmap);
38203 proto_item * last_ack_frame_item;
38204
38205 /* Handle bitmap_size = 4 for Multi-STA block ack */
38206 if (bitmap_size == 4)
38207 {
38208 bitmap = tvb_get_letohl(tvb, offset);
38209
38210 if (bitmap != 0)
38211 last_ack_frame_pos = ws_ilog2(bitmap);
38212
38213 for (f = 0; f < last_ack_frame_pos && f < 32; f++) {
38214 if (bitmap & (UINT64_C(1)1UL << f))
38215 continue;
38216 proto_tree_add_uint_format_value(ba_bitmap_tree,
38217 hf_ieee80211_block_ack_bitmap_missing_frame,
38218 tvb, offset + (f/8), 1, ssn + f, "%u",
38219 (ssn + f) & 0x0fff);
38220 }
38221
38222 } else {
38223 /* Browse the bitmap backwards to find the last acknowledged frame */
38224 for (i = bitmap_size - 8; i >= 0; i -= 8) {
38225 bitmap = tvb_get_letoh64(tvb, offset + i);
38226
38227 if (bitmap == 0)
38228 continue;
38229
38230 last_ack_frame_pos = i * 8 + ws_ilog2(bitmap);
38231 break;
38232 }
38233
38234 /* Browse the bitmap up to the last the last acknowledged frame */
38235 for (j = 0; j < bitmap_size * 8; j += 64) {
38236 bitmap = tvb_get_letoh64(tvb, offset + j/8);
38237 for (f = 0; f < 64 && (f + j) < last_ack_frame_pos; f++) {
38238 if (bitmap & (UINT64_C(1)1UL << f))
38239 continue;
38240 proto_tree_add_uint_format_value(ba_bitmap_tree,
38241 hf_ieee80211_block_ack_bitmap_missing_frame,
38242 tvb, offset + ((f + j)/8), 1, ssn + f + j, "%u",
38243 (ssn + f + j) & 0x0fff);
38244 }
38245 }
38246 }
38247
38248 last_ack_frame_item = proto_tree_add_uint_format_value(ba_bitmap_tree,
38249 hf_ieee80211_block_ack_bitmap_last_ack_frame,
38250 tvb, offset + (last_ack_frame_pos/8), 1, ssn + last_ack_frame_pos, "%u",
38251 (ssn + last_ack_frame_pos) & 0x0fff);
38252 proto_item_set_generated(last_ack_frame_item);
38253
38254 return offset + bitmap_size;
38255}
38256
38257static int
38258dissect_ieee80211_block_ack_details(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
38259 proto_tree *tree, int offset, bool_Bool isDMG, bool_Bool is_req, bool_Bool has_fcs)
38260{
38261 proto_item *pi;
38262 uint16_t ba_control;
38263 uint8_t block_ack_type;
38264 proto_tree *ba_tree;
38265 uint8_t tid_count, frag_num;
38266 unsigned i;
38267 proto_tree *ba_mtid_tree, *ba_mtid_sub_tree;
38268 uint16_t ssn;
38269 uint16_t aid_tid;
38270 proto_tree *ba_multi_sta_tree;
38271 int ba_start = offset;
38272
38273 ba_control = tvb_get_letohs(tvb, offset);
38274 block_ack_type = (ba_control & 0x001E) >> 1;
38275 ba_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_block_ack,
38276 &pi, is_req ? "%s Request" : "%s Response",
38277 val_to_str(pinfo->pool, block_ack_type, block_ack_type_vals,
38278 "Reserved (%d)"));
38279 proto_tree_add_bitmask_with_flags(ba_tree, tvb, offset,
38280 hf_ieee80211_block_ack_control,
38281 ett_block_ack_request_control,
38282 block_ack_control_headers,
38283 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38284 offset += 2;
38285
38286 switch (block_ack_type) {
38287 case BASIC_BLOCK_ACK0x0:
38288 if (isDMG == true1) {
38289 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
38290 "DMG STAs shouldn't transmit BlockAckReq frames "
38291 "with Basic BlockAckReqs");
38292 }
38293
38294 /* Both request and response have an SSC */
38295 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
38296
38297 if (!is_req) {
38298 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_bitmap, tvb, offset,
38299 128, ENC_NA0x00000000);
38300 offset += 128;
38301 }
38302 break;
38303
38304 case COMPRESSED_BLOCK_ACK0x2:
38305 ssn = tvb_get_letohs(tvb, offset);
38306 frag_num = ssn & 0x0F;
38307 ssn >>= 4;
38308 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
38309
38310 if (!is_req) {
38311 unsigned bytes = 0;
38312 if (((frag_num & 0x06) >> 1) == 2) {
38313 bytes = 32;
38314 } else if ((frag_num & 0x0f) == 0x08) {
38315 bytes = 64;
38316 } else if ((frag_num & 0x0f) == 0x0A) {
38317 bytes = 128;
38318 } else { /* Default length */
38319 bytes = 8;
38320 }
38321
38322 offset = dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_tree, offset, ssn, bytes);
38323 }
38324 break;
38325
38326 case EXTENDED_COMPRESSED_BLOCK_ACK0x1:
38327 if (isDMG == false0) {
38328 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
38329 "Non-DMG STAs shouldn't transmit BlockAckReq "
38330 "frames with Extended Compressed BlockAckReqs");
38331 }
38332
38333 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
38334
38335 if (!is_req) {
38336 ssn = tvb_get_letohs(tvb, offset);
38337 ssn >>= 4;
38338
38339 dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_tree, offset, ssn, 8);
38340 offset += 8;
38341 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_RBUFCAP, tvb, offset,
38342 1, ENC_LITTLE_ENDIAN0x80000000);
38343 offset += 1;
38344 }
38345 break;
38346
38347 case MULTI_TID_BLOCK_ACK0x3:
38348
38349 if (isDMG == true1) {
38350 expert_add_info_format(pinfo, ba_tree, &ei_ieee80211_dmg_subtype,
38351 "DMG STAs shouldn't transmit BlockAckReq frames "
38352 "with Multi-TID BlockAckReqs");
38353 }
38354
38355 tid_count = ((ba_control & 0xF000) >> 12) + 1;
38356 if (is_req) {
38357 ba_mtid_tree = proto_tree_add_subtree(ba_tree, tvb, offset, tid_count*4,
38358 ett_block_ack, NULL((void*)0), "TID List");
38359 for (i = 0; i < tid_count; i++) {
38360 uint8_t tid = tvb_get_uint8(tvb, offset) & 0x0F;
38361 ba_mtid_sub_tree = proto_tree_add_subtree_format(ba_mtid_tree, tvb,
38362 offset, 4, ett_block_ack_tid, NULL((void*)0),
38363 "TID %u details", tid);
38364
38365 proto_tree_add_item(ba_mtid_sub_tree,
38366 hf_ieee80211_block_ack_multi_tid_reserved, tvb, offset, 2,
38367 ENC_LITTLE_ENDIAN0x80000000);
38368 proto_tree_add_item(ba_mtid_sub_tree,
38369 hf_ieee80211_block_ack_multi_tid_value, tvb, offset, 2,
38370 ENC_LITTLE_ENDIAN0x80000000);
38371 offset += 2;
38372
38373 offset += add_ff_block_ack_ssc(ba_mtid_sub_tree, tvb, pinfo, offset);
38374 }
38375 } else {
38376 ba_mtid_tree = proto_tree_add_subtree(ba_tree, tvb, offset, tid_count*4,
38377 ett_block_ack, NULL((void*)0), "TID List");
38378 for (i = 0; i < tid_count; i++) {
38379 uint8_t tid = tvb_get_uint8(tvb, offset) & 0x0F;
38380 ba_mtid_sub_tree = proto_tree_add_subtree_format(ba_mtid_tree, tvb,
38381 offset, 4, ett_block_ack_tid, NULL((void*)0),
38382 "TID %u details", tid);
38383
38384 proto_tree_add_item(ba_mtid_sub_tree,
38385 hf_ieee80211_block_ack_multi_tid_reserved,
38386 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38387 proto_tree_add_item(ba_mtid_sub_tree,
38388 hf_ieee80211_block_ack_multi_tid_value, tvb,
38389 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38390 offset += 2;
38391
38392 offset += add_ff_block_ack_ssc(ba_mtid_sub_tree, tvb, pinfo, offset);
38393 proto_tree_add_item(ba_mtid_sub_tree,
38394 hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA0x00000000);
38395 offset += 8;
38396 }
38397 }
38398 break;
38399
38400 case GCR_BLOCK_ACK0x6:
38401 offset += add_ff_block_ack_ssc(ba_tree, tvb, pinfo, offset);
38402
38403 proto_tree_add_item(ba_tree, hf_ieee80211_block_ack_gcr_addr, tvb,
38404 offset, 6, ENC_NA0x00000000);
38405 offset += 6;
38406
38407 if (!is_req) {
38408 proto_tree_add_item(ba_tree,
38409 hf_ieee80211_block_ack_bitmap, tvb, offset, 8, ENC_NA0x00000000);
38410 offset += 8;
38411 }
38412 break;
38413
38414 case MULTI_STA_BLOCK_ACK0xB:
38415 while (tvb_reported_length_remaining(tvb, offset) > (has_fcs ? 4U : 0U)) {
38416 int start = offset;
38417 proto_item *msta_ti = NULL((void*)0);
38418 aid_tid = tvb_get_letohs(tvb, offset);
38419 ba_multi_sta_tree = proto_tree_add_subtree_format(ba_tree, tvb, offset, -1,
38420 ett_multi_sta_block_ack, &msta_ti,
38421 "Per AID TID Info: 0x%0x", aid_tid & 0x07ff);
38422 proto_tree_add_bitmask_with_flags(ba_multi_sta_tree, tvb, offset,
38423 hf_ieee80211_block_ack_multi_sta_aid_tid,
38424 ett_block_ack_request_multi_sta_aid_tid,
38425 multi_sta_aid_tid_headers,
38426 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38427 offset += 2;
38428
38429 if ((aid_tid & 0x07ff) != 2045) {
38430 if (((aid_tid & 0x0800) == 0) && ((aid_tid & 0xf000) >> 12) <= 7) {
38431 unsigned bitmap_size;
38432 ssn = tvb_get_letohs(tvb, offset);
38433 frag_num = ssn & 0x0F;
38434 ssn >>= 4;
38435 offset += add_ff_block_ack_ssc(ba_multi_sta_tree, tvb, pinfo, offset);
38436 if ((frag_num & 0x0f) == 0x8 || (frag_num & 0x0f) == 0xA) {
38437 bitmap_size = (frag_num & 0x0f) == 8 ? 64 : 128;
38438 } else {
38439 bitmap_size = ((frag_num + 2) & 0x6) >> 1; /* Turn into an exponent */
38440 bitmap_size = 4 << bitmap_size; /* It goes 4, 8, 16, 32 */
38441 }
38442 offset = dissect_ieee80211_block_ack_bitmap(tvb, pinfo, ba_multi_sta_tree, offset, ssn, bitmap_size);
38443 }
38444 } else {
38445 offset += add_ff_block_ack_ssc(ba_multi_sta_tree, tvb, pinfo, offset);
38446 proto_tree_add_item(ba_multi_sta_tree, hf_ieee80211_block_ack_multi_sta_reserved,
38447 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38448 offset += 2;
38449 proto_tree_add_item(ba_multi_sta_tree, hf_ieee80211_block_ack_multi_sta_ra,
38450 tvb, offset, 6, ENC_NA0x00000000);
38451 offset += 6;
38452 }
38453 proto_item_set_len(msta_ti, offset - start);
38454 }
38455 break;
38456 }
38457 proto_item_set_len(pi, offset - ba_start);
38458
38459 return offset;
38460}
38461
38462static void
38463dissect_ieee80211_block_ack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
38464 proto_tree *tree, int offset, bool_Bool isDMG, bool_Bool is_req, bool_Bool has_fcs)
38465{
38466 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
38467 offset += 6;
38468
38469 dissect_ieee80211_block_ack_details(tvb, pinfo, tree, offset, isDMG, is_req, has_fcs);
38470}
38471
38472/*
38473 * Dissect an 802.11ax HE Trigger frame and return the actual len including
38474 * padding!
38475 */
38476
38477typedef enum he_trigger_type {
38478 TRIGGER_TYPE_BASIC = 0,
38479 TRIGGER_TYPE_BRP,
38480 TRIGGER_TYPE_MU_BAR,
38481 TRIGGER_TYPE_MU_RTS,
38482 TRIGGER_TYPE_BSRP,
38483 TRIGGER_TYPE_GCR_MU_BAR,
38484 TRIGGER_TYPE_BQRP,
38485 TRIGGER_TYPE_NFRP,
38486 TRIGGER_TYPE_RANGING,
38487 TRIGGER_TYPE_MIN_RESERVED,
38488} he_trigger_type_t;
38489
38490typedef enum he_trigger_subtype {
38491 TRIGGER_SUBTYPE_POLL = 0,
38492 TRIGGER_SUBTYPE_SOUNDING,
38493 TRIGGER_SUBTYPE_SECURE_SOUNDING,
38494 TRIGGER_SUBTYPE_REPORT,
38495 TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE,
38496 TRIGGER_SUBTYPE_MIN_RESERVED,
38497} he_trigger_subtype_t;
38498
38499static const val64_string trigger_type_vals[] = {
38500 { 0, "Basic" },
38501 { 1, "Beamforming Report Poll (BRP)" },
38502 { 2, "MU-BAR" },
38503 { 3, "MU-RTS" },
38504 { 4, "Buffer Status Report Poll (BSRP)" },
38505 { 5, "GCR MU-BAR" },
38506 { 6, "Bandwidth Query Report Poll (BQRP)" },
38507 { 7, "NDP Feedback Report Poll (NFRP)" },
38508 { 8, "Ranging" },
38509 /* 9-15 reserved */
38510 { 0, NULL((void*)0) }
38511};
38512
38513static const val64_string bw_subfield_vals[] = {
38514 { 0, "20 MHz" },
38515 { 1, "40 MHz" },
38516 { 2, "80 MHz" },
38517 { 3, "80+80 MHz or 160 MHz" },
38518 { 0, NULL((void*)0) }
38519};
38520
38521static const val64_string gi_and_ltf_type_subfield_vals[] = {
38522 { 0, "1x LTF + 1.6 us GI" },
38523 { 1, "2x LTF + 1.6 us GI" },
38524 { 2, "4x LTF + 3.2 us GI" },
38525 { 3, "Reserved" },
38526 { 0, NULL((void*)0) }
38527};
38528
38529static const true_false_string mu_mimo_ltf_mode_tfs = {
38530 "HE masked HE LTF sequence mode",
38531 "HE single stream pilot HE LTF mode"
38532};
38533
38534static int * const he_trig_frm_bar_ctrl_fields[] = {
38535 &hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy,
38536 &hf_ieee80211_he_trigger_bar_ctrl_ba_type,
38537 &hf_ieee80211_he_trigger_bar_ctrl_reserved,
38538 &hf_ieee80211_he_trigger_bar_ctrl_tid_info,
38539 NULL((void*)0)
38540};
38541
38542static int * const he_trig_frm_bar_info_fields[] = {
38543 &hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl,
38544 NULL((void*)0)
38545};
38546
38547#define PRE_FEC_PADDING_FACTOR0x3 0x3
38548#define PE_DISAMBIGUITY0x4 0x4
38549
38550static void
38551ap_tx_power_custom(char *result, uint32_t ap_tx_power)
38552{
38553 if (ap_tx_power > 60)
38554 snprintf(result, ITEM_LABEL_LENGTH240, "%s", "Reserved");
38555 else
38556 snprintf(result, ITEM_LABEL_LENGTH240, "%d dBm", -20 + ap_tx_power);
38557}
38558
38559static void
38560add_gcr_mu_bar_trigger_frame_common_info(proto_tree *tree, tvbuff_t *tvb,
38561 int offset)
38562{
38563
38564 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38565 hf_ieee80211_he_trigger_bar_ctrl,
38566 ett_he_trigger_bar_ctrl,
38567 he_trig_frm_bar_ctrl_fields,
38568 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38569 offset += 2;
38570
38571 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38572 hf_ieee80211_he_trigger_bar_info,
38573 ett_he_trigger_bar_info,
38574 he_trig_frm_bar_info_fields,
38575 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38576}
38577
38578static int * const common_info_headers[] = {
38579 &hf_ieee80211_he_trigger_type,
38580 &hf_ieee80211_he_trigger_ul_length,
38581 &hf_ieee80211_he_trigger_more_tf,
38582 &hf_ieee80211_he_trigger_cs_required,
38583 &hf_ieee80211_he_trigger_ul_bw,
38584 &hf_ieee80211_he_trigger_gi_and_ltf_type,
38585 &hf_ieee80211_he_trigger_mu_mimo_ltf_mode,
38586 &hf_ieee80211_he_trigger_num_he_ltf_syms_etc,
38587 &hf_ieee80211_he_trigger_ul_stbc,
38588 &hf_ieee80211_he_trigger_ldpc_extra_sym_seg,
38589 &hf_ieee80211_he_trigger_ap_tx_power,
38590 &hf_ieee80211_he_trigger_pre_fec_padding_factor,
38591 &hf_ieee80211_he_trigger_pe_disambiguity,
38592 &hf_ieee80211_he_trigger_ul_spatial_reuse,
38593 &hf_ieee80211_he_trigger_doppler,
38594 &hf_ieee80211_he_trigger_ul_he_sig_a_reserved,
38595 &hf_ieee80211_he_trigger_reserved,
38596 NULL((void*)0)
38597};
38598
38599static int * const eht_common_info_headers[] = {
38600 &hf_ieee80211_eht_trigger_type,
38601 &hf_ieee80211_eht_trigger_ul_length,
38602 &hf_ieee80211_eht_trigger_more_tf,
38603 &hf_ieee80211_eht_trigger_cs_required,
38604 &hf_ieee80211_eht_trigger_ul_bw,
38605 &hf_ieee80211_eht_trigger_gi_and_eht_ltf_type,
38606 &hf_ieee80211_eht_trigger_reserved2,
38607 &hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc,
38608 &hf_ieee80211_eht_trigger_reserved3,
38609 &hf_ieee80211_eht_trigger_ldpc_extra_sym_seg,
38610 &hf_ieee80211_eht_trigger_ap_tx_power,
38611 &hf_ieee80211_eht_trigger_pre_fec_padding_factor,
38612 &hf_ieee80211_eht_trigger_pe_disambiguity,
38613 &hf_ieee80211_eht_trigger_ul_spatial_reuse,
38614 &hf_ieee80211_eht_trigger_reserved4,
38615 &hf_ieee80211_eht_trigger_he_eht_p160,
38616 &hf_ieee80211_eht_trigger_special_user_info_flag,
38617 &hf_ieee80211_eht_trigger_eht_reserved,
38618 &hf_ieee80211_eht_trigger_reserved,
38619 NULL((void*)0)
38620};
38621
38622static int* const uhr_common_info_headers[] = {
38623 &hf_ieee80211_uhr_trigger_type,
38624 &hf_ieee80211_uhr_trigger_ul_length,
38625 &hf_ieee80211_uhr_trigger_more_tf,
38626 &hf_ieee80211_uhr_trigger_cs_required,
38627 &hf_ieee80211_uhr_trigger_ul_bw,
38628 &hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type,
38629 &hf_ieee80211_uhr_trigger_reserved2,
38630 &hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc,
38631 &hf_ieee80211_uhr_trigger_reserved3,
38632 &hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg,
38633 &hf_ieee80211_uhr_trigger_ap_tx_power,
38634 &hf_ieee80211_uhr_trigger_pre_fec_padding_factor,
38635 &hf_ieee80211_uhr_trigger_pe_disambiguity,
38636 &hf_ieee80211_uhr_trigger_ul_spatial_reuse,
38637 &hf_ieee80211_uhr_trigger_reserved4,
38638 &hf_ieee80211_uhr_trigger_he_uhr_p160,
38639 &hf_ieee80211_uhr_trigger_special_user_info_flag,
38640 &hf_ieee80211_uhr_trigger_dru_rru,
38641 &hf_ieee80211_uhr_trigger_ifcs,
38642 &hf_ieee80211_uhr_trigger_uhr_reserved,
38643 &hf_ieee80211_uhr_trigger_reserved,
38644 NULL((void*)0)
38645};
38646
38647static const val64_string pre_fec_padding_factor_vals[] = {
38648 { 0, "pre-FEC Padding Factor of 4" },
38649 { 1, "pre-FEC Padding Factor of 1" },
38650 { 2, "pre-FEC Padding Factor of 2" },
38651 { 3, "pre-FEC Padding Factor of 3" },
38652 { 0, NULL((void*)0) }
38653};
38654
38655static const true_false_string pe_disambiguity_tfs = {
38656 "PE Disambiguity",
38657 "no PE Disambiguity"
38658 };
38659
38660static int
38661add_trigger_common_info(proto_tree *tree, tvbuff_t *tvb, int offset,
38662 packet_info *pinfo _U___attribute__((unused)), uint8_t trigger_type, int *frame_len,
38663 proto_tree **common_tree)
38664{
38665 proto_item *pi = NULL((void*)0);
38666 proto_tree *common_info = NULL((void*)0);
38667 int length = 0;
38668 int start_offset = offset;
38669 uint64_t bw_etc = tvb_get_letoh64(tvb, offset);
38670 bool_Bool special_user_present = ((bw_etc >> 55) & 0x01) != 0x01;
38671
38672 global_he_trigger_bw = (bw_etc >> 18) & 0x03;
38673
38674 common_info = proto_tree_add_subtree(tree, tvb, offset, -1,
38675 ett_he_trigger_common_info, &pi, "Common Info");
38676 *common_tree = common_info;
38677
38678 if (special_user_present) {
38679 uint8_t phy_version = (tvb_get_letohs(tvb, offset + 8) >> 12) & 0x07;
38680 switch (phy_version) {
38681 case 0:
38682 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38683 hf_ieee80211_eht_trigger_common_info,
38684 ett_he_trigger_base_common_info,
38685 eht_common_info_headers,
38686 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38687 break;
38688 case 1:
38689 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38690 hf_ieee80211_uhr_trigger_common_info,
38691 ett_he_trigger_base_common_info,
38692 uhr_common_info_headers,
38693 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38694 break;
38695 default:
38696 expert_add_info_format(pinfo, pi, &ei_ieee80211_inv_val,
38697 "Unknown PHY Version Identifier (%u)", phy_version);
38698 }
38699 } else {
38700 proto_tree_add_bitmask_with_flags(common_info, tvb, offset,
38701 hf_ieee80211_he_trigger_common_info,
38702 ett_he_trigger_base_common_info,
38703 common_info_headers,
38704 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38705 }
38706 offset += 8;
38707 length += 8;
38708
38709 /*
38710 * Handle the trigger dependent common info
38711 */
38712 switch (trigger_type) {
38713 case TRIGGER_TYPE_GCR_MU_BAR: /* Actually two uint16 fields */
38714 add_gcr_mu_bar_trigger_frame_common_info(common_info, tvb, offset);
38715 offset += 4;
38716 length += 4;
38717 break;
38718 default: /* No other type has a trigger dependent common info subfield */
38719 break;
38720 }
38721 proto_item_set_len(pi, offset - start_offset);
38722
38723 *frame_len += length;
38724 return length;
38725}
38726
38727static const char * const he_trigger_ru_allocation_region_values[] = {
38728 "primary 80MHz channel for 80+80 and 160MHz",
38729 "secondary 80MHz channel for 80+80 and 160MHz",
38730};
38731
38732/*
38733 * Format the ru allocation region bit
38734 */
38735static void
38736he_trigger_ru_allocation_region_custom(char *result, uint32_t ru_alloc_val)
38737{
38738 if (global_he_trigger_bw == 3) {
38739 snprintf(result, ITEM_LABEL_LENGTH240, "%s",
38740 he_trigger_ru_allocation_region_values[ru_alloc_val & 0x01]);
38741 } else {
38742 snprintf(result, ITEM_LABEL_LENGTH240, "Not used for 20, 40 or 80MHz");
38743 }
38744}
38745
38746static void
38747he_trigger_minus_one_custom(char *result, unsigned ss_alloc_value)
38748{
38749 snprintf(result, ITEM_LABEL_LENGTH240, "%d", ss_alloc_value + 1);
38750}
38751
38752static const true_false_string he_trigger_ul_fec_coding_type_tfs = {
38753 "LDPC",
38754 "BCC"
38755};
38756
38757static const value_string preferred_ac_vals[] = {
38758 { 0, "AC_BE" },
38759 { 1, "AC_BK" },
38760 { 2, "AC_VI" },
38761 { 3, "AC_VO" },
38762 { 0, NULL((void*)0) }
38763};
38764
38765static int * const basic_trigger_dependent_user_headers[] = {
38766 &hf_ieee80211_he_trigger_mpdu_mu_spacing,
38767 &hf_ieee80211_he_trigger_tid_aggregation_limit,
38768 &hf_ieee80211_he_trigger_dependent_reserved1,
38769 &hf_ieee80211_he_trigger_preferred_ac,
38770 NULL((void*)0)
38771};
38772
38773static void
38774add_basic_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38775 int offset)
38776{
38777 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38778 hf_ieee80211_he_trigger_dep_basic_user_info,
38779 ett_he_trigger_dep_basic_user_info,
38780 basic_trigger_dependent_user_headers,
38781 ENC_NA0x00000000, BMT_NO_APPEND0x01);
38782}
38783
38784static void
38785add_brp_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38786 int offset)
38787{
38788 proto_tree_add_item(tree, hf_ieee80211_he_trigger_feedback_seg_retrans_bm,
38789 tvb, offset, 1, ENC_NA0x00000000);
38790}
38791
38792static int
38793add_mu_bar_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38794 int offset, packet_info *pinfo, int *frame_len)
38795{
38796 int start_offset = offset;
38797
38798 /*
38799 * It's a request and not DMG, I think. Also, it is only supposed to be
38800 * a compressed block ack or a multi-tid block ack request.
38801 */
38802 offset = dissect_ieee80211_block_ack_details(tvb, pinfo, tree, offset,
38803 false0, true1, false0);
38804
38805 *frame_len += offset - start_offset;
38806
38807 return offset;
38808}
38809
38810
38811static int * const nfrp_trigger_dependent_user_headers[] = {
38812 &hf_ieee80211_he_trigger_starting_aid,
38813 &hf_ieee80211_he_trigger_dependent_reserved2,
38814 &hf_ieee80211_he_trigger_feedback_type,
38815 &hf_ieee80211_he_trigger_dependent_reserved3,
38816 &hf_ieee80211_he_trigger_nfrp_target_rssi,
38817 &hf_ieee80211_he_trigger_multiplexing_flag,
38818 NULL((void*)0)
38819};
38820
38821static void
38822add_nfrp_trigger_dependent_user_info(proto_tree *tree, tvbuff_t *tvb,
38823 int offset)
38824{
38825 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
38826 hf_ieee80211_he_trigger_dep_nfrp_user_info,
38827 ett_he_trigger_dep_nfrp_user_info,
38828 nfrp_trigger_dependent_user_headers,
38829 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
38830}
38831
38832/*
38833 * Dissect one of the ranging trigger types ...
38834 */
38835static int * const poll_rpt_hdrs[] = {
38836 &hf_ieee80211_ranging_pol_rpt_aid12_rsid12,
38837 &hf_ieee80211_ranging_pol_rpt_ru_alloc_region,
38838 &hf_ieee80211_ranging_pol_rpt_ru_alloc,
38839 &hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type,
38840 &hf_ieee80211_ranging_pol_rpt_ulmcs,
38841 &hf_ieee80211_ranging_pol_rpt_uldcm,
38842 &hf_ieee80211_ranging_pol_rpt_starting_spatial_stream,
38843 &hf_ieee80211_ranging_pol_rpt_number_spatial_streams,
38844 &hf_ieee80211_ranging_pol_rpt_ul_target_rssi,
38845 &hf_ieee80211_ranging_pol_rpt_reserved,
38846 NULL((void*)0)
38847};
38848
38849static int * const sounding_hdrs[] = {
38850 &hf_ieee80211_ranging_sounding_aid12_rsid12,
38851 &hf_ieee80211_ranging_sounding_reserved1,
38852 &hf_ieee80211_ranging_sounding_i2r_rep,
38853 &hf_ieee80211_ranging_sounding_reserved2,
38854 &hf_ieee80211_ranging_sounding_starting_spatial_stream,
38855 &hf_ieee80211_ranging_sounding_number_spatial_streams,
38856 &hf_ieee80211_ranging_sounding_ul_target_rssi,
38857 &hf_ieee80211_ranging_sounding_reserved3,
38858 NULL((void*)0)
38859};
38860
38861static int * const sec_sound_hdrs[] = {
38862 &hf_ieee80211_ranging_sec_sound_aid12_rsid12,
38863 &hf_ieee80211_ranging_sec_sound_reserved1,
38864 &hf_ieee80211_ranging_sec_sound_i2r_rep,
38865 &hf_ieee80211_ranging_sec_sound_reserved2,
38866 &hf_ieee80211_ranging_sec_sound_starting_spatial_stream,
38867 &hf_ieee80211_ranging_sec_sound_number_spatial_streams,
38868 &hf_ieee80211_ranging_sec_sound_ul_target_rssi,
38869 &hf_ieee80211_ranging_sec_sound_reserved3,
38870 NULL((void*)0)
38871};
38872
38873static int
38874dissect_ieee80211_ranging_trigger_variant(proto_tree *tree, tvbuff_t *tvb,
38875 int offset, packet_info *pinfo _U___attribute__((unused)),
38876 uint8_t subtype)
38877{
38878 int saved_offset = offset;
38879
38880 switch (subtype) {
38881 case TRIGGER_SUBTYPE_POLL:
38882 case TRIGGER_SUBTYPE_REPORT:
38883 proto_tree_add_bitmask(tree, tvb, offset,
38884 hf_ieee80211_he_trigger_ranging_trigger_poll_rpt,
38885 ett_he_trigger_ranging_poll, poll_rpt_hdrs,
38886 ENC_LITTLE_ENDIAN0x80000000);
38887 offset += 5;
38888 break;
38889 case TRIGGER_SUBTYPE_SOUNDING: /* Sounding subvariant */
38890 proto_tree_add_bitmask(tree, tvb, offset,
38891 hf_ieee80211_he_trigger_ranging_trigger_sounding,
38892 ett_he_trigger_ranging_poll, sounding_hdrs,
38893 ENC_LITTLE_ENDIAN0x80000000);
38894 offset += 5;
38895 break;
38896 case TRIGGER_SUBTYPE_SECURE_SOUNDING:
38897 proto_tree_add_bitmask(tree, tvb, offset,
38898 hf_ieee80211_he_trigger_ranging_trigger_sec_sound,
38899 ett_he_trigger_ranging_poll, sec_sound_hdrs,
38900 ENC_LITTLE_ENDIAN0x80000000);
38901 offset += 5;
38902
38903 proto_tree_add_item(tree, hf_ieee80211_he_trigger_ranging_user_info_sac,
38904 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
38905 offset += 2;
38906 break;
38907 case TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE:
38908 /* This is much the same as SOUNDING subtype */
38909 proto_tree_add_bitmask(tree, tvb, offset,
38910 hf_ieee80211_he_trigger_ranging_trigger_sounding,
38911 ett_he_trigger_ranging_poll, sounding_hdrs,
38912 ENC_LITTLE_ENDIAN0x80000000);
38913 offset += 5;
38914 break;
38915 default:
38916 /* Unknown subtypes are filtered out above us. Should not get here! */
38917 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 38917))
;
38918 break;
38919 }
38920
38921 return offset - saved_offset;
38922}
38923
38924/*
38925 * Print the target RSSI field as per the spec.
38926 * 0->90 map to -110 to -20 dBm.
38927 * 127 maps to Max ransmit power for assigned MCS
38928 * rest are reserved.
38929 */
38930static void
38931target_rssi_base_custom(char *result, uint32_t target_rssi)
38932{
38933 if (target_rssi <= 90) {
38934 snprintf(result, ITEM_LABEL_LENGTH240, "%ddBm", -110 + target_rssi);
38935 } else if (target_rssi == 127) {
38936 snprintf(result, ITEM_LABEL_LENGTH240, "Max transmit power");
38937 } else {
38938 snprintf(result, ITEM_LABEL_LENGTH240, "Reserved");
38939 }
38940}
38941
38942static int * const user_info_headers_no_2045[] = {
38943 &hf_ieee80211_he_trigger_aid12,
38944 &hf_ieee80211_he_trigger_ru_allocation_region,
38945 &hf_ieee80211_he_trigger_ru_allocation,
38946 &hf_ieee80211_he_trigger_ul_fec_coding_type,
38947 &hf_ieee80211_he_trigger_ul_mcs,
38948 &hf_ieee80211_he_trigger_ul_dcm,
38949 &hf_ieee80211_he_trigger_ru_starting_spatial_stream,
38950 &hf_ieee80211_he_trigger_ru_number_spatial_streams,
38951 &hf_ieee80211_he_trigger_ul_target_rssi,
38952 &hf_ieee80211_he_trigger_user_reserved,
38953 NULL((void*)0)
38954};
38955
38956static int * const user_info_headers_2045[] = {
38957 &hf_ieee80211_he_trigger_aid12,
38958 &hf_ieee80211_he_trigger_ru_allocation_region,
38959 &hf_ieee80211_he_trigger_ru_allocation,
38960 &hf_ieee80211_he_trigger_ul_fec_coding_type,
38961 &hf_ieee80211_he_trigger_ul_mcs,
38962 &hf_ieee80211_he_trigger_ul_dcm,
38963 &hf_ieee80211_he_trigger_ru_number_ra_ru,
38964 &hf_ieee80211_he_trigger_ru_no_more_ra_ru,
38965 &hf_ieee80211_he_trigger_ul_target_rssi,
38966 &hf_ieee80211_he_trigger_user_reserved,
38967 NULL((void*)0)
38968};
38969
38970static int * const user_info_headers_eht[] = {
38971 &hf_ieee80211_eht_trigger_aid12,
38972 &hf_ieee80211_eht_trigger_ru_allocation_region,
38973 &hf_ieee80211_eht_trigger_ru_allocation,
38974 &hf_ieee80211_eht_trigger_ul_fec_coding_type,
38975 &hf_ieee80211_eht_trigger_ul_eht_mcs,
38976 &hf_ieee80211_eht_trigger_user_info_reserved,
38977 &hf_ieee80211_eht_trigger_ru_starting_spatial_stream,
38978 &hf_ieee80211_eht_trigger_ru_number_spatial_streams,
38979 &hf_ieee80211_eht_trigger_ul_target_recv_power,
38980 &hf_ieee80211_eht_trigger_ps160,
38981 NULL((void*)0)
38982};
38983
38984static int * const special_user_info_headers_eht[] = {
38985 &hf_ieee80211_eht_trigger_aid12,
38986 &hf_ieee80211_eht_trigger_phy_version_identifier,
38987 &hf_ieee80211_eht_trigger_ul_bw_extenstion,
38988 &hf_ieee80211_eht_trigger_eht_spatial_reuse_1,
38989 &hf_ieee80211_eht_trigger_eht_spatial_reuse_2,
38990 &hf_ieee80211_eht_trigger_disregard_u_sig_1,
38991 &hf_ieee80211_eht_trigger_validate_u_sig_2,
38992 &hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb,
38993 &hf_ieee80211_eht_trigger_disregard_u_sig_2_msb,
38994 &hf_ieee80211_eht_trigger_special_reserved,
38995 NULL((void*)0)
38996};
38997
38998static int* const user_info_headers_uhr_rru[] = {
38999 &hf_ieee80211_uhr_trigger_aid12,
39000 &hf_ieee80211_uhr_trigger_ru_allocation_region,
39001 &hf_ieee80211_uhr_trigger_ru_allocation,
39002 &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
39003 &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
39004 &hf_ieee80211_uhr_trigger_2xldpc,
39005 &hf_ieee80211_uhr_trigger_ru_starting_spatial_stream,
39006 &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
39007 &hf_ieee80211_uhr_trigger_ul_target_recv_power,
39008 &hf_ieee80211_uhr_trigger_ps160,
39009 NULL((void*)0)
39010};
39011
39012static int* const user_info_headers_uhr_dru[] = {
39013 &hf_ieee80211_uhr_trigger_aid12,
39014 &hf_ieee80211_uhr_trigger_ru_allocation_region,
39015 &hf_ieee80211_uhr_trigger_ru_allocation,
39016 &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
39017 &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
39018 &hf_ieee80211_uhr_trigger_2xldpc,
39019 &hf_ieee80211_uhr_trigger_dru_distribution_bw,
39020 &hf_ieee80211_uhr_trigger_dru_reserved,
39021 &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
39022 &hf_ieee80211_uhr_trigger_ul_target_recv_power,
39023 &hf_ieee80211_uhr_trigger_ps160,
39024 NULL((void*)0)
39025};
39026
39027#define HE_USER_INFO0 0
39028#define EHT_USER_INFO1 1
39029#define SPECIAL_USER_INFO2 2
39030
39031static int
39032add_trigger_user_info(proto_tree *tree, tvbuff_t *tvb, int offset,
39033 packet_info *pinfo, uint8_t trigger_type, uint8_t subtype,
39034 uint8_t common_info_b54_55 _U___attribute__((unused)), int *frame_len, unsigned fcs_len)
39035{
39036 proto_item *pi = NULL((void*)0);
39037 proto_tree *user_info = NULL((void*)0);
39038 int length = 0, range_len = 0;
39039 int start_offset = offset;
39040 uint16_t aid12_subfield = 0;
39041 uint16_t phy_version_subfield = 0;
39042 unsigned len_remaining = 0;
39043 bool_Bool special_user_info;
39044 uint8_t user_info_b39;
39045 bool_Bool eht_variant = false0;
39046 uint8_t ddru_indication;
39047
39048 /*
39049 * If the AID12 subfield has the value 4095 it indicates the start of
39050 * the padding field.
39051 *
39052 * If the AID12 subfield has the value 2007, it indicates a special user
39053 * info field and combined with the common_info_b54_55 and B39 of the user
39054 * info field determines whether this field is an HE User Info field or an
39055 * EHT User Info field.
39056 */
39057 user_info = proto_tree_add_subtree(tree, tvb, offset, -1,
39058 ett_he_trigger_user_info, &pi, "User Info");
39059 aid12_subfield = tvb_get_letohs(tvb, offset) & 0x0FFF;
39060 phy_version_subfield = (tvb_get_letohs(tvb, offset) >> 12) & 0x01;
39061 /*9.3.1.22.2 of 802.11bn and Figure 9-90e1—DRU/RRU Indication subfield format*/
39062 ddru_indication = (tvb_get_letohs(tvb, offset - 1)) & 0x0F;
39063
39064 while (aid12_subfield != 4095) {
39065 /* Compute the special user info and EHT Variant for each one. */
39066 special_user_info = aid12_subfield == 2007;
39067 user_info_b39 = tvb_get_uint8(tvb, offset + 4) >> 7;
39068
39069 /* 9.3.1.22.4 of 802.11be and table 9-45a */
39070 if ((common_info_b54_55 == 0x01 && special_user_info && user_info_b39) ||
39071 (common_info_b54_55 == 0x00 && special_user_info))
39072 eht_variant = true1;
39073
39074 switch (trigger_type) {
39075 case TRIGGER_TYPE_BASIC:
39076 case TRIGGER_TYPE_BRP:
39077 case TRIGGER_TYPE_MU_BAR:
39078 case TRIGGER_TYPE_MU_RTS:
39079 case TRIGGER_TYPE_BSRP:
39080 case TRIGGER_TYPE_GCR_MU_BAR:
39081 case TRIGGER_TYPE_BQRP:
39082 if (!eht_variant) {
39083 if (aid12_subfield != 0 && aid12_subfield != 2045) {
39084 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
39085 hf_ieee80211_he_trigger_user_info,
39086 ett_he_trigger_base_user_info,
39087 user_info_headers_no_2045,
39088 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39089 } else {
39090 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
39091 hf_ieee80211_he_trigger_user_info,
39092 ett_he_trigger_base_user_info,
39093 user_info_headers_2045,
39094 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39095 }
39096 } else {
39097 /* Is it a special user info? */
39098 if (special_user_info) {
39099 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
39100 hf_ieee80211_eht_trigger_special_user_info,
39101 ett_he_trigger_base_user_info,
39102 special_user_info_headers_eht,
39103 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39104 } else {
39105 if (!phy_version_subfield) {
39106 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
39107 hf_ieee80211_eht_trigger_user_info,
39108 ett_he_trigger_base_user_info,
39109 user_info_headers_eht,
39110 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39111 } else {
39112 /* 9.3.1.22.6 of 802.11bn and Figure 9-90j2 and Figure 9-90j3 */
39113 if(ddru_indication != 0) {
39114 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
39115 hf_ieee80211_uhr_trigger_user_info,
39116 ett_he_trigger_base_user_info,
39117 user_info_headers_uhr_rru,
39118 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39119 } else {
39120 proto_tree_add_bitmask_with_flags(user_info, tvb, offset,
39121 hf_ieee80211_uhr_trigger_user_info,
39122 ett_he_trigger_base_user_info,
39123 user_info_headers_uhr_dru,
39124 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39125 }
39126 }
39127 }
39128 }
39129 offset += 5;
39130 length += 5;
39131 break;
39132 case TRIGGER_TYPE_NFRP:
39133 add_nfrp_trigger_dependent_user_info(user_info, tvb, offset);
39134 offset += 5;
39135 length += 5;
39136 break;
39137 case TRIGGER_TYPE_RANGING:
39138 range_len = dissect_ieee80211_ranging_trigger_variant(user_info, tvb,
39139 offset, pinfo, subtype);
39140 if (range_len == 0) {
39141 /* XXX - unknown subtype, report this somehow */
39142 goto out;
39143 }
39144 offset += range_len;
39145 length += range_len;
39146 break;
39147 default:
39148 /* Should never get here */
39149 break;
39150 }
39151
39152
39153 /*
39154 * Handle the trigger dependent user info
39155 */
39156 switch (trigger_type) {
39157 case TRIGGER_TYPE_BASIC:
39158 add_basic_trigger_dependent_user_info(user_info, tvb, offset);
39159 offset++;
39160 length++;
39161 break;
39162 case TRIGGER_TYPE_BRP:
39163 add_brp_trigger_dependent_user_info(user_info, tvb, offset);
39164 offset++;
39165 length++;
39166 break;
39167 case TRIGGER_TYPE_MU_BAR:
39168 /* This is variable length so we need it to update the length */
39169 offset = add_mu_bar_trigger_dependent_user_info(user_info, tvb,
39170 offset, pinfo, &length);
39171 break;
39172 default:
39173 break;
39174 }
39175
39176 len_remaining = tvb_reported_length_remaining(tvb, offset);
39177 if (len_remaining < 5)
39178 aid12_subfield = 4095;
39179 else
39180 aid12_subfield = tvb_get_letohs(tvb, offset) & 0xFFF;
39181 }
39182
39183out:
39184
39185 if (aid12_subfield == 4095 && len_remaining >= 5) {
39186 /* Show the Start of Padding field. */
39187 proto_tree_add_item(user_info,
39188 hf_ieee80211_he_trigger_user_info_padding_start,
39189 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39190 offset += 2;
39191
39192 }
39193
39194 proto_item_set_len(pi, offset - start_offset);
39195
39196 /* Now, treat all the rest of the frame as padding */
39197 if (aid12_subfield == 4095 && len_remaining >= 5) {
39198 proto_tree_add_item(tree, hf_ieee80211_he_trigger_padding, tvb, offset,
39199 tvb_reported_length_remaining(tvb, offset) - fcs_len,
39200 ENC_NA0x00000000);
39201 }
39202
39203 *frame_len += length;
39204 return length;
39205}
39206
39207static const range_string ranging_trigger_subtype_vals[] = {
39208 { 0, 0, "Poll" },
39209 { 1, 1, "Sounding" },
39210 { 2, 2, "Secured Sounding" },
39211 { 3, 3, "Report" },
39212 { 4, 4, "Passive TB Measurement Exchange" },
39213 { 5, 15, "Reserved" },
39214 { 0, 0, NULL((void*)0)},
39215};
39216
39217static int * const ranging_headers1[] = {
39218 &hf_ieee80211_ranging_trigger_subtype1,
39219 &hf_ieee80211_ranging_trigger_reserved1,
39220 &hf_ieee80211_ranging_trigger_token,
39221 NULL((void*)0)
39222};
39223
39224static int * const ranging_headers2[] = {
39225 &hf_ieee80211_ranging_trigger_subtype2,
39226 &hf_ieee80211_ranging_trigger_reserved2,
39227 &hf_ieee80211_ranging_trigger_sounding_dialog_token,
39228 NULL((void*)0)
39229};
39230
39231static int
39232dissect_ieee80211_he_eht_trigger(tvbuff_t *tvb, packet_info *pinfo,
39233 proto_tree *tree, int offset, unsigned fcs_len)
39234{
39235 proto_tree *common_tree = NULL((void*)0);
39236 uint8_t trigger_type;
39237 uint8_t phy_version;
39238 uint8_t subtype = 0;
39239 int length = 0;
39240 uint8_t common_info_b54_55;
39241 bool_Bool eht_trigger = true1;
39242
39243 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
39244
39245 offset += 6;
39246 length += 6;
39247
39248 if (tvb_captured_length_remaining(tvb, offset) < 8) {
39249 expert_add_info_format(pinfo, tree, &ei_ieee80211_missing_data,
39250 "Invalid Trigger frame, not enough data for the "
39251 "Common Info field.");
39252 return tvb_captured_length(tvb);
39253 }
39254
39255 trigger_type = tvb_get_uint8(tvb, offset) & 0x0F;
39256 common_info_b54_55 = tvb_get_uint8(tvb, offset + 6);
39257 phy_version = (tvb_get_letohs(tvb, offset + 8) >> 12) & 0x01;
39258 if ((common_info_b54_55 >> 6) == 0x03)
39259 eht_trigger = false0;
39260
39261 col_append_fstr(pinfo->cinfo, COL_INFO, " %s %s",
39262 eht_trigger ? (phy_version ? "UHR": "EHT") : "HE",
39263 val64_to_str_wmem(pinfo->pool, trigger_type, trigger_type_vals, "Reserved"));
39264
39265 if (trigger_type >= TRIGGER_TYPE_MIN_RESERVED) {
39266 /* Add an Expert Info and forget it */
39267 proto_item *item;
39268
39269 item = proto_tree_add_item(tree, hf_ieee80211_he_trigger_type, tvb, offset,
39270 1, ENC_NA0x00000000);
39271 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
39272 "Trigger type too large: %u", trigger_type);
39273 return tvb_captured_length_remaining(tvb, offset) + length;
39274 }
39275
39276 /*
39277 * Deal with the common Info and then any user info after that.
39278 */
39279 offset += add_trigger_common_info(tree, tvb, offset, pinfo,
39280 trigger_type, &length, &common_tree);
39281
39282 /*
39283 * If the trigger type is Ranging Trigger type, then deal with it separately.
39284 */
39285 if (trigger_type == TRIGGER_TYPE_RANGING) {
39286 subtype = tvb_get_uint8(tvb, offset) & 0x0f;
39287
39288 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s",
39289 rval_to_str_const(subtype, ranging_trigger_subtype_vals, "Reserved"));
39290
39291 if (subtype >= TRIGGER_SUBTYPE_MIN_RESERVED) {
39292 proto_item *item;
39293
39294 item = proto_tree_add_item(tree, hf_ieee80211_ranging_trigger_subtype1,
39295 tvb, offset, 1, ENC_NA0x00000000);
39296 expert_add_info_format(pinfo, item, &ei_ieee80211_inv_val,
39297 "Ranging trigger subtype too large: %u", subtype);
39298 return tvb_captured_length_remaining(tvb, offset) + length;
39299 }
39300
39301 switch (subtype) {
39302 case TRIGGER_SUBTYPE_POLL:
39303 case TRIGGER_SUBTYPE_SOUNDING:
39304 case TRIGGER_SUBTYPE_SECURE_SOUNDING:
39305 case TRIGGER_SUBTYPE_REPORT:
39306 proto_tree_add_bitmask(common_tree, tvb, offset,
39307 hf_ieee80211_he_trigger_ranging_common_info_1,
39308 ett_he_trigger_ranging, ranging_headers1,
39309 ENC_NA0x00000000);
39310 offset += 1;
39311 break;
39312 case TRIGGER_SUBTYPE_PASSIVE_TB_MEAS_EXCHANGE:
39313 proto_tree_add_bitmask(common_tree, tvb, offset,
39314 hf_ieee80211_he_trigger_ranging_common_info_2,
39315 ett_he_trigger_ranging, ranging_headers2,
39316 ENC_LITTLE_ENDIAN0x80000000);
39317 offset += 2;
39318 break;
39319 default:
39320 /* We should never get here! */
39321 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 39321))
;
39322 break;
39323 }
39324 }
39325
39326 add_trigger_user_info(tree, tvb, offset, pinfo, trigger_type, subtype,
39327 common_info_b54_55, &length, fcs_len);
39328
39329 /*
39330 * Padding should commence here ... TODO, deal with it.
39331 */
39332
39333 return length;
39334}
39335
39336static int * const tack_headers[] = {
39337 &hf_ieee80211_tack_next_twt,
39338 &hf_ieee80211_tack_flow_identifier,
39339 NULL((void*)0)
39340};
39341
39342static int
39343dissect_ieee80211_s1g_tack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39344 proto_tree *tree, int offset, uint16_t flags)
39345{
39346 int length = 0;
39347
39348 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
39349
39350 offset += 6;
39351 length += 6;
39352
39353 proto_tree_add_item(tree, hf_ieee80211_beacon_sequence, tvb, offset, 1,
39354 ENC_NA0x00000000);
39355 offset += 1;
39356 length += 1;
39357
39358 proto_tree_add_item(tree, hf_ieee80211_pentapartial_timestamp, tvb, offset,
39359 5, ENC_LITTLE_ENDIAN0x80000000);
39360 offset += 5;
39361 length += 5;
39362
39363 if ((flags & 0xC0) == 0xC0) {
39364 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39365 hf_ieee80211_tack_next_twt_info, ett_tack_info,
39366 tack_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39367 length += 6;
39368 }
39369
39370 return length;
39371}
39372
39373/*
39374 * Dissect a VHT or an HE NDP announcement frame. They differ past
39375 * the sounding dialog token with a bit in the SDT indicating VHT vs HE.
39376 */
39377#define NDP_ANNC_VHT_HE0x02 0x02
39378
39379static const value_string ndp_annc_variant_vals[] = {
39380 { 0, "VHT NDP Announcement" },
39381 { 1, "Ranging NDP Announcement" },
39382 { 2, "HE NDP Announcement" },
39383 { 3, "EHT NDP Announcement" },
39384 { 0, NULL((void*)0) }
39385};
39386
39387static int * const sta_info_ranging_2008[] = {
39388 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11,
39389 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset,
39390 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts,
39391 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep,
39392 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts,
39393 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1,
39394 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation,
39395 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep,
39396 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2,
39397 NULL((void*)0)
39398};
39399
39400static int * const sta_info_ranging_2043[] = {
39401 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11,
39402 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac,
39403 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation,
39404 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved,
39405 NULL((void*)0)
39406};
39407
39408static int * const sta_info_ranging_2044[] = {
39409 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11,
39410 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf,
39411 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation,
39412 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved,
39413 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token,
39414 NULL((void*)0)
39415};
39416
39417static int * const sta_info_ranging_2045[] = {
39418 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11,
39419 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power,
39420 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi,
39421 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation,
39422 &hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved,
39423 NULL((void*)0)
39424};
39425
39426static int
39427dissect_ieee80211_ranging_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39428 proto_tree *tree, int offset, bool_Bool has_fcs)
39429{
39430 uint8_t len_fcs = 0;
39431 proto_tree *sta_list;
39432 proto_item *sta_info_item, *pi;
39433 int saved_offset = 0;
39434 int sta_index = 0;
39435
39436 if (has_fcs){
39437 len_fcs = 4;
39438 }
39439
39440 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39441 ett_ndp_ranging_annc_sta_list, &pi, "STA list");
39442 saved_offset = offset;
39443
39444 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39445 uint16_t aid11;
39446
39447 sta_info_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 2,
39448 ett_ndp_ranging_annc_sta_info, NULL((void*)0), "STA %d",
39449 sta_index++);
39450
39451 aid11 = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN0x80000000) & 0x7ff;
39452 if (aid11 < 2008) {
39453 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39454 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008,
39455 ett_vht_ranging_annc, sta_info_ranging_2008,
39456 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39457 } else if (aid11 == 2043) {
39458 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39459 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043,
39460 ett_vht_ranging_annc, sta_info_ranging_2043,
39461 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39462 } else if (aid11 == 2044) {
39463 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39464 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044,
39465 ett_vht_ranging_annc, sta_info_ranging_2044,
39466 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39467 } else if (aid11 == 2045) {
39468 proto_tree_add_bitmask_with_flags(sta_info_item, tvb, offset,
39469 hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045,
39470 ett_vht_ranging_annc, sta_info_ranging_2045,
39471 ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39472 }
39473 offset += 4;
39474 }
39475
39476 proto_item_set_len(pi, offset - saved_offset);
39477 return offset;
39478}
39479
39480static int
39481dissect_ieee80211_vht_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39482 proto_tree *tree, int offset, bool_Bool has_fcs)
39483{
39484 uint16_t sta_info;
39485 uint8_t len_fcs = 0;
39486 proto_tree *sta_list;
39487 proto_item *sta_info_item, *pi;
39488 int saved_offset = 0;
39489 int sta_index = 0;
39490
39491 if (has_fcs){
39492 len_fcs = 4;
39493 }
39494
39495 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39496 ett_ndp_vht_annc_sta_list, &pi, "STA list");
39497 saved_offset = offset;
39498
39499 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39500 sta_info_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 2,
39501 ett_ndp_vht_annc_sta_info_tree, NULL((void*)0), "STA %d",
39502 sta_index++);
39503
39504 proto_tree_add_item(sta_info_item, hf_ieee80211_vht_ndp_annc_sta_info_aid12,
39505 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39506 proto_tree_add_item(sta_info_item,
39507 hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
39508 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39509
39510 sta_info = tvb_get_letohs(tvb, offset);
39511
39512 if (sta_info & 0x1000)
39513 proto_tree_add_uint(sta_info_item,
39514 hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
39515 tvb, offset, 2, sta_info);
39516 else
39517 proto_tree_add_item(sta_info_item,
39518 hf_ieee80211_vht_ndp_annc_sta_info_reserved,
39519 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
39520 offset += 2;
39521 }
39522
39523 proto_item_set_len(pi, offset - saved_offset);
39524 return offset;
39525}
39526
39527static int * const he_ndp_sta_headers[] = {
39528 &hf_ieee80211_he_ndp_annc_aid11,
39529 &hf_ieee80211_he_ndp_annc_ru_start,
39530 &hf_ieee80211_he_ndp_annc_ru_end,
39531 &hf_ieee80211_he_ndp_annc_feedback_type_and_ng,
39532 &hf_ieee80211_he_ndp_annc_disambiguation,
39533 &hf_ieee80211_he_ndp_annc_codebook_size,
39534 &hf_ieee80211_he_ndp_annc_nc,
39535 NULL((void*)0)
39536};
39537
39538static int * const he_ndp_annc_2047_hdrs[] = {
39539 &hf_ieee80211_he_ndp_annc_aid11,
39540 &hf_ieee80211_he_ndp_annc_disallowed_bitmap,
39541 &hf_ieee80211_he_ndp_annc_reserved1,
39542 &hf_ieee80211_he_ndp_annc_disambiguation,
39543 &hf_ieee80211_he_ndp_annc_reserved2,
39544 NULL((void*)0)
39545};
39546
39547static int
39548dissect_ieee80211_he_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39549 proto_tree *tree, int offset, bool_Bool has_fcs)
39550{
39551 uint8_t len_fcs = 0;
39552 proto_tree *sta_list;
39553 proto_item *pi;
39554 int saved_offset;
39555 int sta_index = 0;
39556
39557 if (has_fcs){
39558 len_fcs = 4;
39559 }
39560
39561 saved_offset = offset;
39562 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39563 ett_ndp_he_annc_sta_list, &pi, "STA list");
39564
39565 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39566 proto_tree *sta_item;
39567 uint32_t sta_info = tvb_get_letohl(tvb, offset);
39568
39569 sta_item = proto_tree_add_subtree_format(sta_list, tvb, offset, 4,
39570 ett_ndp_he_annc_sta_item, NULL((void*)0), "STA %d", sta_index++);
39571 if ((sta_info & 0x000007ff) < 2047) {
39572 proto_tree_add_bitmask_with_flags(sta_item, tvb, offset,
39573 hf_ieee80211_he_ndp_annc_sta,
39574 ett_ndp_he_annc_sta_info,
39575 he_ndp_sta_headers, ENC_LITTLE_ENDIAN0x80000000, BMT_NO_APPEND0x01);
39576 } else {
39577 proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39578 hf_ieee80211_he_ndp_annc_sta,
39579 ett_ndp_he_annc_sta_info,
39580 he_ndp_annc_2047_hdrs, ENC_LITTLE_ENDIAN0x80000000,
39581 BMT_NO_APPEND0x01);
39582 }
39583
39584 offset += 4;
39585 }
39586
39587 proto_item_set_len(pi, offset - saved_offset);
39588 return offset;
39589}
39590
39591static int * const eht_ndp_annc_hdrs[] = {
39592 &hf_ieee80211_ndp_eht_annc_aid11,
39593 &hf_ieee80211_ndp_eht_annc_resolution,
39594 &hf_ieee80211_ndp_eht_annc_feedback_map,
39595 &hf_ieee80211_ndp_eht_annc_reserved1,
39596 &hf_ieee80211_ndp_eht_annc_nc_index,
39597 &hf_ieee80211_ndp_eht_annc_feedback_type,
39598 &hf_ieee80211_ndp_eht_annc_disambiguation,
39599 &hf_ieee80211_ndp_eht_annc_codebook_size,
39600 &hf_ieee80211_ndp_eht_annc_reserved2,
39601 NULL((void*)0)
39602};
39603
39604static int
39605dissect_ieee80211_eht_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39606 proto_tree *tree, int offset, bool_Bool has_fcs)
39607{
39608 uint8_t len_fcs = 0;
39609 proto_tree *sta_list;
39610 proto_item *pi;
39611 int saved_offset;
39612
39613 if (has_fcs){
39614 len_fcs = 4;
39615 }
39616
39617 saved_offset = offset;
39618 sta_list = proto_tree_add_subtree(tree, tvb, offset, -1,
39619 ett_ndp_eht_annc_sta_list, &pi, "STA list");
39620
39621 while (tvb_reported_length_remaining(tvb, offset) > len_fcs) {
39622
39623 proto_tree_add_bitmask_with_flags(sta_list, tvb, offset,
39624 hf_ieee80211_ndp_eht_annc_sta_info,
39625 ett_ndp_eht_annc_sta_info,
39626 eht_ndp_annc_hdrs, ENC_LITTLE_ENDIAN0x80000000,
39627 BMT_NO_APPEND0x01);
39628 offset += 4;
39629 }
39630
39631 proto_item_set_len(pi, offset - saved_offset);
39632 return offset;
39633}
39634
39635static int * const ndp_annc_headers[] = {
39636 &hf_ieee80211_ndp_annc_variant,
39637 &hf_ieee80211_ndp_annc_token_number,
39638 NULL((void*)0)
39639};
39640
39641static int
39642dissect_ieee80211_ndp_annc(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39643 proto_tree *tree, int offset, bool_Bool has_fcs)
39644{
39645 proto_item *dialog;
39646 uint8_t dialog_token;
39647
39648 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, tree, offset);
39649 offset += 6;
39650
39651 dialog_token = tvb_get_uint8(tvb, offset);
39652 col_append_fstr(pinfo->cinfo, COL_INFO, ", Sounding Dialog Token=%d",
39653 dialog_token);
39654
39655 dialog = proto_tree_add_bitmask_with_flags(tree, tvb, offset,
39656 hf_ieee80211_ndp_annc_token, ett_ndp_annc,
39657 ndp_annc_headers, ENC_NA0x00000000, BMT_NO_APPEND0x01);
39658
39659 offset++;
39660
39661 if ((dialog_token & 0x03) == 0x00) {
39662 proto_item_append_text(dialog, " VHT NDP Announcement");
39663 return dissect_ieee80211_vht_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39664 } else if ((dialog_token & 0x03) == 0x01) {
39665 proto_item_append_text(dialog, " Ranging NDP Announcement");
39666 return dissect_ieee80211_ranging_ndp_annc(tvb, pinfo, tree, offset,
39667 has_fcs);
39668 } else if ((dialog_token & 0x03) == 0x02) {
39669 proto_item_append_text(dialog, " HE NDP Announcement");
39670 return dissect_ieee80211_he_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39671 } else if ((dialog_token & 0x03) == 0x03) {
39672 proto_item_append_text(dialog, " EHT NDP Announcement");
39673 return dissect_ieee80211_eht_ndp_annc(tvb, pinfo, tree, offset, has_fcs);
39674 } else {
39675 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 39675))
;
39676 }
39677
39678 return offset;
39679}
39680
39681static void
39682set_src_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, int type)
39683{
39684 set_address_tvb(&pinfo->dl_src, type, 6, tvb, offset);
39685 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
39686 // Should we call proto_tree_add_mac48_detail here?
39687}
39688
39689static void
39690set_dst_addr_cols(packet_info *pinfo, tvbuff_t *tvb, int offset, int type)
39691{
39692 set_address_tvb(&pinfo->dl_dst, type, 6, tvb, offset);
39693 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
39694 // Should we call proto_tree_add_mac48_detail here?
39695}
39696
39697static uint32_t
39698crc32_802_tvb_padded(tvbuff_t *tvb, unsigned hdr_len, unsigned hdr_size, unsigned len)
39699{
39700 uint32_t c_crc;
39701
39702 c_crc = crc32_ccitt_tvb(tvb, hdr_len);
39703 c_crc = crc32_ccitt_tvb_offset_seed(tvb, hdr_size, len, ~c_crc);
39704
39705 return (c_crc);
39706}
39707
39708/*
39709 * Check if the SA at offset is that of an S1G STA, and if so, and the
39710 * IS_S1G_KEY with true.
39711 */
39712static void
39713check_s1g_setting(packet_info *pinfo, tvbuff_t *tvb, int offset)
39714{
39715 uint8_t *src_addr[6];
39716 tvb_memcpy(tvb, src_addr, offset, 6);
39717 unsigned result = GPOINTER_TO_UINT(wmem_map_lookup(sta_prop_hash, &src_addr))((guint) (gulong) (wmem_map_lookup(sta_prop_hash, &src_addr
)))
;
39718 if (result == STA_IS_S1G0x00000001) {
39719 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY, GINT_TO_POINTER(true)((gpointer) (glong) (1)));
39720 }
39721}
39722
39723typedef enum {
39724 ENCAP_802_2,
39725 ENCAP_IPX,
39726 ENCAP_ETHERNET,
39727 ENCAP_EPD
39728} encap_t;
39729
39730/*
39731 * Dissect a Protocol Version 1 frame
39732 */
39733
39734static const value_string pv1_frame_type_vals[] = {
39735 { 0, "PV1 QoS Data - with one SID" },
39736 { 1, "PV1 Management" },
39737 { 2, "PV1 Control" } ,
39738 { 3, "PV1 QoS Data - no SIDs" },
39739 { 4, "PV1 Reserved" },
39740 { 5, "PV1 Reserved" },
39741 { 6, "PV1 Reserved" },
39742 { 7, "PV1 Extension (currently reserved)" },
39743 { 0, NULL((void*)0) }
39744};
39745
39746static const value_string pv1_control_frame_type_vals[] = {
39747 { 0, "STACK" },
39748 { 1, "BAT" },
39749 { 2, "Reserved" },
39750 { 3, "Reserved" },
39751 { 4, "Reserved" },
39752 { 5, "Reserved" },
39753 { 6, "Reserved" },
39754 { 7, "Reserved" },
39755 { 0, NULL((void*)0) }
39756};
39757
39758static const value_string pv1_management_frame_type_vals[] = {
39759 { 0, "Action" },
39760 { 1, "Action No Ack" },
39761 { 2, "PV1 Probe Response" },
39762 { 3, "Resource Allocation" },
39763 { 4, "Reserved" },
39764 { 5, "Reserved" },
39765 { 6, "Reserved" },
39766 { 7, "Reserved" },
39767 { 0, NULL((void*)0) }
39768};
39769
39770/* Also used for S1G PV0 */
39771static const value_string pv1_bandwidth_indic_vals[] = {
39772 { 0, "1 MHz" },
39773 { 1, "2 MHz" },
39774 { 2, "4 MHz" },
39775 { 3, "8 MHz" },
39776 { 4, "16 MHz" },
39777 { 5, "Reserved" },
39778 { 6, "Reserved" },
39779 { 7, "Reserved" },
39780 { 0, NULL((void*)0) },
39781};
39782
39783/*
39784 * Extract the three interesting flags from an SID, however, only set
39785 * the respective booleans if the flag is set in the SID.
39786 */
39787static void
39788extract_a3_a4_amsdu(uint16_t sid, bool_Bool *a3_present, bool_Bool *a4_present,
39789 bool_Bool *a_msdu)
39790{
39791 if (sid & SID_A3_PRESENT0x2000)
39792 *a3_present = true1;
39793 if (sid & SID_A4_PRESENT0x4000)
39794 *a4_present = true1;
39795 if (sid & SID_A_MSDU0x8000)
39796 *a_msdu = true1;
39797}
39798
39799static int
39800wlan_aid_to_str(const address* addr, char* buf, int buf_len)
39801{
39802 int ret;
39803
39804 ret = snprintf(buf, buf_len, "0x%04"PRIx16"x", *(uint16_t *)addr->data);
39805
39806 return ret + 1;
39807}
39808
39809static int
39810wlan_aid_str_len(const address* addr _U___attribute__((unused)))
39811{
39812 return sizeof("0x0000");
39813}
39814
39815#if 0
39816/* The length is 2 bytes, but tvb_address_to_str() etc. don't have a way of
39817 * dealing with addresses that need to mask out bits in the tvb. */
39818static int
39819wlan_aid_len(void)
39820{
39821 return 2;
39822}
39823#endif
39824
39825/*
39826 * If we know the AID, then translated it to an Ethernet addr, otherwise
39827 * just place the AID in the correct col
39828 */
39829static void
39830set_sid_addr_cols(packet_info *pinfo, uint16_t sid, bool_Bool dst)
39831{
39832 uint16_t* aid = wmem_new0(pinfo->pool, uint16_t)((uint16_t*)wmem_alloc0((pinfo->pool), sizeof(uint16_t)));
39833 *aid = sid & SID_AID_MASK0x1FFF;
39834 if (dst) {
39835 set_address(&pinfo->dl_dst, wlan_aid_address_type, (int)sizeof(*aid), aid);
39836 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
39837 } else {
39838 set_address(&pinfo->dl_src, wlan_aid_address_type, (int)sizeof(*aid), aid);
39839 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
39840 }
39841}
39842
39843static int * const sid_headers[] = {
39844 &hf_ieee80211_pv1_sid_association_id,
39845 &hf_ieee80211_pv1_sid_a3_present,
39846 &hf_ieee80211_pv1_sid_a4_present,
39847 &hf_ieee80211_pv1_sid_a_msdu,
39848 NULL((void*)0)
39849};
39850
39851static void
39852dissect_pv1_sid(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)), tvbuff_t *tvb,
39853 unsigned offset)
39854{
39855 proto_tree_add_bitmask(tree, tvb, offset, hf_ieee80211_pv1_sid,
39856 ett_pv1_sid_field, sid_headers, ENC_LITTLE_ENDIAN0x80000000);
39857
39858}
39859
39860static void
39861dissect_pv1_sequence_control(proto_tree *tree, packet_info *pinfo _U___attribute__((unused)),
39862 tvbuff_t *tvb, unsigned offset)
39863{
39864 proto_tree *seq_ctrl_tree = NULL((void*)0);
39865
39866 seq_ctrl_tree = proto_tree_add_subtree(tree, tvb, offset, 2,
39867 ett_pv1_seq_control, NULL((void*)0),
39868 "Sequence Control");
39869 proto_tree_add_item(seq_ctrl_tree, hf_ieee80211_frag_number, tvb, offset, 2,
39870 ENC_LITTLE_ENDIAN0x80000000);
39871 proto_tree_add_item(seq_ctrl_tree, hf_ieee80211_seq_number, tvb, offset, 2,
39872 ENC_LITTLE_ENDIAN0x80000000);
39873}
39874
39875static int
39876dissect_pv1_data(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)),
39877 int offset, bool_Bool a_msdu _U___attribute__((unused)), struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39878 unsigned len_no_fcs _U___attribute__((unused)))
39879{
39880
39881 return offset;
39882}
39883
39884static int
39885dissect_pv1_mgmt_action(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39886 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39887 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39888 unsigned len _U___attribute__((unused)))
39889{
39890 proto_tree *mgmt_action_tree = NULL((void*)0);
39891
39892 mgmt_action_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
39893 ett_pv1_mgmt_action, NULL((void*)0),
39894 "Action");
39895 dissect_mgt_action(tvb, pinfo, mgmt_action_tree, offset, NULL((void*)0));
39896
39897 return offset;
39898}
39899
39900static int
39901dissect_pv1_mgmt_action_no_ack(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39902 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39903 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39904 unsigned len _U___attribute__((unused)))
39905{
39906 proto_tree *mgmt_action_tree = NULL((void*)0);
39907
39908 mgmt_action_tree = proto_tree_add_subtree(tree, tvb, offset, 4,
39909 ett_pv1_mgmt_action, NULL((void*)0),
39910 "Action No Ack");
39911 dissect_mgt_action(tvb, pinfo, mgmt_action_tree, offset, NULL((void*)0));
39912
39913 return offset;
39914}
39915
39916#define PV1_NEXT_TBTT_PRESENT0x0100 0x0100
39917#define PV1_FULL_SSID_PRESENT0x0200 0x0200
39918#define PV1_ANO_PRESENT0x0400 0x0400
39919
39920static int
39921dissect_pv1_mgmt_probe_response(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39922 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39923 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39924 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39925{
39926
39927 return offset;
39928}
39929
39930static int
39931dissect_pv1_mgmt_resource_alloc(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)),
39932 proto_tree *tree _U___attribute__((unused)), int offset _U___attribute__((unused)),
39933 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39934 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39935{
39936
39937 return offset;
39938}
39939
39940static int
39941dissect_pv1_management(tvbuff_t *tvb _U___attribute__((unused)), packet_info *pinfo _U___attribute__((unused)), proto_tree *tree _U___attribute__((unused)),
39942 int offset, struct ieee_802_11_phdr *phdr _U___attribute__((unused)), uint8_t subtype,
39943 unsigned len_no_fcs, uint16_t frame_control _U___attribute__((unused)))
39944{
39945
39946 /*
39947 * XXX - We add COMPOSE_FRAME_TYPE(fcf) (which doesn't work for PV1) as
39948 * proto_data FRAME_TYPE_KEY for PV0. Do we need to put something here?
39949 */
39950 switch (subtype) {
39951 case PV1_MANAGEMENT_ACTION0x00:
39952 offset = dissect_pv1_mgmt_action(tvb, pinfo, tree, offset, phdr, len_no_fcs);
39953 break;
39954 case PV1_MANAGEMENT_ACTION_NO_ACK0x01:
39955 offset = dissect_pv1_mgmt_action_no_ack(tvb, pinfo, tree, offset, phdr, len_no_fcs);
39956 break;
39957 case PV1_MANAGEMENT_PROBE_RESPONSE0x02:
39958 offset = dissect_pv1_mgmt_probe_response(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39959 break;
39960 case PV1_MANAGEMENT_RESOURCE_ALLOC0x03:
39961 offset = dissect_pv1_mgmt_resource_alloc(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
39962 break;
39963 default:
39964 proto_tree_add_item(tree, hf_ieee80211_pv1_mgmt_reserved, tvb, offset,
39965 len_no_fcs, ENC_NA0x00000000);
39966 offset = len_no_fcs;
39967 }
39968
39969 return offset;
39970}
39971
39972static int
39973dissect_pv1_control_stack(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39974 proto_tree *tree, int offset,
39975 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39976 unsigned len _U___attribute__((unused)), uint16_t frame_control _U___attribute__((unused)))
39977{
39978 proto_tree *stack_tree = NULL((void*)0);
39979
39980 stack_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_pv1_cntl_stack,
39981 NULL((void*)0), "STACK");
39982 proto_tree_add_item(stack_tree, hf_ieee80211_pv1_cnt_stack_tetra_timest,
39983 tvb, offset, 4, ENC_LITTLE_ENDIAN0x80000000);
39984 offset += 4;
39985
39986 return offset;
39987}
39988
39989static int
39990dissect_pv1_control_bat(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
39991 proto_tree *tree, int offset,
39992 struct ieee_802_11_phdr *phdr _U___attribute__((unused)),
39993 unsigned len _U___attribute__((unused)),
39994 uint16_t frame_control _U___attribute__((unused)))
39995{
39996 proto_tree *bat_tree = NULL((void*)0);
39997
39998 bat_tree = proto_tree_add_subtree(tree, tvb, offset, 4, ett_pv1_cntl_stack,
39999 NULL((void*)0), "BAT");
40000
40001 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_beacon_seq, tvb,
40002 offset, 1, ENC_NA0x00000000);
40003 offset += 1;
40004
40005 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_penta_timest, tvb,
40006 offset, 5, ENC_LITTLE_ENDIAN0x80000000);
40007 offset += 5;
40008
40009 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_next_twt_info, tvb,
40010 offset, 6, ENC_LITTLE_ENDIAN0x80000000);
40011 offset += 6;
40012
40013 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_stating_seq_cntl, tvb,
40014 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40015 offset += 6;
40016
40017 proto_tree_add_item(bat_tree, hf_ieee80211_pv1_cnt_bat_bitmap, tvb, offset,
40018 4, ENC_LITTLE_ENDIAN0x80000000);
40019 offset += 4;
40020
40021 return offset;
40022}
40023
40024static int
40025dissect_pv1_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
40026 int offset, struct ieee_802_11_phdr *phdr, uint8_t subtype,
40027 unsigned len_no_fcs, uint16_t frame_control)
40028{
40029 switch (subtype) {
40030 case PV1_CONTROL_STACK0x00:
40031 offset = dissect_pv1_control_stack(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
40032 break;
40033
40034 case PV1_CONTROL_BAT0x01:
40035 offset = dissect_pv1_control_bat(tvb, pinfo, tree, offset, phdr, len_no_fcs, frame_control);
40036 break;
40037
40038 default:
40039 proto_tree_add_item(tree, hf_ieee80211_pv1_cntl_reserved, tvb, offset,
40040 len_no_fcs, ENC_NA0x00000000);
40041 offset = len_no_fcs;
40042 }
40043
40044 return offset;
40045}
40046
40047static int
40048dissect_ieee80211_pv1(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree,
40049 struct ieee_802_11_phdr *phdr)
40050{
40051 uint16_t fcf;
40052 uint8_t type, subtype, from_ds;
40053 unsigned offset = 0;
40054 const char *fts_str = NULL((void*)0);
40055 proto_item *ti;
40056 proto_tree *hdr_tree;
40057 proto_item *fc_item = NULL((void*)0);
40058 proto_tree *fc_tree = NULL((void*)0);
40059 bool_Bool a1_is_sid = false0;
40060 bool_Bool a2_is_sid = false0;
40061 bool_Bool a3_present = false0;
40062 bool_Bool a4_present = false0;
40063 bool_Bool a_msdu = false0;
40064 unsigned len = tvb_reported_length_remaining(tvb, offset);
40065 unsigned len_no_fcs = len;
40066 proto_tree *mgt_tree;
40067
40068 fcf = tvb_get_letohs(tvb, offset);
40069
40070 type = FCF_PV1_TYPE(fcf)(((fcf) >> 2) & 0x7);
40071 subtype = FCF_PV1_SUBTYPE(fcf)(((fcf) >> 5) & 0x7);
40072
40073 fts_str = val_to_str(pinfo->pool, type, pv1_frame_type_vals, "Unrecognized frame type (%d)");
40074 col_set_str(pinfo->cinfo, COL_INFO, fts_str);
40075
40076 /* Create the protocol tree */
40077 ti = proto_tree_add_protocol_format (tree, proto_wlan, tvb, 0, -1,
40078 "IEEE 802.11 %s", fts_str);
40079 hdr_tree = proto_item_add_subtree(ti, ett_80211);
40080
40081 /* Add the FC and duration/id to the current tree */
40082 fc_item = proto_tree_add_item(hdr_tree, hf_ieee80211_fc_field, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40083
40084 fc_tree = proto_item_add_subtree(fc_item, ett_fc_tree);
40085
40086 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_proto_version, tvb, offset,
40087 2, ENC_LITTLE_ENDIAN0x80000000);
40088 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_type, tvb, offset, 2,
40089 ENC_LITTLE_ENDIAN0x80000000);
40090 /*
40091 * PDID/Subtype depends on ... whether it is a QoS data frame or Control
40092 * or Management frames
40093 */
40094 switch (type) {
40095 case PV1_QOS_DATA_1MAC0x00:
40096 case PV1_QOS_DATA_2MAC0x03:
40097 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_ptid, tvb, offset, 2,
40098 ENC_LITTLE_ENDIAN0x80000000);
40099 break;
40100
40101 case PV1_MANAGEMENT0x01:
40102 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_subtype, tvb, offset,
40103 2, ENC_LITTLE_ENDIAN0x80000000);
40104 break;
40105
40106 case PV1_CONTROL0x02:
40107 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_subtype, tvb, offset,
40108 2, ENC_LITTLE_ENDIAN0x80000000);
40109 break;
40110
40111 default: /* Assume all else just a 3-bit field */
40112 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_unk_field, tvb, offset, 2,
40113 ENC_LITTLE_ENDIAN0x80000000);
40114 break;
40115 }
40116
40117 from_ds = (fcf >> 8) & 0x01; /* It's also the slot assignment field */
40118
40119 switch (type) {
40120 case PV1_CONTROL0x02:
40121 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_bw_indication, tvb,
40122 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40123 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_dynamic_indication, tvb,
40124 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40125 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_power_mgmt, tvb,
40126 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40127 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_more_data, tvb,
40128 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40129 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_flow_control, tvb,
40130 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40131 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_cntl_next_twt_info, tvb,
40132 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40133 break;
40134 case PV1_MANAGEMENT0x01:
40135 if (subtype == PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
40136 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_next_tbt, tvb,
40137 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40138 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_full_ssid, tvb,
40139 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40140 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_ano, tvb,
40141 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40142 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_bss_bw, tvb,
40143 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40144 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_security, tvb,
40145 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40146 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc, tvb,
40147 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40148 } else if (subtype == PV1_MANAGEMENT_RESOURCE_ALLOC0x03) {
40149 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_slot_assign, tvb,
40150 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40151 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_more_frag, tvb,
40152 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40153 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt, tvb,
40154 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40155 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_grp_indic, tvb,
40156 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40157 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_protected, tvb,
40158 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40159 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc, tvb,
40160 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40161 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm, tvb,
40162 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40163 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_mgmt_pr_ack_policy, tvb,
40164 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40165 } else {
40166 // TODO: What about the rest
40167 }
40168 break;
40169
40170 default:
40171 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_from_ds, tvb, offset, 2,
40172 ENC_LITTLE_ENDIAN0x80000000);
40173 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_more_fragments, tvb,
40174 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40175 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_power_mgmt, tvb, offset, 2,
40176 ENC_LITTLE_ENDIAN0x80000000);
40177 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_more_data, tvb, offset, 2,
40178 ENC_LITTLE_ENDIAN0x80000000);
40179 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_protected_frame, tvb,
40180 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40181 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_end_service_per, tvb,
40182 offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40183 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_relayed_frame, tvb, offset,
40184 2, ENC_LITTLE_ENDIAN0x80000000);
40185 proto_tree_add_item(fc_tree, hf_ieee80211_fc_pv1_ack_policy, tvb, offset, 2,
40186 ENC_LITTLE_ENDIAN0x80000000);
40187 }
40188
40189 offset += 2;
40190
40191 /*
40192 * Now, handle the MAC addresses or SIDs, which is dependent on the
40193 * Type and From DS etc.
40194 */
40195
40196 if (from_ds == 0x0) {
40197 a2_is_sid = true1;
40198 } else {
40199 a1_is_sid = true1;
40200 }
40201
40202 /* Now override where needed */
40203 switch (type) {
40204 case PV1_MANAGEMENT0x01:
40205 if (subtype == PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
40206 a1_is_sid = false0;
40207 a2_is_sid = false0;
40208 }
40209 break;
40210 case PV1_CONTROL0x02:
40211 a1_is_sid = true1;
40212 break;
40213 case PV1_QOS_DATA_2MAC0x03:
40214 a1_is_sid = false0;
40215 a2_is_sid = false0;
40216 break;
40217 }
40218
40219 /*
40220 * Now handle the address fields.
40221 * If one of them is a SID, then it tells us if A3 and/or A4 is there.
40222 *
40223 * Also, add the SID (with MAC address if we know it), or the MAC
40224 * addr depending on type.
40225 *
40226 * XXX - For PV1_CONTROL frames (IEEE 802.11-2020 9.8.4), the A3 Present,
40227 * A4 Present, and A-MSDU subfields of the SID are reserved. Should
40228 * they be dissected differently, and ignored / expert info if set?
40229 *
40230 * For PV1_MANAGEMENT frames (9.8.5), A4 and A-MSDU cannot be present.
40231 * Ignore / expert info if set?
40232 */
40233 if (a1_is_sid) {
40234 uint16_t a1 = tvb_get_letohs(tvb, offset);
40235 proto_tree *dst_sid = NULL((void*)0);
40236
40237 extract_a3_a4_amsdu(a1, &a3_present, &a4_present, &a_msdu);
40238 set_sid_addr_cols(pinfo, a1, true1); /* Set the R SID address from A1 */
40239
40240 dst_sid = proto_tree_add_subtree(hdr_tree, tvb, offset, 2, ett_pv1_sid,
40241 NULL((void*)0), "Receiver SID");
40242 dissect_pv1_sid(dst_sid, pinfo, tvb, offset);
40243 offset += 2;
40244 } else {
40245 set_dst_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40246 proto_tree_add_mac48_detail(&mac_ra, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40247 offset += 6;
40248 }
40249
40250 if (a2_is_sid) {
40251 uint16_t a2 = tvb_get_letohs(tvb, offset);
40252 proto_tree *src_sid = NULL((void*)0);
40253
40254 extract_a3_a4_amsdu(a2, &a3_present, &a4_present, &a_msdu);
40255 set_sid_addr_cols(pinfo, a2, false0); /* Set the T SID address from A2 */
40256
40257 src_sid = proto_tree_add_subtree(hdr_tree, tvb, offset, 2, ett_pv1_sid,
40258 NULL((void*)0), "Transmitter SID");
40259 dissect_pv1_sid(src_sid, pinfo, tvb, offset);
40260 offset += 2;
40261 } else {
40262 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40263 proto_tree_add_mac48_detail(&mac_ta, NULL((void*)0), ett_addr, tvb, hdr_tree, offset);
40264 offset += 6;
40265 }
40266
40267 /* Now, add the sequence control field if present */
40268 switch (type) {
40269 case PV1_QOS_DATA_1MAC0x00:
40270 case PV1_QOS_DATA_2MAC0x03:
40271 dissect_pv1_sequence_control(hdr_tree, pinfo, tvb, offset);
40272 offset += 2;
40273 break;
40274 case PV1_MANAGEMENT0x01:
40275 if (subtype != PV1_MANAGEMENT_PROBE_RESPONSE0x02) {
40276 dissect_pv1_sequence_control(hdr_tree, pinfo, tvb, offset);
40277 offset += 2;
40278 }
40279 break;
40280 }
40281 /* Now, add A3 and A4 if present */
40282 if (a3_present) {
40283 set_dst_addr_cols(pinfo, tvb, offset, wlan_address_type);
40284 proto_tree_add_mac48_detail(&mac_da, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40285 offset += 6;
40286 }
40287
40288 if (a4_present) {
40289 set_src_addr_cols(pinfo, tvb, offset, wlan_address_type);
40290 proto_tree_add_mac48_detail(&mac_sa, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40291 offset += 6;
40292 }
40293
40294 /* TODO: Properly handle the FCS len */
40295 if (phdr->fcs_len == 4)
40296 len_no_fcs -= 4;
40297
40298 /* Now, handle the body */
40299 switch (type) {
40300 case PV1_QOS_DATA_1MAC0x00:
40301 case PV1_QOS_DATA_2MAC0x03:
40302 offset = dissect_pv1_data(tvb, pinfo, tree, offset, a_msdu, phdr, len_no_fcs);
40303 break;
40304 case PV1_MANAGEMENT0x01:
40305 ti = proto_tree_add_item(tree, hf_ieee80211_mgt, tvb, 0, -1, ENC_NA0x00000000);
40306 mgt_tree = proto_item_add_subtree(ti, ett_80211_mgt);
40307 offset = dissect_pv1_management(tvb, pinfo, mgt_tree, offset, phdr, subtype, len_no_fcs, fcf);
40308 break;
40309 case PV1_CONTROL0x02:
40310 offset = dissect_pv1_control(tvb, pinfo, fc_tree, offset, phdr, subtype, len_no_fcs, fcf);
40311 break;
40312 default:
40313 /* Invalid so far. Insert as data and add an Expert Info */
40314 break;
40315 }
40316
40317 /* Now, handle the FCS, if present */
40318 if (phdr->fcs_len == 4) {
40319 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);
40320 }
40321
40322 return offset;
40323}
40324
40325static int
40326dissect_ieee80211_pv0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
40327 uint32_t option_flags, wlan_hdr_t *whdr,
40328 struct ieee_802_11_phdr *phdr)
40329{
40330 uint16_t fcf, flags, frame_type_subtype, ctrl_fcf, ctrl_type_subtype;
40331 uint16_t cw_fcf;
40332 uint16_t seq_control;
40333 uint32_t seq_number, frag_number;
40334 bool_Bool more_frags;
40335 proto_item *ti = NULL((void*)0);
40336 proto_item *cw_item = NULL((void*)0);
40337 proto_tree *flags_item;
40338 proto_item *hidden_item;
40339 proto_tree *cw_tree = NULL((void*)0);
40340 uint16_t hdr_len, ohdr_len;
40341 uint16_t htc_len = 0;
40342 bool_Bool has_fcs;
40343 int len, reported_len, ivlen;
40344 int sta_addr_offset = 0;
40345 bool_Bool is_amsdu = 0;
40346 bool_Bool save_fragmented;
40347 uint32_t addr_type;
40348 uint8_t octet1, octet2;
40349 uint16_t etype;
40350 char out_buff[SHORT_STR256];
40351 int is_iv_bad;
40352 unsigned char iv_buff[4];
40353 int addr1_type = wlan_ra_ta_address_type;
40354 unsigned offset = 0;
40355 const char *fts_str;
40356 char flag_str[] = "opmPRMFTC";
40357 int ii;
40358 uint16_t qosoff = 0;
40359 uint16_t qos_control = 0;
40360 int meshctl_len = 0;
40361 uint8_t mesh_flags;
40362 uint16_t meshoff = 0;
40363 bool_Bool retransmitted;
40364 bool_Bool isDMG = (phdr->phy == PHDR_802_11_PHY_11AD9);
40365
40366 encap_t encap_type;
40367 proto_tree *hdr_tree = NULL((void*)0);
40368 tvbuff_t *next_tvb = NULL((void*)0);
40369
40370#define PROTECTION_ALG_WEP DOT11DECRYPT_KEY_TYPE_WEP0
40371#define PROTECTION_ALG_TKIP DOT11DECRYPT_KEY_TYPE_TKIP100
40372#define PROTECTION_ALG_CCMP DOT11DECRYPT_KEY_TYPE_CCMP101
40373#define PROTECTION_ALG_CCMP_256102 DOT11DECRYPT_KEY_TYPE_CCMP_256102
40374#define PROTECTION_ALG_GCMP103 DOT11DECRYPT_KEY_TYPE_GCMP103
40375#define PROTECTION_ALG_GCMP_256104 DOT11DECRYPT_KEY_TYPE_GCMP_256104
40376#define PROTECTION_ALG_RSNAPROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP PROTECTION_ALG_CCMP | PROTECTION_ALG_TKIP
40377#define IS_TKIP(tvb, hdr_len) (tvb_get_uint8(tvb, hdr_len + 1) == \
40378 ((tvb_get_uint8(tvb, hdr_len) | 0x20) & 0x7f))
40379#define IS_CCMP(tvb, hdr_len) (tvb_get_uint8(tvb, hdr_len + 2) == 0)
40380 uint8_t algorithm=UINT8_MAX(255);
40381 uint32_t sec_trailer=0;
40382
40383 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))
;
40384
40385 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)))
;
40386 whdr->type = frame_type_subtype;
40387 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17)
40388 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))
;
40389 else
40390 ctrl_fcf = 0;
40391
40392 fts_str = val_to_str_ext_const(frame_type_subtype, &frame_type_subtype_vals_ext,
40393 "Unrecognized (Reserved frame)");
40394 col_set_str(pinfo->cinfo, COL_INFO, fts_str);
40395
40396
40397# define FROM_TO_DS3 3
40398 flags = FCF_FLAGS(fcf)(((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))
;
40399 more_frags = HAVE_FRAGMENTS(flags)((flags) & 0x04);
40400
40401 for (ii = 0; ii < 8; ii++) {
40402 if (! (flags & 0x80 >> ii)) {
40403 flag_str[ii] = '.';
40404 }
40405 }
40406
40407 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2)) {
40408
40409 case MGT_FRAME0x00:
40410 hdr_len = MGT_FRAME_HDR_LEN24;
40411
40412 /*
40413 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
40414 *
40415 * The +HTC/Order subfield is 1 bit in length. It is used for two
40416 * purposes:
40417 *
40418 * -- It is set to 1 in a non-QoS Data frame transmitted by a
40419 * non-QoS STA to indicate that the frame contains an MSDU,
40420 * or fragment thereof, that is being transferred using the
40421 * StrictlyOrdered service class.
40422 *
40423 * -- It is set to 1 in a QoS Data or Management frame transmitted
40424 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
40425 * of the TXVECTOR to indicate that the frame contains an
40426 * HT Control field.
40427 *
40428 * Otherwise, the +HTC/Order subfield is set to 0.
40429 *
40430 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
40431 * transmitted by a DMG STA.
40432 *
40433 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
40434 * QoS frames, also indicates that there's an HT Control field.
40435 */
40436 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
40437 /*
40438 * For the DMG PHY, do *not* treat the +HTC field as an indication
40439 * that there's an HT Control field, because, in the ns-3 capture
40440 * in issue 11277, it's set in packets with a channel frequency
40441 * in the 60 GHz band, meaning DMG (802.11ad), but it's not
40442 * supposed to be set, and those packets lack an HT Control
40443 * field, so they would be dissected incorrectly if we treated
40444 * them as if they had an HT Control field.
40445 */
40446 if (!isDMG) {
40447 /*
40448 * Non-DMG PHY; treat this field as having an HT Control field.
40449 *
40450 * XXX - as I read the above, this shouldn't be set except for
40451 * HT, VHT, or HE PHYs; however, in the capture in issue 11351,
40452 * a frame with an HT Control field, with a radiotap header,
40453 * has no MCS, VHT, or HE field in that header, so Wireshark
40454 * has no clue that it's an HT, VHT, or HE field. assumed that
40455 * this meant that it wouldn't have an HT Control field even
40456 * if it's a QoS field with +HTC/Order set, and misdissected
40457 * it. Omnipeek, which also appeared to have no clue that it
40458 * was an HT or VHT field - it called it an 802.11b frame - *did*
40459 * dissect the HT Control field. Therefore, we must not require
40460 * an indication that a QoS frame is an HT, VHT, or HE frame
40461 * in order to dissect it a having an HT Control field.
40462 */
40463 hdr_len += 4;
40464 htc_len = 4;
40465 }
40466 }
40467 break;
40468
40469 case CONTROL_FRAME0x01:
40470 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40471 hdr_len = 6;
40472 cw_fcf = ctrl_fcf;
40473 } else {
40474 hdr_len = 0;
40475 cw_fcf = fcf;
40476 }
40477 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)))
) {
40478
40479 case CTRL_TRIGGER0x12:
40480 /*
40481 * This is a variable length frame ... we set the real length below
40482 * and since the common info is variable, just set the hdr len to
40483 * the fixed portion, 16. There can also be one or more user-info
40484 * sections, followed by padding.
40485 */
40486 hdr_len = 16;
40487 break;
40488
40489 case CTRL_TACK0x13:
40490 /*
40491 * This also is a variable length frame. Set to 22, the common portion
40492 */
40493 hdr_len = 22;
40494 break;
40495
40496 case CTRL_BEAMFORM_RPT_POLL0x14:
40497 hdr_len += 17;
40498 break;
40499
40500 case CTRL_VHT_NDP_ANNC0x15:
40501 hdr_len += 17;
40502 /* TODO: for now we only consider a single STA, add support for more */
40503 hdr_len += 2;
40504 break;
40505
40506 case CTRL_CTS0x1C:
40507 case CTRL_ACKNOWLEDGEMENT0x1D:
40508 hdr_len += 10;
40509 break;
40510
40511 case CTRL_POLL0x162:
40512 hdr_len += 18;
40513 break;
40514
40515 case CTRL_SPR0x163:
40516 case CTRL_GRANT0x164:
40517 case CTRL_GRANT_ACK0x167:
40518 hdr_len += 23;
40519 break;
40520
40521 case CTRL_DMG_CTS0x165:
40522 hdr_len += 16;
40523 break;
40524
40525 case CTRL_DMG_DTS0x166:
40526 case CTRL_SSW0x168:
40527 hdr_len += 22;
40528 break;
40529
40530 case CTRL_SSW_FEEDBACK0x169:
40531 case CTRL_SSW_ACK0x16A:
40532 hdr_len += 24;
40533 break;
40534
40535 case CTRL_RTS0x1B:
40536 case CTRL_PS_POLL0x1A:
40537 case CTRL_CFP_END0x1E:
40538 case CTRL_CFP_ENDACK0x1F:
40539 case CTRL_BLOCK_ACK_REQ0x18:
40540 case CTRL_BLOCK_ACK0x19:
40541 hdr_len += 16;
40542 break;
40543
40544 default:
40545 hdr_len += 4; /* XXX */
40546 break;
40547 }
40548 break;
40549
40550 case DATA_FRAME0x02:
40551 hdr_len = (FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8)) == DATA_ADDR_T4((0x01|0x02) << 8)) ? DATA_LONG_HDR_LEN30 : DATA_SHORT_HDR_LEN24;
40552
40553 if (option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) {
40554 /*
40555 * IEEE 802.11-2016 section 9.2.4.1.10 "+HTC/Order subfield" says:
40556 *
40557 * The +HTC/Order subfield is 1 bit in length. It is used for two
40558 * purposes:
40559 *
40560 * -- It is set to 1 in a non-QoS Data frame transmitted by a
40561 * non-QoS STA to indicate that the frame contains an MSDU,
40562 * or fragment thereof, that is being transferred using the
40563 * StrictlyOrdered service class.
40564 *
40565 * -- It is set to 1 in a QoS Data or Management frame transmitted
40566 * with a value of HT_GF, HT_MF, or VHT for the FORMAT parameter
40567 * of the TXVECTOR to indicate that the frame contains an
40568 * HT Control field.
40569 *
40570 * Otherwise, the +HTC/Order subfield is set to 0.
40571 *
40572 * NOTE -- The +HTC/Order subfield is always set to 0 for frames
40573 * transmitted by a DMG STA.
40574 *
40575 * and 802.11ax drafts appear to say that the +HTC/Order flag, for
40576 * QoS frames, also indicates that there's an HT Control field.
40577 */
40578 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40579 /* QoS frame */
40580 qosoff = hdr_len;
40581 qos_control = tvb_get_letohs(tvb, qosoff);
40582 hdr_len += 2; /* Include the QoS field in the header length */
40583
40584 if (HAS_HT_CONTROL(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x80)
) {
40585 /*
40586 * For the DMG PHY, do *not* treat the +HTC field as an indication
40587 * that there's an HT Control field, because, in the ns-3 capture
40588 * in issue 11277, it's set in packets with a channel frequency
40589 * in the 60 GHz band, meaning DMG (802.11ad), but it's not
40590 * supposed to be set, and those packets lack an HT Control
40591 * field, so they would be dissected incorrectly if we treated
40592 * them as if they had an HT Control field.
40593 */
40594 if (!isDMG) {
40595 /*
40596 * Non-DMG PHY; treat this field as having an HT Control field.
40597 *
40598 * XXX - as I read the above, this shouldn't be set except for
40599 * HT, VHT, or HE PHYs; however, in the capture in issue 11351,
40600 * a frame with an HT Control field, with a radiotap header,
40601 * has no MCS, VHT, or HE field in that header, so Wireshark
40602 * has no clue that it's an HT, VHT, or HE field. assumed that
40603 * this meant that it wouldn't have an HT Control field even
40604 * if it's a QoS field with +HTC/Order set, and misdissected
40605 * it. Omnipeek, which also appeared to have no clue that it
40606 * was an HT or VHT field - it called it an 802.11b frame - *did*
40607 * dissect the HT Control field. Therefore, we must not require
40608 * an indication that a QoS frame is an HT, VHT, or HE frame
40609 * in order to dissect it a having an HT Control field.
40610 */
40611 hdr_len += 4;
40612 htc_len = 4;
40613 }
40614 }
40615 }
40616 }
40617 break;
40618
40619 case EXTENSION_FRAME0x03:
40620 hdr_len = 10;
40621 break;
40622
40623 default:
40624 hdr_len = 4; /* XXX */
40625 break;
40626 }
40627
40628 /*
40629 * Some portions of this code calculate offsets relative to the end of the
40630 * header. But when the header has been padded to align the data this must
40631 * be done relative to true header size, not the padded/aligned value. To
40632 * simplify this work we stash the original header size in ohdr_len instead
40633 * of recalculating it every time we need it.
40634 */
40635 ohdr_len = hdr_len;
40636 if (phdr->datapad) {
40637 /*
40638 * Add in Atheros padding between the 802.11 header and body.
40639 *
40640 * In the Atheros mesh capture sample we have, the padding
40641 * is before the mesh header, possibly because it doesn't
40642 * recognize the mesh header.
40643 */
40644 hdr_len = WS_ROUNDUP_4(hdr_len)(((hdr_len) + ((unsigned)(4U-1U))) & (~((unsigned)(4U-1U)
)))
;
40645 }
40646
40647 if (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2) == DATA_FRAME0x02) {
40648 /*
40649 * Does it look as if we have a mesh header?
40650 *
40651 * For locally originated mesh frames, the QoS header may be added
40652 * by the hardware, and no present in wireshark captures. This
40653 * poses a problem as the QoS header indicates the presence of the
40654 * mesh control header.
40655 *
40656 * In addition, we have examples of mesh captures where the QoS
40657 * field indicates that there is no mesh control header, yet there
40658 * is one.
40659 *
40660 * Instead of QoS, we use a few heuristics to determine the presence
40661 * of the mesh control header, which is tricky because it can have a
40662 * variable length. We fall back to using the QoS field if it exists
40663 * and the packet isn't long enough (due to truncation or something
40664 * malformed that should be flagged.)
40665 *
40666 * Assume minimal length, and then correct if wrong.
40667 */
40668 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) && DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40669 if (!phdr->no_a_msdus && !DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04)) {
40670 is_amsdu = QOS_AMSDU_PRESENT(qos_control)(((qos_control) & 0x0080) >> 6);
40671 }
40672 }
40673 meshoff = hdr_len;
40674 if (is_amsdu) {
40675 /*
40676 * IEEE 802.11-2020 9.2.4.7.3
40677 * When the frame body contains an A-MSDU, then the Mesh Control field
40678 * is located in the A-MSDU subframe header as shown in Figure 9-70.
40679 * [I.e., after the source and destination address and length octets.]
40680 *
40681 * Use the Mesh Control field of the first subframe for our heuristics.
40682 */
40683 meshoff += 14;
40684 }
40685 if (tvb_bytes_exist(tvb, meshoff, 1)) {
40686 mesh_flags = tvb_get_uint8(tvb, meshoff);
40687 meshctl_len = find_mesh_control_length(mesh_flags);
40688 /* ... and try to read two bytes of next header */
40689 if (tvb_bytes_exist(tvb, meshoff, meshctl_len + 2)) {
40690 uint16_t next_header = tvb_get_letohs(tvb, meshoff + meshctl_len);
40691 if (!has_mesh_control_local(fcf, mesh_flags, next_header)) {
40692 meshctl_len = 0;
40693 }
40694 } else {
40695 if (DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
40696 /* QoS frame */
40697 /*
40698 * Look at the Mesh Control subfield of the QoS field and at the
40699 * purported mesh flag fields.
40700 */
40701 if (!has_mesh_control(fcf, qos_control, mesh_flags)) {
40702 meshctl_len = 0;
40703 }
40704 } else {
40705 /* Not QoS frame, can't do the other heuristic, so assume no mesh */
40706 meshctl_len = 0;
40707 }
40708 }
40709 }
40710 if (!is_amsdu) {
40711 hdr_len += meshctl_len;
40712 }
40713 }
40714
40715 /* Create the protocol tree */
40716 ti = proto_tree_add_protocol_format(tree, proto_wlan, tvb, 0, hdr_len,
40717 "IEEE 802.11 %s", fts_str);
40718 hdr_tree = proto_item_add_subtree(ti, ett_80211);
40719
40720 /* Add the FC and duration/id to the current tree */
40721 dissect_frame_control(hdr_tree, tvb, option_flags, 0, pinfo, isDMG);
40722 dissect_durid(hdr_tree, tvb, frame_type_subtype, 2);
40723
40724 switch (phdr->fcs_len)
40725 {
40726 case 0: /* Definitely has no FCS */
40727 has_fcs = false0;
40728 break;
40729
40730 case 4: /* Definitely has an FCS */
40731 has_fcs = true1;
40732 break;
40733
40734 case -2: /* Data frames have no FCS, other frames may have an FCS */
40735 /* XXX: -2 currently used only in wiretap/netmon.c */
40736 if (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2) == DATA_FRAME0x02)
40737 has_fcs = false0;
40738 else /* Management, Control, Extension */
40739 has_fcs = wlan_check_fcs;
40740 break;
40741
40742 default: /* Don't know - use "wlan_check_fcs" */
40743 has_fcs = wlan_check_fcs;
40744 break;
40745 }
40746
40747 /*
40748 * Decode the part of the frame header that isn't the same for all
40749 * frame types.
40750 */
40751 seq_control = 0;
40752 frag_number = 0;
40753 seq_number = 0;
40754
40755 /* all frames have address 1 = RA */
40756 proto_tree_add_mac48_detail(&mac_ra, &mac_addr, ett_addr, tvb, hdr_tree, 4);
40757
40758 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
40759 {
40760
40761 case MGT_FRAME0x00:
40762 /*
40763 * All management frame types have the same header.
40764 */
40765 set_dst_addr_cols(pinfo, tvb, 4, wlan_address_type);
40766 set_src_addr_cols(pinfo, tvb, 10, wlan_address_type);
40767
40768 /* for tap */
40769 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, 16);
40770 copy_address_shallow(&whdr->src, &pinfo->dl_src);
40771 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
40772
40773 seq_control = tvb_get_letohs(tvb, 22);
40774 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control)((seq_control) & 0x000F);
40775 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control)(((seq_control) & 0xFFF0) >> 4);
40776
40777 col_append_fstr(pinfo->cinfo, COL_INFO,
40778 ", SN=%d", seq_number);
40779
40780 col_append_fstr(pinfo->cinfo, COL_INFO,
40781 ", FN=%d", frag_number);
40782
40783 if (tree)
40784 {
40785 proto_tree_add_mac48_detail(&mac_da, NULL((void*)0), ett_addr, tvb, hdr_tree, 4);
40786 proto_tree_add_mac48_detail(&mac_ta, NULL((void*)0), ett_addr, tvb, hdr_tree, 10);
40787 proto_tree_add_mac48_detail(&mac_sa, NULL((void*)0), ett_addr, tvb, hdr_tree, 10);
40788 check_s1g_setting(pinfo, tvb, 10);
40789 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 16);
40790
40791 /* FIXME: With mgmt frames FROM_TO_DS is always 0, perhaps compare address to bssid instead? */
40792 if ((flags & FROM_TO_DS3) == FLAG_FROM_DS0x02) { /* Receiver address */
40793 sta_addr_offset = 4;
40794 } else if ((flags & FROM_TO_DS3) == FLAG_TO_DS0x01) { /* Transmitter address */
40795 sta_addr_offset = 10;
40796 }
40797 if (sta_addr_offset > 0) {
40798 proto_tree_add_mac48_detail(&mac_staa, NULL((void*)0), ett_addr, tvb, hdr_tree, sta_addr_offset);
40799 }
40800 /* add items for wlan.addr filter */
40801 hidden_item = proto_tree_add_mac48_detail(&mac_addr_hidden, NULL((void*)0), -1, tvb, hdr_tree, 10);
40802 proto_item_set_hidden(hidden_item);
40803 hidden_item = proto_tree_add_mac48_detail(&mac_addr_hidden, NULL((void*)0), -1, tvb, hdr_tree, 16);
40804 proto_item_set_hidden(hidden_item);
40805 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40806 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
40807 }
40808 break;
40809
40810 case CONTROL_FRAME0x01:
40811 {
40812 /*
40813 * Control Wrapper frames insert themselves between address 1
40814 * and address 2 in a normal control frame. Process address 1
40815 * first, then handle the rest of the frame in dissect_control.
40816 */
40817 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40818 offset = 10; /* FC + D/ID + Address 1 + CFC + HTC */
40819 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))
;
40820 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)))
;
40821 } else {
40822 offset = 10; /* FC + D/ID + Address 1 */
40823 ctrl_type_subtype = frame_type_subtype;
40824 }
40825 /* Added to disallow DMG STA to transfer packets of certain forbidden types. */
40826 switch (ctrl_type_subtype)
40827 {
40828 case CTRL_PS_POLL0x1A:
40829 case CTRL_CTS0x1C:
40830 case CTRL_CFP_ENDACK0x1F:
40831 if(isDMG == true1) {
40832 expert_add_info_format(pinfo, hdr_tree, &ei_ieee80211_dmg_subtype,
40833 "DMG STA shouldn't transmit control frame of type contention-free period end+ack");
40834 }
40835 break;
40836 default:
40837 break;
40838 }
40839
40840 if (ctrl_type_subtype == CTRL_PS_POLL0x1A) {
40841 addr1_type = wlan_bssid_address_type;
40842 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 4);
40843 }
40844
40845 /* Add address 1 */
40846 set_dst_addr_cols(pinfo, tvb, 4, addr1_type);
40847
40848 /*
40849 * Start shoving in other fields if needed.
40850 */
40851 if (frame_type_subtype == CTRL_CONTROL_WRAPPER0x17) {
40852 /* if (tree) */
40853 {
40854 cw_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
40855 ett_cntrl_wrapper_fc, NULL((void*)0), "Contained Frame Control");
40856 dissect_frame_control(cw_tree, tvb, 0, offset, pinfo, isDMG);
40857 dissect_ht_control(pinfo, hdr_tree, tvb, offset + 2);
40858 offset += 6;
40859 hdr_tree = proto_tree_add_subtree(hdr_tree, tvb, offset, 2,
40860 ett_cntrl_wrapper_fc, &cw_item, "Carried Frame");
40861 if (isDMG) {
40862 expert_add_info_format(pinfo, cw_item, &ei_ieee80211_dmg_subtype,
40863 "DMG STA shouldn't transmit Control Wrapper frame");
40864 }
40865 }
40866 }
40867
40868 switch (ctrl_type_subtype)
40869 {
40870 case CTRL_PS_POLL0x1A:
40871 case CTRL_CFP_ENDACK0x1F:
40872 {
40873 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40874 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40875 offset += 6;
40876 break;
40877 }
40878
40879 case CTRL_CFP_END0x1E:
40880 {
40881 if (isDMG)
40882 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40883 else
40884 set_src_addr_cols(pinfo, tvb, offset, wlan_bssid_address_type);
40885 /* if (tree) */
40886 {
40887 if (isDMG) {
40888 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40889 } else {
40890 proto_tree_add_mac48_detail(&mac_bssid, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40891 }
40892 offset += 6;
40893 }
40894 break;
40895 }
40896
40897 case CTRL_TRIGGER0x12:
40898 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40899 /*
40900 * The len returned will be adjusted to include any padding required
40901 */
40902 hdr_len = dissect_ieee80211_he_eht_trigger(tvb, pinfo, hdr_tree, offset,
40903 phdr->fcs_len);
40904 ohdr_len = hdr_len;
40905 break;
40906
40907 case CTRL_TACK0x13:
40908 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40909 hdr_len = dissect_ieee80211_s1g_tack(tvb, pinfo, hdr_tree, offset,
40910 flags);
40911 break;
40912
40913 case CTRL_BEAMFORM_RPT_POLL0x14:
40914 {
40915 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40916 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40917 offset += 6;
40918 proto_tree_add_item(hdr_tree, hf_ieee80211_beamform_feedback_seg_retrans_bitmap, tvb, offset, 1, ENC_NA0x00000000);
40919 break;
40920 }
40921
40922 case CTRL_VHT_NDP_ANNC0x15:
40923 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40924
40925 dissect_ieee80211_ndp_annc(tvb, pinfo, hdr_tree, offset, has_fcs);
40926 break;
40927
40928 case CTRL_GRANT_ACK0x167:
40929 case CTRL_SSW0x168:
40930 case CTRL_SSW_FEEDBACK0x169:
40931 case CTRL_SSW_ACK0x16A:
40932 case CTRL_DMG_CTS0x165:
40933 case CTRL_GRANT0x164:
40934 case CTRL_SPR0x163:
40935 case CTRL_POLL0x162:
40936 case CTRL_RTS0x1B:
40937 {
40938 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40939 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, offset);
40940 offset += 6;
40941 break;
40942 }
40943
40944 case CTRL_CONTROL_WRAPPER0x17:
40945 /* XXX - We shouldn't see this. Should we throw an error? */
40946 break;
40947
40948 case CTRL_BLOCK_ACK_REQ0x18:
40949 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40950
40951 dissect_ieee80211_block_ack(tvb, pinfo, hdr_tree, offset, isDMG, true1, has_fcs);
40952 break;
40953
40954 case CTRL_BLOCK_ACK0x19:
40955 set_src_addr_cols(pinfo, tvb, offset, wlan_ra_ta_address_type);
40956
40957 dissect_ieee80211_block_ack(tvb, pinfo, hdr_tree, offset, isDMG, false0, has_fcs);
40958 break;
40959 }
40960/*
40961 * 802.11ad : Used for extension types.
40962 */
40963 switch (ctrl_type_subtype) {
40964 case CTRL_POLL0x162: {
40965 proto_tree_add_item(hdr_tree, hf_ieee80211_cf_response_offset,
40966 tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
40967
40968 break;
40969 }
40970 case CTRL_GRANT0x164:
40971 case CTRL_GRANT_ACK0x167:
40972 case CTRL_SPR0x163: {
40973 bool_Bool isGrant;
40974 if(ctrl_type_subtype != CTRL_GRANT_ACK0x167) {
40975 offset += add_ff_dynamic_allocation(hdr_tree, tvb, pinfo, offset);
40976 } else { /* CTRL_GRANT_ACK have 5 octets that are reserved*/
40977 proto_tree_add_item(hdr_tree, hf_ieee80211_grant_ack_reserved, tvb, offset, 5, ENC_NA0x00000000);
40978 offset += 5;
40979 }
40980 isGrant = ((ctrl_type_subtype==CTRL_GRANT0x164)||(ctrl_type_subtype==CTRL_GRANT_ACK0x167));
40981 add_ff_beamforming_ctrl(hdr_tree, tvb, pinfo, offset, isGrant);
40982 /* offset += 2; */
40983 break;
40984 }
40985 case CTRL_SSW0x168: {
40986 uint32_t sector_sweep;
40987
40988 sector_sweep = tvb_get_letoh24(tvb, offset);
40989 offset += add_ff_sector_sweep(hdr_tree, tvb, pinfo, offset);
40990 /* if Sector Sweep Direction = Responder, use SW Feedback field format when not transmitted as part of an ISS */
40991 if(sector_sweep & 0x00001) {
40992 add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
40993 } else {
40994 add_ff_sector_sweep_feedback_from_iss(hdr_tree, tvb, pinfo, offset);
40995 }
40996 /* offset += 3; */
40997 break;
40998 }
40999 case CTRL_SSW_ACK0x16A:
41000 case CTRL_SSW_FEEDBACK0x169: {
41001 offset += add_ff_sector_sweep_feedback_to_iss(hdr_tree, tvb, pinfo, offset);
41002 offset += add_ff_BRP_request(hdr_tree, tvb, pinfo, offset);
41003 add_ff_beamformed_link(hdr_tree, tvb, pinfo, offset);
41004 /* offset += 1; */
41005 break;
41006 }
41007 case CTRL_DMG_DTS0x166: {
41008 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_sa, tvb, offset, 6, ENC_NA0x00000000);
41009 offset += 6;
41010 proto_tree_add_item(hdr_tree, hf_ieee80211_addr_nav_da, tvb, offset, 6, ENC_NA0x00000000);
41011 /* offset += 6; */
41012 break;
41013 }
41014 default:
41015 break;
41016 }
41017 break;
41018 }
41019
41020 case DATA_FRAME0x02:
41021 {
41022 uint32_t src_offset, dst_offset, da_offset, sa_offset, ta_offset = 10, bssid_offset;
41023 addr_type = FCF_ADDR_SELECTOR(fcf)((fcf) & ((0x01|0x02) << 8));
41024 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) && DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08)) {
41025 if (!phdr->no_a_msdus && !DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04)) {
41026 is_amsdu = QOS_AMSDU_PRESENT(qos_control)(((qos_control) & 0x0080) >> 6);
41027 }
41028 }
41029
41030 /* In order to show src/dst address we must always do the following */
41031 switch (addr_type)
41032 {
41033
41034 case DATA_ADDR_T10:
41035 da_offset = 4;
41036 sa_offset = 10;
41037 bssid_offset = 16;
41038 dst_offset = da_offset;
41039 src_offset = sa_offset;
41040 break;
41041
41042 case DATA_ADDR_T2(0x02 << 8):
41043 da_offset = 4;
41044 sa_offset = !is_amsdu ? 16 : 0;
41045 bssid_offset = 10;
41046 dst_offset = da_offset;
41047 src_offset = sa_offset;
41048 break;
41049
41050 case DATA_ADDR_T3(0x01 << 8):
41051 da_offset = !is_amsdu ? 16 : 0;
41052 sa_offset = 10;
41053 bssid_offset = 4;
41054 dst_offset = da_offset;
41055 src_offset = sa_offset;
41056 break;
41057
41058 case DATA_ADDR_T4((0x01|0x02) << 8):
41059 if (!is_amsdu) {
41060 da_offset = 16;
41061 sa_offset = 24;
41062 bssid_offset = 0;
41063 dst_offset = da_offset;
41064 src_offset = sa_offset;
41065 } else {
41066 da_offset = 0;
41067 sa_offset = 0;
41068 // The second BSSID (Addr4) is handled below.
41069 bssid_offset = 16;
41070 dst_offset = 4; // RA
41071 src_offset = 10; // TA
41072 }
41073 break;
41074
41075 default:
41076 /* All four cases are covered above. */
41077 DISSECTOR_ASSERT_NOT_REACHED()(proto_report_dissector_bug("%s:%u: failed assertion \"DISSECTOR_ASSERT_NOT_REACHED\""
, "epan/dissectors/packet-ieee80211.c", 41077))
;
41078 }
41079
41080 if (src_offset) {
41081 set_address_tvb(&pinfo->dl_src, wlan_address_type, 6, tvb, src_offset);
41082 copy_address_shallow(&pinfo->src, &pinfo->dl_src);
41083 }
41084 if (dst_offset) {
41085 set_address_tvb(&pinfo->dl_dst, wlan_address_type, 6, tvb, dst_offset);
41086 copy_address_shallow(&pinfo->dst, &pinfo->dl_dst);
41087 }
41088
41089 if (bssid_offset) {
41090 /* for tap */
41091 set_address_tvb(&whdr->bssid, wlan_bssid_address_type, 6, tvb, bssid_offset);
41092 /* for dot11decrypt */
41093 save_proto_data(tvb, pinfo, bssid_offset, 6, BSSID_KEY);
41094 }
41095
41096 if (src_offset) {
41097 copy_address_shallow(&whdr->src, &pinfo->dl_src);
41098 }
41099 if (dst_offset) {
41100 copy_address_shallow(&whdr->dst, &pinfo->dl_dst);
41101 }
41102
41103 if ((flags & FROM_TO_DS3) == FLAG_FROM_DS0x02) { /* Receiver address */
41104 sta_addr_offset = 4;
41105 } else if ((flags & FROM_TO_DS3) == FLAG_TO_DS0x01) { /* Transmitter address */
41106 sta_addr_offset = ta_offset;
41107 }
41108
41109 /* for dot11decrypt */
41110 if (sta_addr_offset > 0) {
41111 save_proto_data(tvb, pinfo, sta_addr_offset, 6, STA_KEY);
41112 }
41113
41114 seq_control = tvb_get_letohs(tvb, 22);
41115 frag_number = SEQCTL_FRAGMENT_NUMBER(seq_control)((seq_control) & 0x000F);
41116 seq_number = SEQCTL_SEQUENCE_NUMBER(seq_control)(((seq_control) & 0xFFF0) >> 4);
41117
41118 col_append_fstr(pinfo->cinfo, COL_INFO,
41119 ", SN=%d, FN=%d", seq_number, frag_number);
41120
41121 /* Now if we have a tree we start adding stuff */
41122 if (tree)
41123 {
41124 switch (addr_type)
41125 {
41126 case DATA_ADDR_T10:
41127 case DATA_ADDR_T2(0x02 << 8):
41128 case DATA_ADDR_T3(0x01 << 8):
41129 case DATA_ADDR_T4((0x01|0x02) << 8):
41130 proto_tree_add_mac48_detail(&mac_ta, &mac_addr, ett_addr, tvb, hdr_tree, ta_offset);
41131
41132 if (da_offset) {
41133 bool_Bool add_mac = (da_offset >= 16 && da_offset != sa_offset);
41134 proto_tree_add_mac48_detail(&mac_da, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, da_offset);
41135 }
41136
41137 if (sa_offset) {
41138 bool_Bool add_mac = (sa_offset >= 16);
41139 proto_tree_add_mac48_detail(&mac_sa, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, sa_offset);
41140 }
41141
41142 if (bssid_offset) {
41143 bool_Bool add_mac = (bssid_offset >= 16 && bssid_offset != sa_offset && bssid_offset != da_offset);
41144 proto_tree_add_mac48_detail(&mac_bssid, add_mac ? &mac_addr : NULL((void*)0), ett_addr, tvb, hdr_tree, bssid_offset);
41145 }
41146
41147 if (addr_type == DATA_ADDR_T4((0x01|0x02) << 8) && is_amsdu) {
41148 proto_tree_add_mac48_detail(&mac_bssid, NULL((void*)0), ett_addr, tvb, hdr_tree, 24);
41149 }
41150
41151 if (sta_addr_offset > 0) {
41152 proto_tree_add_mac48_detail(&mac_staa, NULL((void*)0), ett_addr, tvb, hdr_tree, sta_addr_offset);
41153 }
41154 proto_tree_add_item(hdr_tree, hf_ieee80211_frag_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
41155 proto_tree_add_item(hdr_tree, hf_ieee80211_seq_number, tvb, 22, 2, ENC_LITTLE_ENDIAN0x80000000);
41156
41157 break;
41158 }
41159
41160 }
41161 break;
41162 }
41163 case EXTENSION_FRAME0x03: {
41164 switch (frame_type_subtype) {
41165 case EXTENSION_DMG_BEACON0x30: {
41166 set_dst_addr_cols(pinfo, tvb, 4, wlan_bssid_address_type);
41167 proto_tree_add_mac48_detail(&mac_bssid, &mac_addr, ett_addr, tvb, hdr_tree, 4);
41168 break;
41169 }
41170 case EXTENSION_S1G_BEACON0x31: {
41171 uint8_t *src_addr[6];
41172 tvb_memcpy(tvb, src_addr, 4, 6);
41173
41174 /* Insert this src_addr into the s1g sta hash */
41175 if (!wmem_map_lookup(sta_prop_hash, src_addr)) {
41176 wmem_map_insert(sta_prop_hash, wmem_memdup(wmem_file_scope(), src_addr, 6), GUINT_TO_POINTER(STA_IS_S1G)((gpointer) (gulong) (0x00000001)));
41177 }
41178
41179 check_s1g_setting(pinfo, tvb, 4);
41180
41181 set_src_addr_cols(pinfo, tvb, 4, wlan_address_type);
41182 proto_tree_add_mac48_detail(&mac_sa, &mac_addr, ett_addr, tvb, hdr_tree, 4);
41183 break;
41184 }
41185 }
41186 }
41187 }
41188
41189 len = tvb_captured_length_remaining(tvb, hdr_len);
41190 reported_len = tvb_reported_length_remaining(tvb, hdr_len);
41191
41192 if (has_fcs)
41193 {
41194 /*
41195 * Well, this packet should, in theory, have an FCS.
41196 * Do we have the entire packet, and does it have enough data for
41197 * the FCS?
41198 */
41199 if (reported_len < 4)
41200 {
41201 /*
41202 * The packet is claimed not to even have enough data for a 4-byte
41203 * FCS.
41204 * Pretend it doesn't have an FCS.
41205 */
41206 ;
41207 }
41208 else if (len < reported_len)
41209 {
41210 /*
41211 * The packet is claimed to have enough data for a 4-byte FCS, but
41212 * we didn't capture all of the packet.
41213 * Slice off the 4-byte FCS from the reported length, and trim the
41214 * captured length so it's no more than the reported length; that
41215 * will slice off what of the FCS, if any, is in the captured
41216 * length.
41217 */
41218 reported_len -= 4;
41219 if (len > reported_len)
41220 len = reported_len;
41221 }
41222 else
41223 {
41224 /*
41225 * We have the entire packet, and it includes a 4-byte FCS.
41226 * Slice it off, and put it into the tree.
41227 */
41228 len -= 4;
41229 reported_len -= 4;
41230 if (wlan_check_checksum)
41231 {
41232 uint32_t sent_fcs = tvb_get_letohl(tvb, hdr_len + len);
41233 uint32_t fcs;
41234
41235 if (phdr->datapad)
41236 fcs = crc32_802_tvb_padded(tvb, ohdr_len, hdr_len, len);
41237 else
41238 fcs = crc32_ccitt_tvb(tvb, hdr_len + len);
41239 if (fcs != sent_fcs) {
41240 flag_str[8] = '.';
41241 }
41242
41243 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);
41244 } else {
41245 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);
41246 }
41247 }
41248 }
41249 else
41250 {
41251 flag_str[8] = '\0';
41252 }
41253
41254 proto_item_append_text(ti, ", Flags: %s", flag_str);
41255 col_append_fstr(pinfo->cinfo, COL_INFO, ", Flags=%s", flag_str);
41256
41257 flags_item = proto_tree_add_string(hdr_tree, hf_ieee80211_fc_flags_str, tvb, 0, 0, flag_str);
41258 proto_item_set_generated(flags_item);
41259
41260 /*
41261 * Only management and data frames have a body, so we don't have
41262 * anything more to do for other types of frames.
41263 */
41264 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
41265 {
41266
41267 case MGT_FRAME0x00:
41268 if (htc_len == 4) {
41269 dissect_ht_control(pinfo, hdr_tree, tvb, ohdr_len - 4);
41270 }
41271 break;
41272
41273 case DATA_FRAME0x02:
41274 if ((option_flags & IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004) && tree && DATA_FRAME_IS_QOS(frame_type_subtype)((frame_type_subtype) & 0x08))
41275 {
41276 proto_item *qos_fields, *qos_ti;
41277 proto_tree *qos_tree;
41278
41279 uint16_t qos_eosp;
41280 uint16_t qos_field_content;
41281
41282 qos_fields = proto_tree_add_item(hdr_tree, hf_ieee80211_qos, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41283 qos_tree = proto_item_add_subtree(qos_fields, ett_qos_parameters);
41284
41285 qos_eosp = QOS_EOSP(qos_control)(((qos_control) & 0x0010) >> 4);
41286 qos_field_content = QOS_FIELD_CONTENT(qos_control)(((qos_control) & 0xFF00) >> 8);
41287
41288 proto_tree_add_item(qos_tree, hf_ieee80211_qos_tid, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41289
41290 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_priority, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41291 proto_item_set_generated(qos_ti);
41292
41293 if (FLAGS_DS_STATUS(flags)((flags) & (0x02|0x01)) == (FLAG_FROM_DS0x02|FLAG_TO_DS0x01)) {
41294 /* mesh frame */
41295 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41296 } else {
41297 /*
41298 * Table 9-3 from IEEE802.11-2016 tells us that FROM DS means from
41299 * an AP. And Table 9-6 tells us that we should treat bit 4 as
41300 * EOSP if from an AP otherwise as simply bit 4.
41301 */
41302 if (flags & FLAG_FROM_DS0x02) {
41303 proto_tree_add_item(qos_tree, hf_ieee80211_qos_eosp, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41304 } else {
41305 proto_tree_add_item(qos_tree, hf_ieee80211_qos_bit4, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41306 }
41307 }
41308
41309 proto_tree_add_item(qos_tree, hf_ieee80211_qos_ack_policy, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41310
41311 if (!DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04)) {
41312 proto_tree_add_item(qos_tree, hf_ieee80211_qos_amsdu_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41313 if (!phdr->no_a_msdus)
41314 is_amsdu = QOS_AMSDU_PRESENT(qos_control)(((qos_control) & 0x0080) >> 6);
41315 }
41316
41317 if (meshctl_len) {
41318 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ctl_present, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41319 if (POWER_MGT_STATUS(flags)((flags) & 0x10)) {
41320 if (tvb_get_uint8(tvb, 4) & 0x1)
41321 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_multicast, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41322 else
41323 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_unicast, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41324 } else {
41325 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_ps_rsvd, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41326 }
41327 proto_tree_add_item(qos_tree, hf_ieee80211_qos_mesh_rspi, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41328 } else if (flags & FLAG_FROM_DS0x02) {
41329 if (DATA_FRAME_IS_CF_POLL(frame_type_subtype)((frame_type_subtype) & 0x02)) {
41330 /* txop limit */
41331 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_limit, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41332 if (qos_field_content == 0) {
41333 proto_item_append_text(qos_ti, " (transmit one frame immediately)");
41334 }
41335 } else {
41336 /* qap ps buffer state */
41337 proto_item *qos_ps_buf_state_fields;
41338 proto_tree *qos_ps_buf_state_tree;
41339
41340 qos_ps_buf_state_fields = proto_tree_add_item(qos_tree, hf_ieee80211_qos_ps_buf_state, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41341 qos_ps_buf_state_tree = proto_item_add_subtree(qos_ps_buf_state_fields, ett_qos_ps_buf_state);
41342
41343 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_buf_state_indicated, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41344
41345 if (QOS_PS_BUF_STATE_INDICATED(qos_field_content)(((qos_field_content) & 0x02) >> 1)) {
41346 proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_highest_pri_buf_ac, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41347 qos_ti = proto_tree_add_item(qos_ps_buf_state_tree, hf_ieee80211_qos_qap_buf_load, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41348 switch (QOS_PS_QAP_BUF_LOAD(qos_field_content)(((qos_field_content) & 0xF0) >> 4)) {
41349
41350 case 0:
41351 proto_item_append_text(qos_ti, " (no buffered traffic)");
41352 break;
41353
41354 default:
41355 proto_item_append_text(qos_ti, " (%d octets)", QOS_PS_QAP_BUF_LOAD(qos_field_content)(((qos_field_content) & 0xF0) >> 4)*4096);
41356 break;
41357
41358 case 15:
41359 proto_item_append_text(qos_ti, " (greater than 57344 octets)");
41360 break;
41361 }
41362
41363 }
41364 }
41365 } else {
41366 /*
41367 * Only QoS Data, Qos CF-ACK and NULL frames To-DS have a Queue Size
41368 * field.
41369 */
41370 uint16_t scaling_factor = QOS_SCALING_FACTOR(qos_field_content)(((qos_field_content) & 0xD0) >> 6);
41371 uint16_t unscaled_value = QOS_UNSCALED_VALUE(qos_field_content)((qos_field_content) & 0x3F);
41372
41373 if ((DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04) ||
41374 (frame_type_subtype & 0x7) == 0 ||
41375 DATA_FRAME_IS_CF_ACK(frame_type_subtype)((frame_type_subtype) & 0x01))) {
41376 if (qos_eosp) {
41377 /* queue size */
41378 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_queue_size, tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41379 switch (qos_field_content) {
41380 case 0:
41381 proto_item_append_text(qos_ti, " (no buffered traffic in the queue)");
41382 break;
41383
41384 case 254:
41385 proto_item_append_text(qos_ti, " (more than 64768 octets)");
41386 break;
41387
41388 case 255:
41389 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41390 break;
41391
41392 default:
41393 switch (scaling_factor) {
41394 case 0:
41395 proto_item_append_text(qos_ti, " (%u bytes)", 16 * unscaled_value);
41396 break;
41397 case 1:
41398 proto_item_append_text(qos_ti, " (%u bytes)", (1024 + (256 * unscaled_value)));
41399 break;
41400 case 2:
41401 proto_item_append_text(qos_ti, " (%u bytes)", (17408 + (2048 * unscaled_value)));
41402 break;
41403 case 3:
41404 if (unscaled_value < 62)
41405 proto_item_append_text(qos_ti, " (%u bytes)", (148480 + (32768 * unscaled_value)));
41406 else if (unscaled_value == 62)
41407 proto_item_append_text(qos_ti, " (> 2147328)");
41408 else if (unscaled_value == 63)
41409 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41410 break;
41411 default:
41412 proto_item_append_text(qos_ti, " (unspecified or unknown)");
41413 break;
41414 }
41415 break;
41416 }
41417 } else {
41418 /* txop duration requested */
41419 qos_ti = proto_tree_add_item(qos_tree, hf_ieee80211_qos_txop_dur_req,
41420 tvb, qosoff, 2, ENC_LITTLE_ENDIAN0x80000000);
41421 if (qos_field_content == 0) {
41422 proto_item_append_text(qos_ti, " (no TXOP requested)");
41423 }
41424 }
41425 }
41426 }
41427
41428 /* Do we have +HTC? */
41429 if (htc_len == 4) {
41430 dissect_ht_control(pinfo, hdr_tree, tvb, ohdr_len - 4);
41431 }
41432
41433 } /* end of qos control field */
41434
41435 if (meshctl_len != 0 && !is_amsdu) {
41436 dissect_mesh_control(hdr_tree, tvb, pinfo, meshoff);
41437 }
41438
41439 /*
41440 * No-data frames don't have a body.
41441 */
41442 if (DATA_FRAME_IS_NULL(frame_type_subtype)((frame_type_subtype) & 0x04))
41443 goto end_of_wlan;
41444
41445 if (!wlan_subdissector) {
41446 unsigned fnum = 0;
41447
41448 /* key: bssid:src
41449 * data: last seq_control seen and frame number
41450 */
41451 retransmitted = false0;
41452 if (!pinfo->fd->visited) {
41453 retransmit_key key;
41454 retransmit_key *result;
41455
41456 if (whdr->bssid.type == wlan_bssid_address_type) {
41457 memcpy(key.bssid, whdr->bssid.data, 6);
41458 } else {
41459 memset(key.bssid, 0, 6);
41460 }
41461 if (whdr->src.type != AT_NONE) {
41462 memcpy(key.src, whdr->src.data, 6);
41463 } else {
41464 memset(key.src, 0, 6);
41465 }
41466 key.seq_control = 0;
41467 result = (retransmit_key *)g_hash_table_lookup(fc_analyse_retransmit_table, &key);
41468 if (result && (result->seq_control == seq_control)) {
41469 /* keep a pointer to the first seen frame, could be done with proto data? */
41470 fnum = result->fnum;
41471 g_hash_table_insert(fc_first_frame_table, GINT_TO_POINTER(pinfo->num)((gpointer) (glong) (pinfo->num)),
41472 GINT_TO_POINTER(fnum)((gpointer) (glong) (fnum)));
41473 retransmitted = true1;
41474 } else {
41475 /* first time or new seq*/
41476 if (!result) {
41477 result = wmem_new(wmem_file_scope(), retransmit_key)((retransmit_key*)wmem_alloc((wmem_file_scope()), sizeof(retransmit_key
)))
;
41478 *result = key;
41479 g_hash_table_insert(fc_analyse_retransmit_table, result, result);
41480 }
41481 result->seq_control = seq_control;
41482 result->fnum = pinfo->num;
41483 }
41484 }
41485 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)))))
)) {
41486 retransmitted = true1;
41487 }
41488
41489 if (retransmitted) {
41490 col_append_str(pinfo->cinfo, COL_INFO, " [retransmitted]");
41491 if (tree) {
41492 proto_item *item;
41493
41494 item=proto_tree_add_none_format(hdr_tree, hf_ieee80211_fc_analysis_retransmission, tvb, 0, 0,
41495 "Retransmitted frame");
41496 proto_item_set_generated(item);
41497 item=proto_tree_add_uint(hdr_tree, hf_ieee80211_fc_analysis_retransmission_frame, tvb, 0, 0, fnum);
41498 proto_item_set_generated(item);
41499 }
41500 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
41501 call_data_dissector(next_tvb, pinfo, tree);
41502 goto end_of_wlan;
41503 }
41504 }
41505 break;
41506
41507 case CONTROL_FRAME0x01:
41508 goto end_of_wlan;
41509
41510 case EXTENSION_FRAME0x03:
41511 break;
41512
41513 default:
41514 goto end_of_wlan;
41515 }
41516
41517 if (IS_PROTECTED(FCF_FLAGS(fcf))(((((((fcf) & 0xC) >> 2) == 0x1 && (((fcf) &
0xF0) >> 4) == 0x6) ? (((fcf) & 0xF000) >> 12
) : (((fcf) & 0xFF00) >> 8))) & 0x40)
41518 && (frame_type_subtype != EXTENSION_S1G_BEACON0x31)
41519 && !phdr->decrypted
41520 && (wlan_ignore_prot != WLAN_IGNORE_PROT_WO_IV1)) {
41521 /*
41522 * It's a WEP or WPA encrypted frame, and it hasn't already been
41523 * decrypted; dissect the protections parameters and decrypt the data,
41524 * if we have a matching key. Otherwise display it as data.
41525 */
41526 bool_Bool can_decrypt = false0;
41527 proto_tree *wep_tree = NULL((void*)0);
41528 uint32_t iv;
41529 uint8_t wep_key, keybyte;
41530 DOT11DECRYPT_KEY_ITEM used_key = { 0 };
41531
41532 if (len == reported_len) {
41533 next_tvb = try_decrypt(tvb, pinfo, hdr_len, reported_len,
41534 &algorithm, &sec_trailer, &used_key);
41535 }
41536
41537 keybyte = tvb_get_uint8(tvb, hdr_len + 3);
41538 wep_key = KEY_OCTET_WEP_KEY(keybyte)(((keybyte) & 0xC0) >> 6);
41539 if ((keybyte & KEY_EXTIV0x20) && (len >= EXTIV_LEN8)) {
41540 /* Extended IV; this frame is likely encrypted with TKIP or CCMP */
41541 if (tree) {
41542 if (algorithm==PROTECTION_ALG_TKIP)
41543 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41544 ett_wep_parameters, NULL((void*)0), "TKIP parameters");
41545 else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102)
41546 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41547 ett_wep_parameters, NULL((void*)0), "CCMP parameters");
41548 else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104)
41549 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41550 ett_wep_parameters, NULL((void*)0), "GCMP parameters");
41551 else {
41552 if (IS_TKIP(tvb, hdr_len)) {
41553 algorithm=PROTECTION_ALG_TKIP;
41554 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41555 ett_wep_parameters, NULL((void*)0), "TKIP parameters");
41556 } else if (IS_CCMP(tvb, hdr_len)) {
41557 algorithm=PROTECTION_ALG_CCMP;
41558 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41559 ett_wep_parameters, NULL((void*)0), "CCMP parameters");
41560 } else
41561 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 8,
41562 ett_wep_parameters, NULL((void*)0), "TKIP/CCMP parameters");
41563 }
41564 proto_item_set_len(ti, hdr_len + 8);
41565
41566 if (algorithm==PROTECTION_ALG_TKIP) {
41567 snprintf(out_buff, SHORT_STR256, "0x%08X%02X%02X",
41568 tvb_get_letohl(tvb, hdr_len + 4),
41569 tvb_get_uint8(tvb, hdr_len),
41570 tvb_get_uint8(tvb, hdr_len + 2));
41571 proto_tree_add_string(wep_tree, hf_ieee80211_tkip_extiv, tvb, hdr_len,
41572 EXTIV_LEN8, out_buff);
41573 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102 ||
41574 algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41575 snprintf(out_buff, SHORT_STR256, "0x%08X%02X%02X",
41576 tvb_get_letohl(tvb, hdr_len + 4),
41577 tvb_get_uint8(tvb, hdr_len + 1),
41578 tvb_get_uint8(tvb, hdr_len));
41579 proto_tree_add_string(wep_tree, hf_ieee80211_ccmp_extiv, tvb, hdr_len,
41580 EXTIV_LEN8, out_buff);
41581 }
41582
41583 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, wep_key);
41584 }
41585
41586 /* Subtract out the length of the IV. */
41587 len -= EXTIV_LEN8;
41588 reported_len -= EXTIV_LEN8;
41589 ivlen = EXTIV_LEN8;
41590 /* It is unknown whether this is TKIP or CCMP, so let's not even try to
41591 * parse TKIP Michael MIC+ICV or CCMP MIC. */
41592
41593 const uint8_t *key = NULL((void*)0);
41594 int key_len;
41595
41596 /* checking for the trailer */
41597 if (next_tvb!=NULL((void*)0)) {
41598 if (reported_len < (int) sec_trailer) {
41599 /* There is no space for a trailer, ignore it and don't decrypt */
41600 ;
41601 } else if (len < reported_len) {
41602 /* There is space for a trailer, but we haven't capture all the */
41603 /* packet. Slice off the trailer, but don't try to decrypt */
41604 reported_len -= sec_trailer;
41605 if (len > reported_len)
41606 len = reported_len;
41607 } else {
41608 /* Ok, we have a trailer and the whole packet. Decrypt it! */
41609 /* TODO: At the moment we won't add the trailer to the tree, */
41610 /* so don't remove the trailer from the packet */
41611 len -= sec_trailer;
41612 reported_len -= sec_trailer;
41613 can_decrypt = true1;
41614
41615 /* Add Key information to packet */
41616 if (!tvb_get_bits8(tvb, 39, 1)) { /* RA is unicast, encrypted with pairwise key */
41617 key_len = Dot11DecryptGetTK(&used_key, &key);
41618 bytes_to_hexstr(out_buff, key, key_len);
41619 out_buff[2 * key_len] = '\0';
41620 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_tk, tvb, 0, 0, out_buff);
41621 proto_item_set_generated(ti);
41622
41623 /* Also add the PMK used to decrypt the packet. (PMK==PSK) */
41624 if (used_key.KeyData.Wpa.PskLen > 0) {
41625
41626 bytes_to_hexstr(out_buff, used_key.KeyData.Wpa.Psk, used_key.KeyData.Wpa.PskLen);
41627 out_buff[2*used_key.KeyData.Wpa.PskLen] = '\0';
41628 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_pmk, tvb, 0, 0, out_buff);
41629 proto_item_set_generated(ti);
41630 }
41631
41632 } else { /* Encrypted with Group Key */
41633 key_len = Dot11DecryptGetGTK(&used_key, &key);
41634 bytes_to_hexstr(out_buff, key, key_len);
41635 out_buff[2 * key_len] = '\0';
41636 ti = proto_tree_add_string(wep_tree, hf_ieee80211_fc_analysis_gtk, tvb, 0, 0, out_buff);
41637 proto_item_set_generated(ti);
41638 }
41639 }
41640 }
41641 } else {
41642 /* No Ext. IV - WEP packet */
41643 /*
41644 * XXX - pass the IV and key to "try_decrypt_wep()", and have it pass
41645 * them to "wep_decrypt()", rather than having "wep_decrypt()" extract
41646 * them itself.
41647 *
41648 * Also, just pass the data *following* the WEP parameters as the
41649 * buffer to decrypt.
41650 */
41651 iv = tvb_get_ntoh24(tvb, hdr_len);
41652 if (tree) {
41653 wep_tree = proto_tree_add_subtree(hdr_tree, tvb, hdr_len, 4,
41654 ett_wep_parameters, NULL((void*)0), "WEP parameters");
41655
41656 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_iv, tvb, hdr_len, 3, iv);
41657 tvb_memcpy(tvb, iv_buff, hdr_len, 3);
41658 is_iv_bad = weak_iv(iv_buff);
41659 if (is_iv_bad != -1) {
41660 proto_tree_add_boolean_format (wep_tree, hf_ieee80211_wep_iv_weak,
41661 tvb, 0, 0, true1,
41662 "Weak IV for key byte %d",
41663 is_iv_bad);
41664 }
41665 }
41666 if (tree)
41667 proto_tree_add_uint(wep_tree, hf_ieee80211_wep_key, tvb, hdr_len + 3, 1, wep_key);
41668
41669 /* Subtract out the length of the IV. */
41670 len -= 4;
41671 reported_len -= 4;
41672 ivlen = 4;
41673
41674 /* Even if the decryption was not successful, set the algorithm */
41675 algorithm=PROTECTION_ALG_WEP;
41676
41677 /*
41678 * Well, this packet should, in theory, have an ICV.
41679 * Do we have the entire packet, and does it have enough data for
41680 * the ICV?
41681 */
41682 if (reported_len < 4) {
41683 /*
41684 * The packet is claimed not to even have enough data for a
41685 * 4-byte ICV.
41686 * Pretend it doesn't have an ICV.
41687 */
41688 ;
41689 } else if (len < reported_len) {
41690 /*
41691 * The packet is claimed to have enough data for a 4-byte ICV,
41692 * but we didn't capture all of the packet.
41693 * Slice off the 4-byte ICV from the reported length, and trim
41694 * the captured length so it's no more than the reported length;
41695 * that will slice off what of the ICV, if any, is in the
41696 * captured length.
41697 */
41698 reported_len -= 4;
41699 if (len > reported_len)
41700 len = reported_len;
41701 } else {
41702 /*
41703 * We have the entire packet, and it includes a 4-byte ICV.
41704 * Slice it off, and put it into the tree.
41705 *
41706 * We only support decrypting if we have the ICV.
41707 *
41708 * XXX - the ICV is encrypted; we're putting the encrypted
41709 * value, not the decrypted value, into the tree.
41710 */
41711 len -= 4;
41712 reported_len -= 4;
41713 can_decrypt = true1;
41714 }
41715 }
41716
41717 if (algorithm == PROTECTION_ALG_WEP) {
41718 (void) g_strlcpy(wlan_stats.protection, "WEP", MAX_PROTECT_LEN10);
41719 } else if (algorithm == PROTECTION_ALG_TKIP) {
41720 (void) g_strlcpy(wlan_stats.protection, "TKIP", MAX_PROTECT_LEN10);
41721 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102) {
41722 (void) g_strlcpy(wlan_stats.protection, "CCMP", MAX_PROTECT_LEN10);
41723 } else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41724 (void) g_strlcpy(wlan_stats.protection, "GCMP", MAX_PROTECT_LEN10);
41725 } else {
41726 (void) g_strlcpy(wlan_stats.protection, "Unknown", MAX_PROTECT_LEN10);
41727 }
41728
41729 /* protection header */
41730 if (!can_decrypt || (next_tvb == NULL((void*)0))) {
41731 /*
41732 * WEP decode impossible or failed, treat payload as raw data
41733 * and don't attempt fragment reassembly or further dissection.
41734 */
41735 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len + ivlen, len, reported_len);
41736
41737 if (tree) {
41738 if (algorithm == PROTECTION_ALG_WEP) {
41739 if (can_decrypt)
41740 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
41741 hdr_len + ivlen + len, 4,
41742 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
41743 "0x%08x (not verified)",
41744 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
41745 } else if (algorithm == PROTECTION_ALG_CCMP) {
41746 } else if (algorithm == PROTECTION_ALG_TKIP) {
41747 }
41748 }
41749
41750 if ((!(option_flags & IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002)) && (wlan_ignore_prot == WLAN_IGNORE_PROT_NO0)) {
41751 /* Some wireless drivers (such as Centrino) WEP payload already decrypted */
41752 call_data_dissector(next_tvb, pinfo, tree);
41753 goto end_of_wlan;
41754 }
41755 } else {
41756 if (algorithm == PROTECTION_ALG_WEP) {
41757 if (tree)
41758 proto_tree_add_uint_format_value(wep_tree, hf_ieee80211_wep_icv, tvb,
41759 hdr_len + ivlen + len, 4,
41760 tvb_get_ntohl(tvb, hdr_len + ivlen + len),
41761 "0x%08x (correct)",
41762 tvb_get_ntohl(tvb, hdr_len + ivlen + len));
41763
41764 add_new_data_source(pinfo, next_tvb, "Decrypted WEP data");
41765 } else if (algorithm == PROTECTION_ALG_CCMP || algorithm == PROTECTION_ALG_CCMP_256102) {
41766 add_new_data_source(pinfo, next_tvb, "Decrypted CCMP data");
41767 } else if (algorithm == PROTECTION_ALG_GCMP103 || algorithm == PROTECTION_ALG_GCMP_256104) {
41768 add_new_data_source(pinfo, next_tvb, "Decrypted GCMP data");
41769 } else if (algorithm==PROTECTION_ALG_TKIP) {
41770 add_new_data_source(pinfo, next_tvb, "Decrypted TKIP data");
41771 }
41772#undef IS_TKIP
41773#undef IS_CCMP
41774#undef PROTECTION_ALG_CCMP
41775#undef PROTECTION_ALG_TKIP
41776#undef PROTECTION_ALG_WEP
41777 }
41778
41779 /*
41780 * WEP decryption successful!
41781 *
41782 * Use the tvbuff we got back from the decryption; the data starts at
41783 * the beginning. The lengths are already correct for the decoded WEP
41784 * payload.
41785 */
41786 hdr_len = 0;
41787
41788 } else {
41789 /*
41790 * Not a WEP-encrypted frame; just use the data from the tvbuff
41791 * handed to us.
41792 *
41793 * The payload starts at "hdr_len" (i.e., just past the 802.11
41794 * MAC header), the length of data in the tvbuff following the
41795 * 802.11 header is "len", and the length of data in the packet
41796 * following the 802.11 header is "reported_len".
41797 */
41798 next_tvb = tvb;
41799 }
41800
41801 /*
41802 * Do defragmentation if "wlan_defragment" is true, and we have more
41803 * fragments or this isn't the first fragment.
41804 *
41805 * We have to do some special handling to catch frames that
41806 * have the "More Fragments" indicator not set but that
41807 * don't show up as reassembled and don't have any other
41808 * fragments present. Some networking interfaces appear
41809 * to do reassembly even when you're capturing raw packets
41810 * *and* show the reassembled packet without the "More
41811 * Fragments" indicator set *but* with a non-zero fragment
41812 * number.
41813 *
41814 * "fragment_add_seq_802_11()" handles that; we want to call it
41815 * even if we have a short frame, so that it does those checks - if
41816 * the frame is short, it doesn't do reassembly on it.
41817 *
41818 * (This could get some false positives if we really *did* only
41819 * capture the last fragment of a fragmented packet, but that's
41820 * life.)
41821 */
41822 save_fragmented = pinfo->fragmented;
41823 if (wlan_defragment && (more_frags || (frag_number != 0))) {
41824 fragment_head *fd_head;
41825
41826 /*
41827 * If we've already seen this frame, look it up in the
41828 * table of reassembled packets, otherwise add it to
41829 * whatever reassembly is in progress, if any, and see
41830 * if it's done.
41831 */
41832 if (reported_len < 0)
41833 THROW(ReportedBoundsError)except_throw(1, (3), ((void*)0));
41834 fd_head = fragment_add_seq_802_11(&wlan_reassembly_table,
41835 next_tvb, hdr_len, pinfo, seq_number, NULL((void*)0),
41836 frag_number,
41837 reported_len,
41838 more_frags);
41839 next_tvb = process_reassembled_data(tvb, hdr_len, pinfo,
41840 "Reassembled 802.11", fd_head,
41841 &frag_items, NULL((void*)0), hdr_tree);
41842 } else {
41843 /*
41844 * If this is the first fragment, dissect its contents, otherwise
41845 * just show it as a fragment.
41846 */
41847 if (frag_number != 0) {
41848 /* Not the first fragment - don't dissect it. */
41849 next_tvb = NULL((void*)0);
41850 } else {
41851 /* First fragment, or not fragmented. Dissect what we have here. */
41852
41853 /* Get a tvbuff for the payload. */
41854 next_tvb = tvb_new_subset_length_caplen(next_tvb, hdr_len, len, reported_len);
41855
41856 /*
41857 * If this is the first fragment, but not the only fragment,
41858 * tell the next protocol that.
41859 */
41860 if (more_frags)
41861 pinfo->fragmented = true1;
41862 else
41863 pinfo->fragmented = false0;
41864 }
41865 }
41866
41867 if (next_tvb == NULL((void*)0)) {
41868 /* Just show this as an incomplete fragment. */
41869 col_set_str(pinfo->cinfo, COL_INFO, "Fragmented IEEE 802.11 frame");
41870 next_tvb = tvb_new_subset_length_caplen(tvb, hdr_len, len, reported_len);
41871 call_data_dissector(next_tvb, pinfo, tree);
41872 pinfo->fragmented = save_fragmented;
41873 goto end_of_wlan;
41874 }
41875
41876 switch (FCF_FRAME_TYPE (fcf)(((fcf) & 0xC) >> 2))
41877 {
41878
41879 case MGT_FRAME0x00:
41880 dissect_ieee80211_mgt(fcf, next_tvb, pinfo, tree);
41881 try_scan_ft_assoc_keys(pinfo, whdr);
41882 break;
41883
41884 case DATA_FRAME0x02:
41885 if (is_amsdu && (tvb_reported_length_remaining(next_tvb, 0) > 4)) {
41886 proto_item *parent_item;
41887 proto_tree *mpdu_tree;
41888 uint32_t msdu_offset = 0;
41889 unsigned i = 1;
41890
41891 parent_item = proto_tree_add_protocol_format(tree, proto_aggregate, next_tvb, 0,
41892 tvb_reported_length_remaining(next_tvb, 0), "IEEE 802.11 Aggregate MSDU");
41893 mpdu_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_parent_tree);
41894
41895 do {
41896 tvbuff_t *msdu_tvb;
41897 uint16_t msdu_length;
41898 proto_tree *subframe_tree;
41899 bool_Bool last_subframe = false0;
41900 uint16_t subframe_length;
41901
41902 /*
41903 * IEEE Std 802.11-2012 says, in section 8.3.2.2 "A-MSDU format":
41904 *
41905 * The A-MSDU subframe header contains three fields: DA, SA, and
41906 * Length. The order of these fields and the bits within these
41907 * fields are the same as the IEEE 802.3 frame format.
41908 *
41909 * which means that the length field is big-endian, not
41910 * little-endian.
41911 */
41912 msdu_length = tvb_get_ntohs(next_tvb, msdu_offset+12);
41913
41914 if (tvb_reported_length_remaining(next_tvb, msdu_offset+14+msdu_length) <= 14)
41915 last_subframe = true1;
41916
41917 /* The last A-MSDU subframe has no padding. */
41918 if (last_subframe)
41919 subframe_length = 14+msdu_length;
41920 else
41921 subframe_length = WS_ROUNDUP_4(14+msdu_length)(((14+msdu_length) + ((unsigned)(4U-1U))) & (~((unsigned)
(4U-1U))))
;
41922
41923 parent_item = proto_tree_add_item(mpdu_tree, hf_ieee80211_amsdu_subframe, next_tvb,
41924 msdu_offset, subframe_length, ENC_NA0x00000000);
41925 proto_item_append_text(parent_item, " #%u", i);
41926 subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
41927 i += 1;
41928
41929 proto_tree_add_mac48_detail(&mac_da, NULL((void*)0), ett_addr, next_tvb, subframe_tree, msdu_offset);
41930 proto_tree_add_mac48_detail(&mac_sa, NULL((void*)0), ett_addr, next_tvb, subframe_tree, msdu_offset+6);
41931 proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_length, next_tvb, msdu_offset+12, 2, ENC_BIG_ENDIAN0x00000000);
41932
41933 msdu_offset += 14;
41934 if (meshctl_len != 0) {
41935 meshctl_len = dissect_mesh_control(subframe_tree, next_tvb, pinfo, msdu_offset);
41936 msdu_offset += meshctl_len;
41937 if (ckd_sub(&msdu_length, msdu_length, meshctl_len)__builtin_sub_overflow((msdu_length), (meshctl_len), (&msdu_length
))
) {
41938 THROW(ReportedBoundsError)except_throw(1, (3), ((void*)0));
41939 }
41940 }
41941 msdu_tvb = tvb_new_subset_length(next_tvb, msdu_offset, msdu_length);
41942 call_dissector(llc_handle, msdu_tvb, pinfo, subframe_tree);
41943 if (!last_subframe) {
41944 uint8_t padding = (4-((msdu_offset+msdu_length)&3))&3;
41945 if (padding > 0)
41946 proto_tree_add_item(subframe_tree, hf_ieee80211_amsdu_padding, next_tvb, msdu_offset+msdu_length, padding, ENC_NA0x00000000);
41947 }
41948
41949 msdu_offset = WS_ROUNDUP_4(msdu_offset+msdu_length)(((msdu_offset+msdu_length) + ((unsigned)(4U-1U))) & (~((
unsigned)(4U-1U))))
;
41950 } while (tvb_reported_length_remaining(next_tvb, msdu_offset) > 14);
41951 } else {
41952 /* I guess some bridges take Netware Ethernet_802_3 frames,
41953 which are 802.3 frames (with a length field rather than
41954 a type field, but with no 802.2 header in the payload),
41955 and just stick the payload into an 802.11 frame. I've seen
41956 captures that show frames of that sort.
41957
41958 We also handle some odd form of encapsulation in which a
41959 complete Ethernet frame is encapsulated within an 802.11
41960 data frame, with no 802.2 header. This has been seen
41961 from some hardware.
41962
41963 On top of that, at least at some point it appeared that
41964 the OLPC XO sent out frames with two bytes of 0 between
41965 the "end" of the 802.11 header and the beginning of
41966 the payload. Something similar has also been observed
41967 with Atheros chipsets. There the sequence control field
41968 seems repeated.
41969
41970 And, on top of *that*, IEEE Std 802.11-2018 section
41971 5.1.4 "MSDU format" says:
41972
41973 Logical Link Control (LLC) sublayer entities use the MAC
41974 sublayer service to exchange PDUs with peer LLC sublayer
41975 entities. These PDUs are termed MAC sublayer SDUs (MSDUs)
41976 when sent to the MAC sublayer. There are two LLC sublayer
41977 protocols used (see IEEE Std 802-2014); LLC Protocol
41978 Discrimination (LPD) (see ISO/IEC 8802-2:1998) and EtherType
41979 Protocol Discrimination (EPD) (see IEEE Std 802.3-2012).
41980 LPD is used for transmission of all IEEE 802.11 MSDUs with
41981 the exception of the 5.9 GHz bands where EPD is used
41982 (see E.2.3 and E.2.4).
41983
41984 and IEEE Std 1609.3-2016, section 5.2 "Logical link control",
41985 subsection 5.2.1 "General", says:
41986
41987 A Networking Services implementation shall use EPD in the
41988 LLC sublayer as described in IEEE Std 802, using an EtherType
41989 in the LLC sublayer header Type9 field (see Figure 5 and
41990 Figure 28). The LLC sublayer header consists solely of a
41991 2-octet field that contains an EtherType that identifies
41992 the higher layer protocol.
41993
41994 and ISO 21215, second edition, 2018-06, "Intelligent transport
41995 systems -- Localized communications -- ITS-M5", section 6.3
41996 "Logical link control sub-layer" says:
41997
41998 IEEE Std 802.11TM-2016 does not specify a logical link control
41999 sub-layer protocol. Related functionality is part of the
42000 communication adaptation sub-layer specified in 6.4.
42001
42002 The Length/Type field specified in IEEE 802.3-2015 contains
42003 a 2-octet unsigned Integer number. Dependent on the value,
42004 the field provides either length information or EtherType
42005 information. If the value contained in this field is equal
42006 to or larger than 1 536 = 0x06.00, the field contains an
42007 EtherType address. Ethertype addresses are assigned by the
42008 IEEE Registration Authority, and are used to identify the
42009 protocol employed directly above the ITS-S access layer.
42010 This method of addressing is named "EtherType Protocol
42011 Discrimination" (EPD). An ITS-M5 CI shall support EPD
42012 specified in IEEE Std 802.
42013
42014 ...
42015
42016 NOTE 2 EPD replaces LLC Protocol Discrimination (LPD).
42017 ETSI ITS-G5 is the only known ITS access technology still
42018 using LPD.
42019
42020 Different to the information in IEEE Std 802.11-2016, 5.1.4,
42021 EPD is applicable in all frequency bands as long as
42022 dot11OCBActivated is set to true, i.e. activating the operation
42023 mode "outside the context of a BSS" (OCB).
42024
42025 meaning that a packet might just begin with an Ethertype.
42026
42027 So, if the packet doesn't start with 0xaa 0xaa:
42028
42029 we first use the same scheme that linux-wlan-ng does to detect
42030 those encapsulated Ethernet frames, namely looking to see whether
42031 the frame either starts with 6 octets that match the destination
42032 address from the 802.11 header or has 6 octets that match the
42033 source address from the 802.11 header following the first 6 octets,
42034 and, if so, treat it as an encapsulated Ethernet frame;
42035
42036 otherwise, we use the same scheme that we use in the Ethernet
42037 dissector to recognize Netware 802.3 frames, namely checking
42038 whether the packet starts with 0xff 0xff and, if so, treat it
42039 as an encapsulated IPX frame;
42040
42041 otherwise, we check whether the packet starts with 0x00 0x00
42042 or with a copy of the sequence control field and, if so, treat
42043 those two octets as mysterious extra stuff preceding the
42044 payload (possibly OLPC stuff, possibly Ruckus Wireless stuff,
42045 possibly Atheros stuff), and treat what follows as a frame
42046 using LPD;
42047
42048 otherwise, we check whether the first two octets, treated
42049 as an Ethertype, has a dissector and, if so, treat this as
42050 a frame using EPD;
42051
42052 otherwise, we treat this as a frame using LPD. */
42053 heur_dtbl_entry_t *hdtbl_entry;
42054 if (dissector_try_heuristic(heur_subdissector_list, next_tvb, pinfo, tree, &hdtbl_entry, NULL((void*)0))) {
42055 pinfo->fragmented = save_fragmented;
42056 goto end_of_wlan; /* heuristics dissector handled it. */
42057 }
42058 encap_type = ENCAP_802_2;
42059 if (tvb_bytes_exist(next_tvb, 0, 2)) {
42060 octet1 = tvb_get_uint8(next_tvb, 0);
42061 octet2 = tvb_get_uint8(next_tvb, 1);
42062 if ((octet1 != 0xaa) || (octet2 != 0xaa)) {
42063 if ((tvb_memeql(next_tvb, 6, (const uint8_t *)pinfo->dl_src.data, 6) == 0) ||
42064 (tvb_memeql(next_tvb, 0, (const uint8_t *)pinfo->dl_dst.data, 6) == 0))
42065 encap_type = ENCAP_ETHERNET;
42066 else if ((octet1 == 0xff) && (octet2 == 0xff))
42067 encap_type = ENCAP_IPX;
42068 else if (((octet1 == 0x00) && (octet2 == 0x00)) &&
42069 tvb_bytes_exist(next_tvb, 0, 18) &&
42070 (tvb_memeql(next_tvb, 6, (const uint8_t*)pinfo->dl_dst.data, 6) == 0) &&
42071 (tvb_memeql(next_tvb, 12, (const uint8_t*)pinfo->dl_src.data, 6) == 0)) {
42072 proto_tree_add_item(tree, hf_ieee80211_mysterious_extra_stuff, next_tvb, 0, 6, ENC_NA0x00000000);
42073 next_tvb = tvb_new_subset_remaining(next_tvb, 6);
42074 encap_type = ENCAP_ETHERNET;
42075 } else if (((octet1 == 0x00) && (octet2 == 0x00)) ||
42076 (((octet2 << 8) | octet1) == seq_control)) {
42077 proto_tree_add_item(tree, hf_ieee80211_mysterious_extra_stuff, next_tvb, 0, 2, ENC_NA0x00000000);
42078 next_tvb = tvb_new_subset_remaining(next_tvb, 2);
42079 } else if ((etype = ((octet1 << 8) | octet2)) > ETHERNET_II_MIN_LEN1536) {
42080 /*
42081 * This might be an Ethertype, so maybe this is 802.11
42082 * using EPD rather than LPD. Is this a *known* Ethertype?
42083 */
42084 if (dissector_get_uint_handle(ethertype_subdissector_table,
42085 etype) != NULL((void*)0)) {
42086 /* Yes. */
42087 encap_type = ENCAP_EPD;
42088 }
42089 }
42090 }
42091 }
42092
42093 switch (encap_type) {
42094
42095 case ENCAP_802_2:
42096 /* 802.2 LPD */
42097 call_dissector(llc_handle, next_tvb, pinfo, tree);
42098 break;
42099
42100 case ENCAP_ETHERNET:
42101 call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, tree);
42102 break;
42103
42104 case ENCAP_IPX:
42105 call_dissector(ipx_handle, next_tvb, pinfo, tree);
42106 break;
42107
42108 case ENCAP_EPD:
42109 /* EPD */
42110 call_dissector(epd_llc_handle, next_tvb, pinfo, tree);
42111 break;
42112 }
42113 }
42114 break;
42115
42116 case EXTENSION_FRAME0x03:
42117 {
42118 dissect_ieee80211_extension(fcf, next_tvb, pinfo, tree, flags);
42119 break;
42120 }
42121 }
42122 pinfo->fragmented = save_fragmented;
42123
42124end_of_wlan:
42125 whdr->stats = wlan_stats;
42126 tap_queue_packet(wlan_tap, pinfo, whdr);
42127 memset(&wlan_stats, 0, sizeof wlan_stats);
42128
42129 return tvb_captured_length(tvb);
42130}
42131
42132static int
42133dissect_ieee80211_unknown_pv(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)),
42134 proto_tree *tree, uint8_t pv,
42135 struct ieee_802_11_phdr *phdr)
42136{
42137 proto_item *ti;
42138 int len;
42139 unsigned offset = 0;
42140 proto_tree *hdr_tree;
42141 tvbuff_t *next_tvb;
42142
42143 col_add_fstr(pinfo->cinfo, COL_INFO, "Unknown protocol version: %u", pv);
42144
42145 /* Create the protocol tree */
42146 len = tvb_reported_length_remaining(tvb, offset);
42147 ti = proto_tree_add_protocol_format(tree, proto_wlan, tvb, offset, len,
42148 "IEEE 802.11 Unknown Protocol Version:"
42149 "%d", pv);
42150 hdr_tree = proto_item_add_subtree(ti, ett_80211);
42151 /* The FCF is two bytes in known versions. The first 2 bits are the
42152 * protocol version. Let's use the PV1 version so that, among other
42153 * things, it will highlight the entire putative FCF and throw an
42154 * exception if we have fewer than two octets. */
42155 proto_tree_add_item(hdr_tree, hf_ieee80211_fc_pv1_proto_version, tvb, offset, 2, ENC_LITTLE_ENDIAN0x80000000);
42156 len -= 2; /* We have already dealt with two bytes (FCF) */
42157 if (phdr->fcs_len == 4) {
42158 /* This is claimed to have an FCS. Is there enough reported room for it? */
42159 if (len >= 4) {
42160 len -= 4;
42161 }
42162 }
42163 next_tvb = tvb_new_subset_length(tvb, 2, len);
42164 call_data_dissector(next_tvb, pinfo, hdr_tree);
42165 /* Below should throw an exception if we didn't have room for the FCS. */
42166 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);
42167
42168 return tvb_captured_length(tvb);
42169}
42170
42171/* ************************************************************************* */
42172/* Dissect 802.11 frame */
42173/* ************************************************************************* */
42174/*
42175 * The 802.11n specification makes some fairly significant changes to the
42176 * layout of the MAC header. The first two bits of the MAC header are the
42177 * protocol version. You'd think that the 802.11 committee would have
42178 * bumped the version to indicate a different MAC layout, but NOOOO -- we
42179 * have to go digging for bits in various locations instead.
42180 */
42181static int
42182dissect_ieee80211_common(tvbuff_t *tvb, packet_info *pinfo,
42183 proto_tree *tree, uint32_t option_flags,
42184 struct ieee_802_11_phdr *phdr)
42185{
42186 uint8_t pv = 0;
42187 bool_Bool isDMG = (phdr->phy == PHDR_802_11_PHY_11AD9);
42188 bool_Bool isS1G = (phdr->phy == PHDR_802_11_PHY_11AH10);
42189 uint16_t fcf;
42190 static wlan_hdr_t whdrs[4];
42191 wlan_hdr_t *whdr;
42192
42193 /* Update these so the info is available down the line */
42194 if (pinfo->pseudo_header) {
42195 pinfo->pseudo_header->ieee_802_11.has_frequency = phdr->has_frequency;
42196 pinfo->pseudo_header->ieee_802_11.frequency = phdr->frequency;
42197 }
42198
42199 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_DMG_KEY, GINT_TO_POINTER(isDMG)((gpointer) (glong) (isDMG)));
42200
42201 memset(&whdrs[0], 0, sizeof(wlan_hdr_t) * 4);
42202 whdr= &whdrs[0];
42203
42204 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, IS_S1G_KEY, GINT_TO_POINTER(isS1G)((gpointer) (glong) (isS1G)));
42205
42206 /* Handling for one-one mapping between associations and conversations */
42207 if (!pinfo->fd->visited) {
42208 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, ASSOC_COUNTER_KEY,
42209 GUINT_TO_POINTER(association_counter)((gpointer) (gulong) (association_counter)));
42210 }
42211
42212 col_set_str(pinfo->cinfo, COL_PROTOCOL, "802.11");
42213 col_clear(pinfo->cinfo, COL_INFO);
42214
42215 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))
;
42216
42217 /*
42218 * Handle PV0 and PV1 in separate functions.
42219 */
42220 pv = FCF_PROT_VERSION(fcf)((fcf) & 0x3);
42221 switch (pv) {
42222 case PV00x0:
42223 dissect_ieee80211_pv0(tvb, pinfo, tree, option_flags, whdr, phdr);
42224 break;
42225 case PV10x1:
42226 dissect_ieee80211_pv1(tvb, pinfo, tree, phdr);
42227 break;
42228 default: /* Unknown protocol version */
42229 dissect_ieee80211_unknown_pv(tvb, pinfo, tree, pv, phdr);
42230 break;
42231 }
42232 return tvb_captured_length(tvb);
42233}
42234
42235/*
42236 * Dissect 802.11 with a variable-length link-layer header and with the FCS
42237 * presence or absence indicated by the pseudo-header, if there is one.
42238 */
42239static int
42240dissect_ieee80211(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
42241{
42242 struct ieee_802_11_phdr *phdr = (struct ieee_802_11_phdr *)data;
42243 struct ieee_802_11_phdr ourphdr;
42244
42245 if (phdr == NULL((void*)0)) {
42246 /*
42247 * Fake a pseudo-header.
42248 * XXX - what are we supposed to do if the FCS length is unknown?
42249 */
42250 memset(&ourphdr, 0, sizeof(ourphdr));
42251 ourphdr.fcs_len = -1;
42252 ourphdr.decrypted = false0;
42253 ourphdr.datapad = false0;
42254 ourphdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42255 phdr = &ourphdr;
42256 }
42257 return dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, phdr);
42258}
42259
42260/*
42261 * Dissect 802.11 with a variable-length link-layer header and with an
42262 * FCS, but no pseudo-header.
42263 */
42264static int
42265dissect_ieee80211_withfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42266{
42267 struct ieee_802_11_phdr phdr;
42268
42269 /* Construct a pseudo-header to hand to the common code. */
42270 memset(&phdr, 0, sizeof(phdr));
42271 phdr.fcs_len = 4;
42272 phdr.decrypted = false0;
42273 phdr.datapad = false0;
42274 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42275 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
42276 return tvb_captured_length(tvb);
42277}
42278
42279/*
42280 * Dissect 802.11 with a variable-length link-layer header and without an
42281 * FCS, but no pseudo-header.
42282 */
42283static int
42284dissect_ieee80211_withoutfcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42285{
42286 struct ieee_802_11_phdr phdr;
42287
42288 /* Construct a pseudo-header to hand to the common code. */
42289 memset(&phdr, 0, sizeof(phdr));
42290 phdr.decrypted = false0;
42291 phdr.datapad = false0;
42292 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42293 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
42294 return tvb_captured_length(tvb);
42295}
42296
42297/*
42298 * Dissect 802.11 from an Intel 2200BG adapter in a Centrino laptop
42299 * running Windows XP.
42300 *
42301 * From
42302 *
42303 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00184.html
42304 *
42305 * and
42306 *
42307 * https://www.wireshark.org/lists/ethereal-dev/200407/msg00393.html:
42308 *
42309 * I tried capturing from a Centrino laptop with the Intel 2200BG 802.11g
42310 * chipset. I saw a lot of "Ethernet II" frames with 0x2452 as ethertype.
42311 *
42312 * ...
42313 *
42314 * This behaviour has been observed on Windows XP. In my opinion it is
42315 * a "proprietary" behaviour of either the Centrino driver or the Centrino
42316 * hardware. Currently I have no Linux distro installed on the machine to
42317 * verify whether it is also the case.
42318 *
42319 * These packets are seen only in a promiscuous capture:
42320 * - Packets normally received by the Centrino computer have the normal
42321 * structure (no 802.11/LLC header but directly IP header).
42322 * - Packets that are supposed to be received by another computer have
42323 * the 802.11/LLC headers. ... Also I noticed that when WEP is enabled,
42324 * the 802.11 header has the flag "WEP" set to true, but the packet
42325 * is already decrypted. I added a test in the code to accommodate this.
42326 * For TKIP it seems to stay encrypted.
42327 */
42328static int
42329dissect_ieee80211_centrino(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42330{
42331 struct ieee_802_11_phdr phdr;
42332
42333 /* Construct a pseudo-header to hand to the common code. */
42334 memset(&phdr, 0, sizeof(phdr));
42335 phdr.decrypted = false0;
42336 phdr.datapad = false0;
42337 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42338 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_IS_CENTRINO0x00000002|IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
42339 return tvb_captured_length(tvb);
42340}
42341
42342/*
42343 * Dissect 802.11 with a variable-length link-layer header and a byte-swapped
42344 * control field and with no FCS (some hardware sends out LWAPP-encapsulated
42345 * 802.11 packets with the control field byte swapped).
42346 */
42347static int
42348dissect_ieee80211_bsfc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42349{
42350 struct ieee_802_11_phdr phdr;
42351
42352 /* Construct a pseudo-header to hand to the common code. */
42353 memset(&phdr, 0, sizeof(phdr));
42354 phdr.decrypted = false0;
42355 phdr.datapad = false0;
42356 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42357 dissect_ieee80211_common(tvb, pinfo, tree, IEEE80211_COMMON_OPT_BROKEN_FC0x00000001|IEEE80211_COMMON_OPT_NORMAL_QOS0x00000004, &phdr);
42358 return tvb_captured_length(tvb);
42359}
42360
42361/*
42362 * Dissect 802.11 with a variable-length link-layer header without qos elements
42363 * in data+qos frames and with no FCS (sent as WIDS frames by Cisco standalone
42364 * APs).
42365 */
42366static int
42367dissect_ieee80211_noqos(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
42368{
42369 struct ieee_802_11_phdr phdr;
42370
42371 /* Construct a pseudo-header to hand to the common code. */
42372 memset(&phdr, 0, sizeof(phdr));
42373 phdr.decrypted = false0;
42374 phdr.datapad = false0;
42375 phdr.phy = PHDR_802_11_PHY_UNKNOWN0;
42376 dissect_ieee80211_common(tvb, pinfo, tree, 0, &phdr);
42377 return tvb_captured_length(tvb);
42378}
42379
42380
42381/* ------------- */
42382static unsigned
42383retransmit_hash(const void *k)
42384{
42385 const retransmit_key *key = (const retransmit_key *)k;
42386 unsigned hash_val;
42387 int i;
42388
42389 hash_val = 0;
42390 for (i = 0; i < 6; i++)
42391 hash_val += key->bssid[i];
42392
42393 for (i = 0; i < 6; i++)
42394 hash_val += key->src[i];
42395
42396 return hash_val;
42397}
42398
42399static int
42400retransmit_equal(const void *k1, const void *k2)
42401{
42402 const retransmit_key *key1 = (const retransmit_key *)k1;
42403 const retransmit_key *key2 = (const retransmit_key *)k2;
42404
42405 return ((!memcmp(key1->bssid, key2->bssid, 6) && !memcmp(key1->src, key2->src, 6)) ? true1:false0);
42406}
42407
42408static unsigned
42409frame_hash(const void *k)
42410{
42411 uint32_t frame = GPOINTER_TO_UINT(k)((guint) (gulong) (k));
42412
42413 return frame;
42414}
42415
42416static int
42417frame_equal(const void *k1, const void *k2)
42418{
42419 uint32_t frame1 = GPOINTER_TO_UINT(k1)((guint) (gulong) (k1));
42420 uint32_t frame2 = GPOINTER_TO_UINT(k2)((guint) (gulong) (k2));
42421
42422 return frame1==frame2;
42423}
42424
42425/*
42426 * EAPOL key description dissectors.
42427 */
42428#define KEY_INFO_KEYDES_VERSION_MASK0x0007 0x0007
42429#define KEY_INFO_KEY_TYPE_MASK0x0008 0x0008
42430#define KEY_INFO_KEY_INDEX_MASK0x0030 0x0030
42431#define KEY_INFO_INSTALL_MASK0x0040 0x0040
42432#define KEY_INFO_KEY_ACK_MASK0x0080 0x0080
42433#define KEY_INFO_KEY_MIC_MASK0x0100 0x0100
42434#define KEY_INFO_SECURE_MASK0x0200 0x0200
42435#define KEY_INFO_ERROR_MASK0x0400 0x0400
42436#define KEY_INFO_REQUEST_MASK0x0800 0x0800
42437#define KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000 0x1000
42438#define KEY_INFO_SMK_MESSAGE_MASK0x2000 0x2000
42439
42440#define KEYDES_VER_TYPE10x01 0x01
42441#define KEYDES_VER_TYPE20x02 0x02
42442#define KEYDES_VER_TYPE30x03 0x03
42443
42444static const value_string keydes_version_vals[] = {
42445 { KEYDES_VER_TYPE10x01, "RC4 Cipher, HMAC-MD5 MIC" },
42446 { KEYDES_VER_TYPE20x02, "AES Cipher, HMAC-SHA1 MIC" },
42447 { KEYDES_VER_TYPE30x03, "AES Cipher, AES-128-CMAC MIC" },
42448 { 0, NULL((void*)0) }
42449};
42450
42451static int proto_wlan_rsna_eapol;
42452
42453static int hf_wlan_rsna_eapol_wpa_keydes_msgnr;
42454static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo;
42455static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version;
42456static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type;
42457static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index;
42458static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install;
42459static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack;
42460static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic;
42461static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure;
42462static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error;
42463static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request;
42464static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data;
42465static int hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message;
42466static int hf_wlan_rsna_eapol_keydes_key_len;
42467static int hf_wlan_rsna_eapol_keydes_replay_counter;
42468static int hf_wlan_rsna_eapol_keydes_key_iv;
42469static int hf_wlan_rsna_eapol_wpa_keydes_nonce;
42470static int hf_wlan_rsna_eapol_wpa_keydes_rsc;
42471static int hf_wlan_rsna_eapol_wpa_keydes_id;
42472static int hf_wlan_rsna_eapol_wpa_keydes_mic;
42473static int hf_wlan_rsna_eapol_wpa_keydes_data_len;
42474static int hf_wlan_rsna_eapol_wpa_keydes_data;
42475static int hf_wlan_rsna_eapol_wpa_keydes_padding;
42476static int hf_wlan_rsna_eapol_wpa_extraneous;
42477
42478static int ett_keyinfo;
42479static int ett_wlan_rsna_eapol_keydes_data;
42480
42481static const true_false_string keyinfo_key_type_tfs = { "Pairwise Key", "Group Key" };
42482
42483static int
42484keydata_padding_len(tvbuff_t *tvb)
42485{
42486 int keydata_len = tvb_reported_length(tvb);
42487 int len_no_padding = keydata_len;
42488 const uint8_t *keydata = tvb_get_ptr(tvb, 0, keydata_len);
42489 while (len_no_padding > 0 && (keydata[len_no_padding - 1] == 0x00)) {
42490 len_no_padding--;
42491 }
42492 if (len_no_padding > 0 && keydata[len_no_padding - 1] == 0xdd) {
42493 len_no_padding--;
42494 return keydata_len - len_no_padding;
42495 }
42496 return 0;
42497}
42498
42499static void
42500get_eapol_parsed(packet_info *pinfo, PDOT11DECRYPT_EAPOL_PARSED eapol_parsed)
42501{
42502 if (!eapol_parsed) {
42503 return;
42504 }
42505
42506 proto_eapol_key_frame_t *eapol_key =
42507 (proto_eapol_key_frame_t *)p_get_proto_data(pinfo->pool, pinfo, proto_eapol,
42508 EAPOL_KEY_FRAME_KEY0);
42509 if (!eapol_key) {
42510 return;
42511 }
42512 eapol_parsed->len = eapol_key->len;
42513 eapol_parsed->key_type = eapol_key->type;
42514 eapol_parsed->key_version = (uint8_t)
42515 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)))
;
42516 eapol_parsed->key_len = (uint16_t)
42517 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)))
;
42518 eapol_parsed->key_iv = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, KEY_IV_KEY);
42519 eapol_parsed->key_data = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, KEY_DATA_KEY);
42520 eapol_parsed->key_data_len = (uint16_t)
42521 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)))
;
42522 eapol_parsed->nonce = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, NONCE_KEY);
42523 eapol_parsed->group_cipher = (uint8_t)
42524 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)))
;
42525 eapol_parsed->cipher = (uint8_t)
42526 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)))
;
42527 eapol_parsed->akm = (uint8_t)
42528 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)))
;
42529 eapol_parsed->mic = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MIC_KEY);
42530 eapol_parsed->mic_len =
42531 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)))
;
42532 eapol_parsed->gtk = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GTK_KEY);
42533 eapol_parsed->gtk_len = (uint16_t)
42534 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)))
;
42535 eapol_parsed->mld_mac = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MLD_MAC_KEY);
42536
42537 eapol_parsed->mlo_link_count = (uint8_t)GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MLO_LINK_COUNT))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, MLO_LINK_COUNT)))
;
42538 for (int i = 0; i < eapol_parsed->mlo_link_count; ++i) {
42539 eapol_parsed->mlo_link[i].id = (uint8_t)GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MLO_LINK_ID_FIRST + i))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, MLO_LINK_ID_FIRST + i)))
;
42540 eapol_parsed->mlo_link[i].mac = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MLO_LINK_MAC_FIRST + i);
42541 }
42542
42543 eapol_parsed->mlo_gtk_count = (uint8_t)GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MLO_GTK_COUNT))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, MLO_GTK_COUNT)))
;
42544 for (int i = 0; i < eapol_parsed->mlo_gtk_count; ++i) {
42545 eapol_parsed->mlo_gtk[i].link_id = (uint8_t)GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MLO_GTK_LINK_ID_FIRST + i))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, MLO_GTK_LINK_ID_FIRST + i)))
;
42546 eapol_parsed->mlo_gtk[i].key = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MLO_GTK_KEY_FIRST + i);
42547 eapol_parsed->mlo_gtk[i].len = (uint8_t)GPOINTER_TO_UINT(p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MLO_GTK_KEY_LEN_FIRST + i))((guint) (gulong) (p_get_proto_data(pinfo->pool, pinfo, proto_wlan
, MLO_GTK_KEY_LEN_FIRST + i)))
;
42548 }
42549
42550 /* For fast bss transition akms */
42551 eapol_parsed->mdid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDID_KEY);
42552 eapol_parsed->fte.r0kh_id =
42553 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R0KH_ID_KEY);
42554 eapol_parsed->fte.r0kh_id_len = (uint8_t)
42555 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)))
;
42556 eapol_parsed->fte.r1kh_id =
42557 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R1KH_ID_KEY);
42558 eapol_parsed->fte.r1kh_id_len = (uint8_t)
42559 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)))
;
42560}
42561
42562static void
42563get_assoc_parsed(packet_info *pinfo, PDOT11DECRYPT_ASSOC_PARSED assoc_parsed)
42564{
42565 if (!assoc_parsed) {
42566 return;
42567 }
42568
42569 assoc_parsed->group_cipher = (uint8_t)
42570 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)))
;
42571 assoc_parsed->cipher = (uint8_t)
42572 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)))
;
42573 assoc_parsed->akm = (uint8_t)
42574 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)))
;
42575 assoc_parsed->fte.mic = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_MIC_KEY);
42576 assoc_parsed->fte.mic_len =
42577 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)))
;
42578 assoc_parsed->mdid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDID_KEY);
42579 assoc_parsed->fte.anonce =
42580 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_ANONCE_KEY);
42581 assoc_parsed->fte.snonce =
42582 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_SNONCE_KEY);
42583 assoc_parsed->fte.r0kh_id =
42584 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R0KH_ID_KEY);
42585 assoc_parsed->fte.r0kh_id_len = (uint8_t)
42586 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)))
;
42587 assoc_parsed->fte.r1kh_id =
42588 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_R1KH_ID_KEY);
42589 assoc_parsed->fte.r1kh_id_len = (uint8_t)
42590 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)))
;
42591 assoc_parsed->rsne_tag =
42592 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RSNE_TAG_KEY);
42593 assoc_parsed->rsnxe_tag =
42594 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RSNXE_TAG_KEY);
42595 assoc_parsed->mde_tag =
42596 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, MDE_TAG_KEY);
42597 assoc_parsed->fte_tag =
42598 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, FTE_TAG_KEY);
42599 assoc_parsed->rde_tag =
42600 (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, RDE_TAG_KEY);
42601 assoc_parsed->gtk = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, GTK_KEY);
42602 assoc_parsed->gtk_len = (uint16_t)
42603 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)))
;
42604 assoc_parsed->gtk_subelem_key_len = (uint16_t)
42605 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)))
;
42606}
42607
42608static void
42609try_decrypt_keydata(packet_info *pinfo)
42610{
42611 uint32_t dec_caplen;
42612 unsigned char dec_data[DOT11DECRYPT_EAPOL_MAX_LEN1024U];
42613 DOT11DECRYPT_EAPOL_PARSED eapol_parsed;
42614 DOT11DECRYPT_KEY_ITEM used_key;
42615
42616 if (!enable_decryption) {
42617 return;
42618 }
42619
42620 uint8_t *bssid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, BSSID_KEY);
42621 uint8_t *sta = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, STA_KEY);
42622 if (!bssid || !sta) {
42623 return;
42624 }
42625
42626 memset(&eapol_parsed, 0, sizeof(eapol_parsed));
42627 get_eapol_parsed(pinfo, &eapol_parsed);
42628
42629 int ret = Dot11DecryptDecryptKeyData(&dot11decrypt_ctx,
42630 &eapol_parsed,
42631 bssid, sta,
42632 dec_data, &dec_caplen,
42633 &used_key);
42634 if (ret == DOT11DECRYPT_RET_SUCCESS0 && dec_caplen > 0) {
42635 proto_keydata_t *eapol = wmem_new(wmem_file_scope(), proto_keydata_t)((proto_keydata_t*)wmem_alloc((wmem_file_scope()), sizeof(proto_keydata_t
)))
;
42636 eapol->used_key = used_key;
42637 eapol->keydata_len = dec_caplen;
42638 eapol->keydata = (uint8_t *)wmem_memdup(wmem_file_scope(), dec_data, dec_caplen);
42639
42640 /* Save decrypted eapol keydata for rsna dissector */
42641 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_EAPOL_KEY, eapol);
42642 }
42643}
42644
42645static void
42646try_scan_eapol_keys(packet_info *pinfo, DOT11DECRYPT_HS_MSG_TYPE msg_type)
42647{
42648 DOT11DECRYPT_EAPOL_PARSED eapol_parsed;
42649
42650 if (!enable_decryption) {
42651 return;
42652 }
42653
42654 proto_eapol_key_frame_t *eapol_key =
42655 (proto_eapol_key_frame_t *)p_get_proto_data(pinfo->pool, pinfo, proto_eapol,
42656 EAPOL_KEY_FRAME_KEY0);
42657 uint8_t *bssid = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, BSSID_KEY);
42658 uint8_t *sta = (uint8_t *)p_get_proto_data(pinfo->pool, pinfo, proto_wlan, STA_KEY);
42659
42660 if (!eapol_key || !bssid || !sta) {
42661 return;
42662 }
42663
42664 memset(&eapol_parsed, 0, sizeof(eapol_parsed));
42665 get_eapol_parsed(pinfo, &eapol_parsed);
42666 eapol_parsed.msg_type = msg_type;
42667
42668 Dot11DecryptScanEapolForKeys(&dot11decrypt_ctx,
42669 &eapol_parsed,
42670 eapol_key->data, eapol_key->len,
42671 bssid, sta);
42672}
42673
42674static void
42675try_scan_ft_assoc_keys(packet_info *pinfo, const wlan_hdr_t *whdr)
42676{
42677 DOT11DECRYPT_ASSOC_PARSED assoc_parsed;
42678 uint8_t decrypted_buf[DOT11DECRYPT_WPA_PTK_MAX_LEN96];
42679 size_t decrypted_len = 0;
42680 DOT11DECRYPT_KEY_ITEM used_key;
42681 int ret;
42682
42683 if (!enable_decryption || pinfo->fd->visited || !whdr) {
42684 return;
42685 }
42686 if (whdr->type != MGT_ASSOC_REQ0x00 && whdr->type != MGT_ASSOC_RESP0x01 &&
42687 whdr->type != MGT_REASSOC_REQ0x02 && whdr->type != MGT_REASSOC_RESP0x03) {
42688 return;
42689 }
42690
42691 memset(&assoc_parsed, 0, sizeof(assoc_parsed));
42692 get_assoc_parsed(pinfo, &assoc_parsed);
42693 /* Implicit conversion from MGT_ASSOC_xxx to DOT11DECRYPT_SUBTYPE_xxx */
42694 assoc_parsed.frame_subtype = (uint8_t)whdr->type;
42695 memcpy(assoc_parsed.bssid, whdr->bssid.data, 6);
42696 memcpy(assoc_parsed.sa, whdr->src.data, 6);
42697 memcpy(assoc_parsed.da, whdr->dst.data, 6);
42698
42699 ret = Dot11DecryptScanFtAssocForKeys(&dot11decrypt_ctx, &assoc_parsed,
42700 decrypted_buf, &decrypted_len,
42701 &used_key);
42702 if (ret == DOT11DECRYPT_RET_SUCCESS_HANDSHAKE-1 && decrypted_len > 0) {
42703 proto_keydata_t *proto = wmem_new(wmem_file_scope(), proto_keydata_t)((proto_keydata_t*)wmem_alloc((wmem_file_scope()), sizeof(proto_keydata_t
)))
;
42704 proto->used_key = used_key;
42705 proto->keydata_len = (unsigned)decrypted_len;
42706 proto->keydata = (uint8_t *)wmem_memdup(wmem_file_scope(), decrypted_buf, decrypted_len);
42707
42708 /* Save decrypted GTK keydata for tag dissector */
42709 p_add_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_GTK_KEY, proto);
42710 }
42711}
42712
42713/*
42714 * In some cases we do not know the key mic len from other sources, however
42715 * we can figure it out from the first frame in the four-way handshake.
42716 *
42717 * It defaults to 16 bytes, but if there are more than 16 bytes of zeros before
42718 * the eapol data len, then we can adjust upwards. We used steps of 8 bytes
42719 * because the MIC len is usually a multiple of 8 in length.
42720 *
42721 * If we find it, set it in the conversation data for the wlan conversation
42722 * found via the pinfo.
42723 */
42724static void
42725discover_key_mic_len1(tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
42726{
42727 conversation_t *conversation = find_or_create_wlan_conversation(pinfo);
42728 ieee80211_conversation_data_t *conversation_data = get_or_create_conversation_data(conversation);
42729 uint16_t mic_len = 16;
42730
42731 /*
42732 * The first sixteen bytes at offset should 0. If not, get out of here
42733 */
42734 if (tvb_get_letoh64(tvb, offset) != 0 ||
42735 tvb_get_letoh64(tvb, offset + 8) != 0) {
42736 return;
42737 }
42738
42739 offset += 16;
42740 /*
42741 * Do we have another 8 bytes of zeros? But do not fall off the end!
42742 */
42743 while ((tvb_captured_length(tvb) > (offset + 8)) &&
42744 tvb_get_letoh64(tvb, offset) == 0) {
42745 /*
42746 * equal to the rest of the data.
42747 */
42748 mic_len += 8;
42749 offset += 8;
42750
42751 }
42752
42753 /*
42754 * Do the next two bytes give us the length of the remainder?
42755 */
42756 if (tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) + 2U ==
42757 tvb_reported_length_remaining(tvb, offset)) {
42758 conversation_data->discovered_key_mic_len = mic_len;
42759 }
42760}
42761
42762/*
42763 * Sometimes we cannot discover it from the first frame of the four-way
42764 * handshake, however, we can still determine it from the second frame.
42765 */
42766static void
42767discover_key_mic_len2(tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
42768{
42769 conversation_t *conversation = find_or_create_wlan_conversation(pinfo);
42770 ieee80211_conversation_data_t *conversation_data = get_or_create_conversation_data(conversation);
42771 uint16_t mic_len = 16;
42772
42773 /*
42774 * The KeyMIC should have a 2-byte length field following it, and that
42775 * should cover the rest of the captured data ...
42776 */
42777 offset += 16;
42778
42779 while ((tvb_captured_length(tvb) > (offset + 2)) &&
42780 tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) !=
42781 tvb_reported_length_remaining(tvb, offset + 2)) {
42782
42783 /*
42784 * Add 8 more bytes.
42785 */
42786 mic_len +=8;
42787 offset+= 8;
42788 }
42789
42790 /*
42791 * Check that we are correct ... ie, the two bytes where we are is the length
42792 * of the remaining data, because we might have walked off the end of the
42793 * tvb.
42794 *
42795 * We check against the reported length remaining because the capture might
42796 * have been truncated beyond the key data length field.
42797 */
42798 if (tvb_captured_length_remaining(tvb, offset) >= 2 &&
42799 tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000) + 2U ==
42800 tvb_reported_length_remaining(tvb, offset)) {
42801 conversation_data->discovered_key_mic_len = mic_len;
42802 }
42803}
42804
42805static int
42806dissect_wlan_rsna_eapol_wpa_or_rsn_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
42807{
42808 unsigned offset = 0;
42809 uint16_t keyinfo;
42810 uint16_t eapol_data_len;
42811 proto_tree *keydes_tree;
42812 proto_tree *ti = NULL((void*)0);
42813 static int * const wlan_rsna_eapol_wpa_keydes_keyinfo[] = {
42814 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
42815 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
42816 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
42817 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
42818 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
42819 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
42820 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
42821 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
42822 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
42823 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
42824 &hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
42825 NULL((void*)0)
42826 };
42827 uint16_t eapol_data_offset = 76; /* 92 - 16 */
42828 bool_Bool has_nonce = determine_nonce_is_set(tvb);
42829 bool_Bool defaulted_mic_len = false0, group_depended_mic_len = false0;
42830 uint16_t eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len, &group_depended_mic_len);
42831 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42832 eapol_data_offset += eapol_key_mic_len;
42833 DOT11DECRYPT_HS_MSG_TYPE msg_type = DOT11DECRYPT_HS_MSG_TYPE_INVALID;
42834
42835 /*
42836 * RSNA key descriptors.
42837 */
42838 eapol_data_len = tvb_get_ntohs(tvb, offset+eapol_data_offset);
42839 keyinfo = tvb_get_ntohs(tvb, offset);
42840 if (keyinfo & KEY_INFO_REQUEST_MASK0x0800) {
42841 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request)");
42842 if (keyinfo & KEY_INFO_ERROR_MASK0x0400)
42843 col_set_str(pinfo->cinfo, COL_INFO, "Key (Request, Error)");
42844 } else if (keyinfo & KEY_INFO_KEY_TYPE_MASK0x0008) {
42845 uint16_t masked;
42846 /* Windows is setting the Secure Bit on message 2 when rekeying, so we'll ignore it */
42847 /* When an AEAD cipher is used no MIC is included, so we cannot rely on the MIC flag */
42848 masked = keyinfo &
42849 (KEY_INFO_INSTALL_MASK0x0040 | KEY_INFO_KEY_ACK_MASK0x0080);
42850
42851 switch (masked) {
42852 case KEY_INFO_KEY_ACK_MASK0x0080:
42853 {
42854 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 1);
42855
42856 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 1 of 4)");
42857 /*
42858 * If we defaulted it, then try to determine the mic len and update
42859 * structures.
42860 */
42861 if (defaulted_mic_len) {
42862 discover_key_mic_len1(tvb, pinfo, 76);
42863 /* Must reset the MIC len */
42864 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len, &group_depended_mic_len);
42865 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42866 eapol_data_offset = 76 + eapol_key_mic_len;
42867 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42868 }
42869 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_1;
42870 break;
42871 }
42872
42873 case (KEY_INFO_INSTALL_MASK0x0040 | KEY_INFO_KEY_ACK_MASK0x0080):
42874 {
42875 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 3);
42876
42877 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 3 of 4)");
42878 /* Get correct MIC LEN if there is no M1 and M2 */
42879 if (defaulted_mic_len) {
42880 discover_key_mic_len2(tvb, pinfo, 76);
42881 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len, &group_depended_mic_len);
42882 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42883 eapol_data_offset = 76 + eapol_key_mic_len;
42884 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42885 }
42886 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_3;
42887 break;
42888 }
42889
42890 default:
42891 /* We check the key length to differentiate between message 2 and 4 and just hope that
42892 there are no strange implementations with key data and non-zero key length in message 4.
42893 According to the IEEE specification, sections 11.6.6.3 and 11.6.6.5 we should
42894 use the Secure Bit and/or the Nonce, but there are implementations ignoring the spec.
42895 The Secure Bit is incorrectly set on rekeys for Windows clients for Message 2 and the Nonce is non-zero
42896 in Message 4 in Bug 11994 (Apple?) */
42897 /* In Wi-SUN protocol, message 2 does not contains any data. However, all the implementations
42898 * respect 802.11X, so Secure Bit is set only on message 2 and Nonce is set only on message 4
42899 * (see section 6.5.2.3 of Wi-SUN specification) */
42900 /* When using AES-SIV without plaintext (i.e. only for integrity), the ciphertext has length 16 */
42901 /* With MLO message 4 will have 12 bytes of data */
42902 if (((eapol_key_mic_len == 0) && (eapol_data_len > 16)) ||
42903 ((eapol_key_mic_len > 0) && (eapol_data_len == 0) && !(keyinfo & KEY_INFO_SECURE_MASK0x0200) && has_nonce) ||
42904 ((eapol_key_mic_len > 0) && (eapol_data_len != 0) && (eapol_data_len != 12))) {
42905 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 2);
42906
42907 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 2 of 4)");
42908 if (defaulted_mic_len) {
42909 discover_key_mic_len2(tvb, pinfo, 76);
42910 eapol_key_mic_len = determine_mic_len(pinfo, false0, &defaulted_mic_len, &group_depended_mic_len);
42911 save_proto_data_value(pinfo, eapol_key_mic_len, MIC_LEN_KEY);
42912 eapol_data_offset = 76 + eapol_key_mic_len;
42913 eapol_data_len = tvb_get_ntohs(tvb, offset + eapol_data_offset);
42914 }
42915 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_2;
42916 } else {
42917 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 4);
42918
42919 col_set_str(pinfo->cinfo, COL_INFO, "Key (Message 4 of 4)");
42920 msg_type = DOT11DECRYPT_HS_MSG_TYPE_4WHS_4;
42921 }
42922 break;
42923 }
42924 } else {
42925 if (keyinfo & KEY_INFO_KEY_ACK_MASK0x0080) {
42926 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 1);
42927
42928 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 1 of 2)");
42929 msg_type = DOT11DECRYPT_HS_MSG_TYPE_GHS_1;
42930 } else {
42931 ti = proto_tree_add_uint(tree, hf_wlan_rsna_eapol_wpa_keydes_msgnr, tvb, offset, 0, 2);
42932
42933 col_set_str(pinfo->cinfo, COL_INFO, "Key (Group Message 2 of 2)");
42934 msg_type = DOT11DECRYPT_HS_MSG_TYPE_GHS_2;
42935 }
42936 }
42937 proto_item_set_generated(ti);
42938
42939 uint16_t keydes_version = tvb_get_ntohs(tvb, offset) & KEY_INFO_KEYDES_VERSION_MASK0x0007;
42940 save_proto_data_value(pinfo, keydes_version, KEY_VERSION_KEY);
42941 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
42942 ett_keyinfo, wlan_rsna_eapol_wpa_keydes_keyinfo,
42943 ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
42944 offset += 2;
42945
42946 uint16_t key_len = tvb_get_ntohs(tvb, offset);
42947 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_len, tvb, offset,
42948 2, ENC_BIG_ENDIAN0x00000000);
42949 save_proto_data_value(pinfo, tvb_get_ntohs(tvb, offset), KEY_LEN_KEY);
42950 offset += 2;
42951 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_replay_counter, tvb,
42952 offset, 8, ENC_BIG_ENDIAN0x00000000);
42953 offset += 8;
42954 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_nonce, tvb, offset,
42955 32, ENC_NA0x00000000);
42956 save_proto_data(tvb, pinfo, offset, 32, NONCE_KEY);
42957
42958 offset += 32;
42959 proto_tree_add_item(tree, hf_wlan_rsna_eapol_keydes_key_iv, tvb,
42960 offset, 16, ENC_NA0x00000000);
42961 save_proto_data(tvb, pinfo, offset, 16, KEY_IV_KEY);
42962 offset += 16;
42963 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_rsc, tvb, offset,
42964 8, ENC_NA0x00000000);
42965 offset += 8;
42966 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_id, tvb, offset, 8,
42967 ENC_NA0x00000000);
42968 offset += 8;
42969
42970 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_mic, tvb, offset,
42971 eapol_key_mic_len, ENC_NA0x00000000);
42972 save_proto_data(tvb, pinfo, offset, eapol_key_mic_len, MIC_KEY);
42973 offset += eapol_key_mic_len;
42974
42975 proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data_len, tvb,
42976 offset, 2, ENC_BIG_ENDIAN0x00000000);
42977 save_proto_data_value(pinfo, tvb_get_ntohs(tvb, offset), KEY_DATA_LEN_KEY);
42978 offset += 2;
42979
42980 if (eapol_data_len != 0) {
42981 save_proto_data(tvb, pinfo, offset, eapol_data_len, KEY_DATA_KEY);
42982 ti = proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_keydes_data,
42983 tvb, offset, eapol_data_len, ENC_NA0x00000000);
42984 if ((keyinfo & KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000) ||
42985 (!(keyinfo & KEY_INFO_KEY_TYPE_MASK0x0008) && key_len)) {
42986 /* RSN: EAPOL-Key Key Data is encrypted.
42987 * WPA: Group Keys use encrypted Key Data.
42988 * IEEE 802.11i-2004 8.5.2.
42989 * Having an encrypted data field without the Encrypted Key Data set
42990 * is not standard, but there are WPA implementation which assume
42991 * encryption when Key Type = 0. In Wi-SUN, the EAPOL-Key frame has
42992 * Key Type = 0 and Encrypted Key Data = 0, but the Key Data is not
42993 * encrypted. To differentiate this case from non standard WPA, we
42994 * check the Key Length, which is 0 for Wi-SUN.
42995 * Let decryption engine try to decrypt this and if successful it's
42996 * stored in EAPOL_KEY proto data.
42997 */
42998 if (!pinfo->fd->visited) {
42999 try_decrypt_keydata(pinfo);
43000 }
43001
43002 proto_keydata_t *eapol;
43003 eapol = (proto_keydata_t*)
43004 p_get_proto_data(wmem_file_scope(), pinfo, proto_wlan, DECRYPTED_EAPOL_KEY);
43005
43006 if (eapol) {
43007 int keydata_len = eapol->keydata_len;
43008 tvbuff_t *next_tvb = tvb_new_child_real_data(tvb, eapol->keydata,
43009 keydata_len, keydata_len);
43010 keydes_tree = proto_item_add_subtree(ti, ett_wlan_rsna_eapol_keydes_data);
43011
43012 if (keydes_version == KEYDES_VER_TYPE10x01) {
43013 add_new_data_source(pinfo, next_tvb, "Decrypted RC4 keydata");
43014 save_proto_data(next_tvb, pinfo, 0, keydata_len, GTK_KEY);
43015 save_proto_data_value(pinfo, keydata_len, GTK_LEN_KEY);
43016 } else {
43017 add_new_data_source(pinfo, next_tvb, "Decrypted AES keydata");
43018 int padding_len = keydata_padding_len(next_tvb);
43019 ieee_80211_add_tagged_parameters(next_tvb, 0, pinfo, keydes_tree,
43020 keydata_len - padding_len,
43021 -1, NULL((void*)0));
43022 if (padding_len) {
43023 proto_tree_add_item(keydes_tree, hf_wlan_rsna_eapol_wpa_keydes_padding,
43024 next_tvb, keydata_len - padding_len,
43025 padding_len, ENC_NA0x00000000);
43026 }
43027 }
43028 /* Also add the PTK used to decrypt and validate the keydata. */
43029 add_ptk_analysis(tvb, keydes_tree, &eapol->used_key);
43030 }
43031 } else {
43032 keydes_tree = proto_item_add_subtree(ti, ett_wlan_rsna_eapol_keydes_data);
43033 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, keydes_tree,
43034 tvb_reported_length_remaining(tvb, offset),
43035 -1, NULL((void*)0));
43036 }
43037
43038 offset += eapol_data_len;
43039 }
43040 if (!pinfo->fd->visited && msg_type != DOT11DECRYPT_HS_MSG_TYPE_INVALID) {
43041 /* Key data at this pointer was either not encrypted or dot11decrypt
43042 * engine has tried to decrypt keydata. Try to extract the keys now that
43043 * all fields from the EAPOL frame have been parsed.
43044 */
43045 try_scan_eapol_keys(pinfo, msg_type);
43046 }
43047
43048 /*
43049 * Do we have extraneous data at the end?
43050 */
43051 if (offset < (tvb_captured_length(tvb) - 1)) {
43052 proto_item *extra;
43053 extra = proto_tree_add_item(tree, hf_wlan_rsna_eapol_wpa_extraneous, tvb,
43054 offset,
43055 tvb_captured_length_remaining(tvb, offset),
43056 ENC_NA0x00000000);
43057 expert_add_info_format(pinfo, extra, &ei_ieee80211_inv_val,
43058 "Extraneous and invalid data in EAPOL frame");
43059 }
43060 return tvb_captured_length(tvb);
43061}
43062
43063static void try_scan_tdls_keys(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), int offset)
43064{
43065 if (!enable_decryption) {
43066 return;
43067 }
43068 int len = tvb_captured_length(tvb) - offset;
43069 const uint8_t *action = tvb_get_ptr(tvb, offset, len);
43070 if (action) {
43071 Dot11DecryptScanTdlsForKeys(&dot11decrypt_ctx, action, len);
43072 }
43073}
43074
43075/* It returns the algorithm used for decryption and trailer length. */
43076static tvbuff_t *
43077try_decrypt(tvbuff_t *tvb, packet_info *pinfo, unsigned offset, unsigned len,
43078 uint8_t *algorithm, uint32_t *sec_trailer,
43079 PDOT11DECRYPT_KEY_ITEM used_key)
43080{
43081 const uint8_t *enc_data;
43082 tvbuff_t *decr_tvb = NULL((void*)0);
43083 uint32_t dec_caplen;
43084 unsigned char dec_data[DOT11DECRYPT_MAX_CAPLEN(12 * 1024)];
43085
43086 if (!enable_decryption)
43087 return NULL((void*)0);
43088
43089 /* get the entire packet */
43090 enc_data = tvb_get_ptr(tvb, 0, len+offset);
43091
43092 /* decrypt packet with Dot11Decrypt */
43093 int ret = Dot11DecryptDecryptPacket(&dot11decrypt_ctx, enc_data, offset, offset+len,
43094 dec_data, &dec_caplen, used_key);
43095 if (ret == DOT11DECRYPT_RET_SUCCESS0) {
43096 uint8_t *tmp;
43097 *algorithm=used_key->KeyType;
43098 switch (*algorithm) {
43099 case DOT11DECRYPT_KEY_TYPE_WEP0:
43100 *sec_trailer=DOT11DECRYPT_WEP_TRAILER4;
43101 break;
43102 case DOT11DECRYPT_KEY_TYPE_CCMP101:
43103 *sec_trailer=DOT11DECRYPT_CCMP_TRAILER8;
43104 break;
43105 case DOT11DECRYPT_KEY_TYPE_CCMP_256102:
43106 *sec_trailer = DOT11DECRYPT_CCMP_256_TRAILER16;
43107 break;
43108 case DOT11DECRYPT_KEY_TYPE_GCMP103:
43109 case DOT11DECRYPT_KEY_TYPE_GCMP_256104:
43110 *sec_trailer = DOT11DECRYPT_GCMP_TRAILER16;
43111 break;
43112 case DOT11DECRYPT_KEY_TYPE_TKIP100:
43113 *sec_trailer=DOT11DECRYPT_TKIP_TRAILER8 + 4;
43114 break;
43115 default:
43116 return NULL((void*)0);
43117 }
43118 if (dec_caplen > offset) {
43119 /* allocate buffer for decrypted payload */
43120 tmp = (uint8_t *)wmem_memdup(pinfo->pool, dec_data+offset, dec_caplen-offset);
43121 len = dec_caplen-offset;
43122
43123 /* decrypt successful, let's set up a new data tvb. */
43124 decr_tvb = tvb_new_child_real_data(tvb, tmp, len, len);
43125 }
43126 }
43127 return decr_tvb;
43128}
43129
43130/* Collect our WEP and WPA keys */
43131static void
43132set_dot11decrypt_keys(void)
43133{
43134 unsigned i;
43135 DOT11DECRYPT_KEYS_COLLECTION *keys = g_new(DOT11DECRYPT_KEYS_COLLECTION, 1)((DOT11DECRYPT_KEYS_COLLECTION *) g_malloc_n ((1), sizeof (DOT11DECRYPT_KEYS_COLLECTION
)))
;
43136
43137 keys->nKeys = 0;
43138
43139 for (i = 0; (uat_wep_key_records != NULL((void*)0)) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS64); i++)
43140 {
43141 decryption_key_t *dk;
43142 dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key, NULL((void*)0));
43143
43144 if (dk != NULL((void*)0))
43145 {
43146 /* parse_key_string() does validation, so if it doesn't
43147 * return NULL, we can just copy the results.
43148 */
43149 DOT11DECRYPT_KEY_ITEM key = { 0 };
43150 if (dk->type == DOT11DECRYPT_KEY_TYPE_WEP0)
43151 {
43152 key.KeyType = DOT11DECRYPT_KEY_TYPE_WEP0;
43153
43154 /*
43155 * WEP key is correct (well, at least no longer than
43156 * DOT11DECRYPT_WEP_KEY_MAXLEN)
43157 */
43158 memcpy(key.KeyData.Wep.WepKey, dk->key->data, dk->key->len);
43159 key.KeyData.Wep.WepKeyLen = dk->key->len;
43160 keys->Keys[keys->nKeys] = key;
43161 keys->nKeys += 1;
43162 }
43163 else if (dk->type == DOT11DECRYPT_KEY_TYPE_WPA_PWD3)
43164 {
43165 key.KeyType = DOT11DECRYPT_KEY_TYPE_WPA_PWD3;
43166
43167 /*
43168 * dk->key has a valid length, because otherwise
43169 * parse_key_string() would have returned NULL.
43170 */
43171 memcpy(key.UserPwd.Passphrase, dk->key->data, dk->key->len);
43172 key.UserPwd.PassphraseLen = dk->key->len;
43173
43174 key.UserPwd.SsidLen = 0;
43175 if ((dk->ssid != NULL((void*)0)) && (dk->ssid->len <= DOT11DECRYPT_WPA_SSID_MAX_LEN32))
43176 {
43177 memcpy(key.UserPwd.Ssid, dk->ssid->data, dk->ssid->len);
43178 key.UserPwd.SsidLen = dk->ssid->len;
43179 }
43180
43181 keys->Keys[keys->nKeys] = key;
43182 keys->nKeys += 1;
43183 }
43184 else if (dk->type == DOT11DECRYPT_KEY_TYPE_WPA_PSK4)
43185 {
43186 key.KeyType = DOT11DECRYPT_KEY_TYPE_WPA_PSK4;
43187
43188 memcpy(key.KeyData.Wpa.Psk, dk->key->data, dk->key->len);
43189 key.KeyData.Wpa.PskLen = dk->key->len;
43190 keys->Keys[keys->nKeys] = key;
43191 keys->nKeys += 1;
43192 }
43193 else if (dk->type == DOT11DECRYPT_KEY_TYPE_TK6)
43194 {
43195 key.KeyType = DOT11DECRYPT_KEY_TYPE_TK6;
43196
43197 memcpy(key.Tk.Tk, dk->key->data, dk->key->len);
43198 key.Tk.Len = dk->key->len;
43199 key.Tk.mld = dk->tk_mld;
43200 if (dk->tk_mld) {
43201 memcpy(key.Tk.ap_mld_mac, dk->ap_mld_mac, 6);
43202 memcpy(key.Tk.sta_mld_mac, dk->sta_mld_mac, 6);
43203 }
43204 keys->Keys[keys->nKeys] = key;
43205 keys->nKeys += 1;
43206 }
43207 else if (dk->type == DOT11DECRYPT_KEY_TYPE_MSK7)
43208 {
43209 key.KeyType = DOT11DECRYPT_KEY_TYPE_MSK7;
43210
43211 memcpy(key.Msk.Msk, dk->key->data, dk->key->len);
43212 key.Msk.Len = dk->key->len;
43213 keys->Keys[keys->nKeys] = key;
43214 keys->nKeys += 1;
43215 }
43216 free_key_string(dk);
43217 }
43218 }
43219
43220 /* Now set the keys */
43221 Dot11DecryptSetKeys(&dot11decrypt_ctx, keys->Keys, keys->nKeys);
43222 g_free(keys);
43223}
43224
43225static void
43226init_wepkeys(void)
43227{
43228
43229 /*
43230 * XXX - Dot11Decrypt - That God sends it to us beautiful (che dio ce la mandi bona)
43231 * The next lines will add a key to the Dot11Decrypt context. The keystring will be added
43232 * to the old WEP array too, but we don't care, because the packets will come here
43233 * already decrypted... One of these days we will fix this too
43234 */
43235 set_dot11decrypt_keys();
43236}
43237
43238/*
43239 * This code had been taken from AirSnort crack.c function classify()
43240 * Permission granted by snax <at> shmoo dot com
43241 * weak_iv - determine which key byte an iv is useful in resolving
43242 * parm - p, pointer to the first byte of an IV
43243 * return - n - this IV is weak for byte n of a WEP key
43244 * -1 - this IV is not weak for any key bytes
43245 *
43246 * This function tests for IVs that are known to satisfy the criteria
43247 * for a weak IV as specified in FMS section 7.1
43248 *
43249 */
43250static int
43251weak_iv(unsigned char *iv)
43252{
43253 unsigned char sum, k;
43254
43255 if ((iv[1] == 255) && (iv[0] > 2) && (iv[0] < 16)) {
43256 return iv[0] -3;
43257 }
43258
43259 sum = iv[0] + iv[1];
43260 if (sum == 1) {
43261 if (iv[2] <= 0x0a) {
43262 return iv[2] +2;
43263 }
43264 else if (iv[2] == 0xff) {
43265 return 0;
43266 }
43267 }
43268 k = 0xfe - iv[2];
43269 if ((sum == k) && ((iv[2] >= 0xf2) && (iv[2] <= 0xfe) && (iv[2] != 0xfd))) {
43270 return k;
43271 }
43272 return -1;
43273}
43274
43275static void
43276wlan_retransmit_init(void)
43277{
43278 if (fc_analyse_retransmit_table) {
43279 g_hash_table_destroy(fc_analyse_retransmit_table);
43280 fc_analyse_retransmit_table = NULL((void*)0);
43281 }
43282
43283 if (fc_first_frame_table) {
43284 g_hash_table_destroy(fc_first_frame_table);
43285 fc_first_frame_table = NULL((void*)0);
43286 }
43287
43288 if (wlan_subdissector)
43289 return;
43290
43291 fc_analyse_retransmit_table= g_hash_table_new(retransmit_hash, retransmit_equal);
43292 fc_first_frame_table = g_hash_table_new(frame_hash, frame_equal);
43293
43294}
43295
43296static int
43297dissect_data_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
43298{
43299 int offset = 0;
43300 uint8_t type;
43301 int tagged_parameter_tree_len;
43302 proto_tree *tagged_tree;
43303
43304 type = tvb_get_uint8(tvb, offset);
43305 proto_tree_add_item(tree, hf_ieee80211_data_encap_payload_type, tvb, offset,
43306 1, ENC_LITTLE_ENDIAN0x80000000);
43307 offset += 1;
43308 switch (type) {
43309 case 1:
43310 col_set_str(pinfo->cinfo, COL_PROTOCOL, "RRB");
43311 /* TODO: IEEE 802.11r */
43312 break;
43313 case 2:
43314 col_set_str(pinfo->cinfo, COL_PROTOCOL, "TDLS");
43315 col_clear(pinfo->cinfo, COL_INFO);
43316 offset += add_ff_action(tree, tvb, pinfo, offset, NULL((void*)0));
43317 tagged_parameter_tree_len = tvb_reported_length_remaining(tvb, offset);
43318 if (tagged_parameter_tree_len > 0) {
43319 tagged_tree = get_tagged_parameter_tree(tree, tvb, offset,
43320 tagged_parameter_tree_len);
43321 ieee_80211_add_tagged_parameters(tvb, offset, pinfo, tagged_tree,
43322 tagged_parameter_tree_len, -1, NULL((void*)0));
43323 }
43324 break;
43325 }
43326 return tvb_captured_length(tvb);
43327}
43328
43329void
43330proto_register_ieee80211(void)
43331{
43332
43333 static hf_register_info hf[] = {
43334 {&hf_ieee80211_fc_field,
43335 {"Frame Control Field", "wlan.fc",
43336 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
43337 "MAC Frame control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43338
43339 {&hf_ieee80211_fc_proto_version,
43340 {"Version", "wlan.fc.version",
43341 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
43342 "MAC Protocol version", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 0 */
43343
43344 {&hf_ieee80211_fc_frame_type,
43345 {"Type", "wlan.fc.type",
43346 FT_UINT8, BASE_DEC, VALS(frame_type)((0 ? (const struct _value_string*)0 : ((frame_type)))), 0x0C,
43347 "Frame type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43348
43349 {&hf_ieee80211_fc_frame_subtype,
43350 {"Subtype", "wlan.fc.subtype",
43351 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
43352 "Frame subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 2 */
43353
43354 {&hf_ieee80211_fc_frame_type_subtype,
43355 {"Type/Subtype", "wlan.fc.type_subtype",
43356 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &frame_type_subtype_vals_ext, 0x0,
43357 "Type and subtype combined (as bytes (for Control Frame Extension subtypes) or nibbles)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43358
43359 {&hf_ieee80211_fc_frame_extension,
43360 {"Control Frame Extension", "wlan.fc.extension",
43361 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
43362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43363
43364 {&hf_ieee80211_fc_flags,
43365 {"Flags", "wlan.flags",
43366 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
43367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43368
43369 {&hf_ieee80211_fc_flags_str,
43370 {"WLAN Flags", "wlan.flags.str",
43371 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43373
43374 {&hf_ieee80211_fc_data_ds,
43375 {"DS status", "wlan.fc.ds",
43376 FT_UINT8, BASE_HEX, VALS(tofrom_ds)((0 ? (const struct _value_string*)0 : ((tofrom_ds)))), (FLAG_FROM_DS0x02|FLAG_TO_DS0x01),
43377 "Data-frame DS-traversal status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 3 */
43378
43379 {&hf_ieee80211_fc_to_ds,
43380 {"To DS", "wlan.fc.tods",
43381 FT_BOOLEAN, 8, TFS(&tods_flag)((0 ? (const struct true_false_string*)0 : ((&tods_flag))
))
, FLAG_TO_DS0x01,
43382 "To DS flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 4 */
43383
43384 {&hf_ieee80211_fc_from_ds,
43385 {"From DS", "wlan.fc.fromds",
43386 FT_BOOLEAN, 8, TFS(&fromds_flag)((0 ? (const struct true_false_string*)0 : ((&fromds_flag
))))
, FLAG_FROM_DS0x02,
43387 "From DS flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 5 */
43388
43389 {&hf_ieee80211_fc_more_frag,
43390 {"More Fragments", "wlan.fc.frag",
43391 FT_BOOLEAN, 8, TFS(&more_fragments)((0 ? (const struct true_false_string*)0 : ((&more_fragments
))))
, FLAG_MORE_FRAGMENTS0x04,
43392 "More Fragments flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }}, /* 6 */
43393
43394 {&hf_ieee80211_fc_retry,
43395 {"Retry", "wlan.fc.retry",
43396 FT_BOOLEAN, 8, TFS(&retry_flags)((0 ? (const struct true_false_string*)0 : ((&retry_flags
))))
, FLAG_RETRY0x08,
43397 "Retransmission flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43398
43399 {&hf_ieee80211_fc_analysis_retransmission,
43400 {"Retransmission", "wlan.analysis.retransmission",
43401 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
43402 "This frame is a suspected wireless retransmission", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43403
43404 {&hf_ieee80211_fc_analysis_retransmission_frame,
43405 {"Retransmission of frame", "wlan.analysis.retransmission_frame",
43406 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
43407 "This is a retransmission of frame #", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43408
43409 {&hf_ieee80211_fc_pwr_mgt,
43410 {"PWR MGT", "wlan.fc.pwrmgt",
43411 FT_BOOLEAN, 8, TFS(&pm_flags)((0 ? (const struct true_false_string*)0 : ((&pm_flags)))
)
, FLAG_POWER_MGT0x10,
43412 "Power management status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43413
43414 {&hf_ieee80211_fc_more_data,
43415 {"More Data", "wlan.fc.moredata",
43416 FT_BOOLEAN, 8, TFS(&md_flags)((0 ? (const struct true_false_string*)0 : ((&md_flags)))
)
, FLAG_MORE_DATA0x20,
43417 "More data flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43418
43419 {&hf_ieee80211_fc_protected,
43420 {"Protected flag", "wlan.fc.protected",
43421 FT_BOOLEAN, 8, TFS(&protected_flags)((0 ? (const struct true_false_string*)0 : ((&protected_flags
))))
, FLAG_PROTECTED0x40,
43422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43423
43424 {&hf_ieee80211_fc_order,
43425 {"+HTC/Order flag", "wlan.fc.order",
43426 FT_BOOLEAN, 8, TFS(&order_flags)((0 ? (const struct true_false_string*)0 : ((&order_flags
))))
, FLAG_ORDER0x80,
43427 "HT Control present/strictly ordered flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43428
43429 {&hf_ieee80211_fc_s1g_bw_indication,
43430 {"Bandwidth Indication", "wlan.fc.control.bandwidth_indication",
43431 FT_UINT8, BASE_DEC, VALS(pv1_bandwidth_indic_vals)((0 ? (const struct _value_string*)0 : ((pv1_bandwidth_indic_vals
))))
,
43432 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43433
43434 {&hf_ieee80211_fc_s1g_dynamic_indication,
43435 {"Dynamic Indication", "wlan.fc.control.dynamic_indication",
43436 FT_BOOLEAN, 8, TFS(&s1g_dynamic_indication_flags)((0 ? (const struct true_false_string*)0 : ((&s1g_dynamic_indication_flags
))))
, FLAG_RETRY0x08,
43437 "Static/dynamic bandwidth negotiation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43438
43439 {&hf_ieee80211_fc_pv1_proto_version,
43440 {"Version", "wlan.fc.version",
43441 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43442
43443 {&hf_ieee80211_fc_pv1_type,
43444 {"Type", "wlan.fc.type",
43445 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) }},
43446
43447 {&hf_ieee80211_fc_pv1_ptid,
43448 {"PTID", "wlan.fc.ptid",
43449 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43450
43451 {&hf_ieee80211_fc_pv1_mgmt_subtype,
43452 {"Subtype", "wlan.fc.subtype",
43453 FT_UINT16, BASE_HEX, VALS(pv1_management_frame_type_vals)((0 ? (const struct _value_string*)0 : ((pv1_management_frame_type_vals
))))
,
43454 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43455
43456 {&hf_ieee80211_fc_pv1_cntl_subtype,
43457 {"Subtype", "wlan.fc.subtype",
43458 FT_UINT16, BASE_HEX, VALS(pv1_control_frame_type_vals)((0 ? (const struct _value_string*)0 : ((pv1_control_frame_type_vals
))))
,
43459 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43460
43461 {&hf_ieee80211_fc_pv1_unk_field,
43462 {"Unknown Subtype", "wlan.fc.unknown_subtype",
43463 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43464
43465 {&hf_ieee80211_fc_pv1_bw_indication,
43466 {"Bandwidth Indication", "wlan.fc.control.bandwidth_indication",
43467 FT_UINT16, BASE_DEC, VALS(pv1_bandwidth_indic_vals)((0 ? (const struct _value_string*)0 : ((pv1_bandwidth_indic_vals
))))
,
43468 0x0700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43469
43470 {&hf_ieee80211_fc_pv1_dynamic_indication,
43471 {"Dynamic Indication", "wlan.fc.control.dynamic_indication",
43472 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43473
43474 {&hf_ieee80211_fc_pv1_cntl_power_mgmt,
43475 {"Power Management", "wlan.fc.control.power_management",
43476 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43477
43478 {&hf_ieee80211_fc_pv1_cntl_more_data,
43479 {"More Data", "wlan.fc.control.more_data",
43480 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43481
43482 {&hf_ieee80211_fc_pv1_cntl_flow_control,
43483 {"Flow Control", "wlan.fc.control.flow_control",
43484 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43485
43486 {&hf_ieee80211_fc_pv1_cntl_next_twt_info,
43487 {"Next TWT Info Present", "wlan.fc.control.next_twt_info_present",
43488 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43489
43490 {&hf_ieee80211_fc_pv1_mgmt_pr_next_tbt,
43491 {"Next TBTT Present", "wlan.fc.mgmt.next_tbtt_present",
43492 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43493 {&hf_ieee80211_fc_pv1_mgmt_pr_full_ssid,
43494 {"Full SSID Present", "wlan.fc.mgmt.full_ssid_present",
43495 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43496
43497 {&hf_ieee80211_fc_pv1_mgmt_pr_ano,
43498 {"AMO Present", "wlan.fc.mgmt.amo_present",
43499 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43500
43501 {&hf_ieee80211_fc_pv1_mgmt_pr_bss_bw,
43502 {"BSS BW", "wlan.fc.mgmt.bss_bw",
43503 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43504
43505 {&hf_ieee80211_fc_pv1_mgmt_pr_security,
43506 {"Security", "wlan.fc.mgmt.security",
43507 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43508
43509 {&hf_ieee80211_fc_pv1_mgmt_pr_1mhz_pc,
43510 {"1MHz Primary Channel Location",
43511 "wlan.fc.mgmt.1mhz_primary_channel_location",
43512 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43513
43514 {&hf_ieee80211_fc_pv1_mgmt_pr_slot_assign,
43515 {"Slot Assignment Mode", "wlan.fc.mgmt.slot_assignment_mode",
43516 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43517
43518 {&hf_ieee80211_fc_pv1_mgmt_pr_more_frag,
43519 {"More Fragments", "wlan.fc.mgmt.more_fragments",
43520 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43521
43522 {&hf_ieee80211_fc_pv1_mgmt_pr_pwr_mgmt,
43523 {"Power Management", "wlan.fc.mgmt.power_management",
43524 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43525
43526 {&hf_ieee80211_fc_pv1_mgmt_pr_grp_indic,
43527 {"Group Indication", "wlan.fc.mgmt.group_indication",
43528 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43529
43530 {&hf_ieee80211_fc_pv1_mgmt_pr_protected,
43531 {"Protected Frame", "wlan.fc.mgmt.protected_frame",
43532 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43533
43534 {&hf_ieee80211_fc_pv1_mgmt_pr_end_of_svc,
43535 {"End of Service Period", "wlan.fc.mgmt.end_of_service_period",
43536 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43537
43538 {&hf_ieee80211_fc_pv1_mgmt_pr_relayed_frm,
43539 {"Relayed Frame", "wlan.fc.mgmt.relayed_frame",
43540 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43541
43542 {&hf_ieee80211_fc_pv1_mgmt_pr_ack_policy,
43543 {"Ack Policy", "wlan.fc.mgmt.ack_policy",
43544 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43545
43546 {&hf_ieee80211_fc_pv1_from_ds,
43547 {"From DS", "wlan.fc.from_ds",
43548 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43549
43550 {&hf_ieee80211_fc_pv1_more_fragments,
43551 {"More Fragments", "wlan.fc.more_fragments",
43552 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43553
43554 {&hf_ieee80211_fc_pv1_power_mgmt,
43555 {"Power Management", "wlan.fc.power_management",
43556 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43557
43558 {&hf_ieee80211_fc_pv1_more_data,
43559 {"More Data", "wlan.fc.more_data",
43560 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43561
43562 {&hf_ieee80211_fc_pv1_protected_frame,
43563 {"Protected Frame", "wlan.fc.protected_frame",
43564 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43565
43566 {&hf_ieee80211_fc_pv1_end_service_per,
43567 {"End of Service Period", "wlan.fc.end_of_service_period",
43568 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43569
43570 {&hf_ieee80211_fc_pv1_relayed_frame,
43571 {"Relayed Frame", "wlan.fc.relayed_frame",
43572 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43573
43574 {&hf_ieee80211_fc_pv1_ack_policy,
43575 {"Ack Policy", "wlan.fc.ack_policy",
43576 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43577
43578 {&hf_ieee80211_pv1_sid,
43579 {"SID", "wlan.fc.sid",
43580 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43581
43582 {&hf_ieee80211_pv1_sid_association_id,
43583 {"Association ID", "wlan.fc.sid.association_id",
43584 FT_UINT16, BASE_HEX, NULL((void*)0), SID_AID_MASK0x1FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43585
43586 {&hf_ieee80211_pv1_sid_a3_present,
43587 {"A3 Present", "wlan.fc.sid.a3_present",
43588 FT_BOOLEAN, 16, NULL((void*)0), SID_A3_PRESENT0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43589
43590 {&hf_ieee80211_pv1_sid_a4_present,
43591 {"A4 Present", "wlan.fc.sid.a4_present",
43592 FT_BOOLEAN, 16, NULL((void*)0), SID_A4_PRESENT0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43593
43594 {&hf_ieee80211_pv1_sid_a_msdu,
43595 {"A MSDU", "wlan.fc.sid.a_msdu",
43596 FT_BOOLEAN, 16, NULL((void*)0), SID_A_MSDU0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43597
43598 {&hf_ieee80211_pv1_cnt_stack_tetra_timest,
43599 {"Tetrapartial Timestamp", "wlan.pv1.control.stack.tetrapartial_timestamp",
43600 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43601
43602 {&hf_ieee80211_pv1_cnt_bat_beacon_seq,
43603 {"Beacon Sequence", "wlan.pv1.control.bat.beacon_sequence",
43604 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43605
43606 {&hf_ieee80211_pv1_cnt_bat_penta_timest,
43607 {"Pentapartial Timestamp", "wlan.pv1.control.bat.pentapartial_timestamp",
43608 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43609
43610 {&hf_ieee80211_pv1_cnt_bat_next_twt_info,
43611 {"Next TWT Info", "wlan.pv1.control.bat.next_twt_info",
43612 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43613
43614 {&hf_ieee80211_pv1_cnt_bat_stating_seq_cntl,
43615 {"Starting Sequence Control", "wlan.pv1.control.bat.starting_sequence_control",
43616 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43617
43618 {&hf_ieee80211_pv1_cnt_bat_bitmap,
43619 {"BAT Bitmap", "wlan.pv1.control.bat.bat_bitmap",
43620 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43621
43622 {&hf_ieee80211_pv1_mgmt_reserved,
43623 {"PV1 Reserved Management frame", "wlan.pv1.management.reserved",
43624 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43625
43626 {&hf_ieee80211_pv1_cntl_reserved,
43627 {"PV1 Reserved Control frame", "wlan.pv1.control.reserved",
43628 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43629
43630 {&hf_ieee80211_fc_s1g_next_tbtt_present,
43631 {"Next TBTT Present", "wlan.fc.s1g.next_tbtt_present",
43632 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) }},
43633
43634 {&hf_ieee80211_fc_s1g_compressed_ssid_present,
43635 {"Compressed SSID Present", "wlan.fc.s1g.compressed_ssid_present",
43636 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) }},
43637
43638 {&hf_ieee80211_fc_s1g_ano_present,
43639 {"ANO Present", "wlan.fc.s1g.ano_present",
43640 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) }},
43641
43642 {&hf_ieee80211_fc_s1g_bss_bw,
43643 {"BSS BW", "wlan.fc.s1g.bss_bw",
43644 FT_UINT8, BASE_DEC, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43645
43646 {&hf_ieee80211_fc_s1g_security,
43647 {"Security", "wlan.fc.s1g.security",
43648 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) }},
43649
43650 {&hf_ieee80211_fc_s1g_ap_pm,
43651 {"AP PM", "wlan.fc.s1g.ap_pm",
43652 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) }},
43653
43654 {&hf_ieee80211_assoc_id,
43655 {"Association ID", "wlan.aid",
43656 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3FFF,
43657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43658
43659 {&hf_ieee80211_did_duration,
43660 {"Duration", "wlan.duration",
43661 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7FFF,
43662 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43663
43664 {&hf_ieee80211_addr_da,
43665 {"Destination address", "wlan.da",
43666 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43667 "Destination Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43668
43669 {&hf_ieee80211_addr_da_resolved,
43670 {"Destination address (resolved)", "wlan.da_resolved", FT_STRING,
43671 BASE_NONE, NULL((void*)0), 0x0,
43672 "Destination Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43673
43674 {&hf_ieee80211_addr_da_oui,
43675 {"Destination OUI", "wlan.da.oui",
43676 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43677 "Destination Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43678
43679 {&hf_ieee80211_addr_da_oui_resolved,
43680 {"Destination OUI (resolved)", "wlan.da.oui_resolved",
43681 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43682 "Destination Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43683
43684 { &hf_ieee80211_addr_da_lg,
43685 { "LG bit", "wlan.da.lg",
43686 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43687 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43688
43689 { &hf_ieee80211_addr_da_ig,
43690 { "IG bit", "wlan.da.ig",
43691 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43692 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43693
43694 {&hf_ieee80211_addr_sa,
43695 {"Source address", "wlan.sa",
43696 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43697 "Source Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43698
43699 {&hf_ieee80211_addr_sa_resolved,
43700 {"Source address (resolved)", "wlan.sa_resolved", FT_STRING,
43701 BASE_NONE, NULL((void*)0), 0x0,
43702 "Source Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43703
43704 {&hf_ieee80211_addr_sa_oui,
43705 {"Source OUI", "wlan.sa.oui",
43706 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43707 "Source Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43708
43709 {&hf_ieee80211_addr_sa_oui_resolved,
43710 {"Source OUI (resolved)", "wlan.sa.oui_resolved",
43711 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43712 "Source Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43713
43714 { &hf_ieee80211_addr_sa_lg,
43715 { "LG bit", "wlan.sa.lg",
43716 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43717 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43718
43719 { &hf_ieee80211_addr_sa_ig,
43720 { "IG bit", "wlan.sa.ig",
43721 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43722 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43723
43724 {&hf_ieee80211_addr,
43725 {"Hardware address", "wlan.addr",
43726 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43727 "SA, DA, BSSID, RA or TA Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43728
43729 {&hf_ieee80211_addr_resolved,
43730 { "Hardware address (resolved)", "wlan.addr_resolved", FT_STRING,
43731 BASE_NONE, NULL((void*)0), 0x0,
43732 "SA, DA, BSSID, RA or TA Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43733
43734 {&hf_ieee80211_addr_oui,
43735 {"Hardware OUI", "wlan.oui",
43736 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43737 "Hardware Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43738
43739 {&hf_ieee80211_addr_oui_resolved,
43740 {"Hardware OUI (resolved)", "wlan.oui_resolved",
43741 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43742 "Hardware Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43743
43744 { &hf_ieee80211_addr_lg,
43745 { "LG bit", "wlan.addr.lg",
43746 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43747 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43748
43749 { &hf_ieee80211_addr_ig,
43750 { "IG bit", "wlan.addr.ig",
43751 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43752 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43753
43754 {&hf_ieee80211_addr_ra,
43755 {"Receiver address", "wlan.ra",
43756 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43757 "Receiving Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43758
43759 {&hf_ieee80211_addr_ra_resolved,
43760 {"Receiver address (resolved)", "wlan.ra_resolved", FT_STRING, BASE_NONE,
43761 NULL((void*)0), 0x0, "Receiving Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43762
43763 {&hf_ieee80211_addr_ra_oui,
43764 {"Receiver OUI", "wlan.ra.oui",
43765 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43766 "Receiver Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43767
43768 {&hf_ieee80211_addr_ra_oui_resolved,
43769 {"Receiver OUI (resolved)", "wlan.ra.oui_resolved",
43770 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43771 "Receiver Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43772
43773 { &hf_ieee80211_addr_ra_lg,
43774 { "LG bit", "wlan.ra.lg",
43775 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43776 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43777
43778 { &hf_ieee80211_addr_ra_ig,
43779 { "IG bit", "wlan.ra.ig",
43780 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43781 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43782
43783 {&hf_ieee80211_addr_ta,
43784 {"Transmitter address", "wlan.ta",
43785 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43786 "Transmitting Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43787
43788 {&hf_ieee80211_addr_ta_resolved,
43789 {"Transmitter address (resolved)", "wlan.ta_resolved", FT_STRING,
43790 BASE_NONE, NULL((void*)0), 0x0,
43791 "Transmitting Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43792
43793 {&hf_ieee80211_addr_ta_oui,
43794 {"Transmitter OUI", "wlan.ta.oui",
43795 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43796 "Transmitter Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43797
43798 {&hf_ieee80211_addr_ta_oui_resolved,
43799 {"Transmitter OUI (resolved)", "wlan.ta.oui_resolved",
43800 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43801 "Transmitter Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43802
43803 { &hf_ieee80211_addr_ta_lg,
43804 { "LG bit", "wlan.ta.lg",
43805 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43806 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43807
43808 { &hf_ieee80211_addr_ta_ig,
43809 { "IG bit", "wlan.ta.ig",
43810 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43811 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43812
43813 {&hf_ieee80211_addr_bssid,
43814 {"BSS Id", "wlan.bssid",
43815 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43816 "Basic Service Set ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43817
43818 {&hf_ieee80211_addr_bssid_resolved,
43819 {"BSS Id (resolved)", "wlan.bssid_resolved", FT_STRING, BASE_NONE, NULL((void*)0),
43820 0x0, "Basic Service Set ID (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43821
43822 {&hf_ieee80211_addr_bssid_oui,
43823 {"BSS Id OUI", "wlan.bssid.oui",
43824 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43825 "BSS Id Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43826
43827 {&hf_ieee80211_addr_bssid_oui_resolved,
43828 {"BSS Id OUI (resolved)", "wlan.bssid.oui_resolved",
43829 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43830 "BSS Id Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43831
43832 { &hf_ieee80211_addr_bssid_lg,
43833 { "LG bit", "wlan.bssid.lg",
43834 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43835 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43836
43837 { &hf_ieee80211_addr_bssid_ig,
43838 { "IG bit", "wlan.bssid.ig",
43839 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43840 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43841
43842 {&hf_ieee80211_addr_staa,
43843 {"STA address", "wlan.staa",
43844 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
43845 "Station Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43846
43847 {&hf_ieee80211_addr_staa_resolved,
43848 {"STA address (resolved)", "wlan.staa_resolved", FT_STRING, BASE_NONE, NULL((void*)0),
43849 0x0, "Station Hardware Address (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43850
43851 {&hf_ieee80211_addr_staa_oui,
43852 {"STA OUI", "wlan.staa.oui",
43853 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
43854 "STA Organizationally Unique Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43855
43856 {&hf_ieee80211_addr_staa_oui_resolved,
43857 {"STA OUI (resolved)", "wlan.staa.oui_resolved",
43858 FT_STRING, BASE_NONE, NULL((void*)0), 0,
43859 "STA Organizationally Unique Identifier (resolved)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43860
43861 { &hf_ieee80211_addr_staa_lg,
43862 { "LG bit", "wlan.staa.lg",
43863 FT_BOOLEAN, 24, TFS(&lg_tfs)((0 ? (const struct true_false_string*)0 : ((&lg_tfs)))), 0x020000,
43864 "Specifies if this is a locally administered or globally unique (IEEE assigned) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43865
43866 { &hf_ieee80211_addr_staa_ig,
43867 { "IG bit", "wlan.staa.ig",
43868 FT_BOOLEAN, 24, TFS(&ig_tfs)((0 ? (const struct true_false_string*)0 : ((&ig_tfs)))), 0x010000,
43869 "Specifies if this is an individual (unicast) or group (broadcast/multicast) address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43870
43871 {&hf_ieee80211_frag_number,
43872 {"Fragment number", "wlan.frag",
43873 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F,
43874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43875
43876 {&hf_ieee80211_seq_number,
43877 {"Sequence number", "wlan.seq",
43878 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFF0,
43879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43880
43881 {&hf_ieee80211_mesh_control_field,
43882 {"Mesh Control Field", "wlan.mesh.control_field",
43883 FT_NONE, BASE_NONE, NULL((void*)0), 0,
43884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43885
43886 {&hf_ieee80211_qos,
43887 {"Qos Control", "wlan.qos",
43888 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
43889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43890
43891 {&hf_ieee80211_qos_tid,
43892 {"TID", "wlan.qos.tid",
43893 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F,
43894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43895
43896 {&hf_ieee80211_qos_priority,
43897 {"Priority", "wlan.qos.priority",
43898 FT_UINT16, BASE_DEC, VALS(ieee80211_qos_tags_acs)((0 ? (const struct _value_string*)0 : ((ieee80211_qos_tags_acs
))))
, 0x0007,
43899 "802.1D Tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43900
43901 {&hf_ieee80211_qos_eosp,
43902 {"EOSP", "wlan.qos.eosp",
43903 FT_BOOLEAN, 16, TFS(&eosp_flag)((0 ? (const struct true_false_string*)0 : ((&eosp_flag))
))
, QOS_FLAG_EOSP0x0010,
43904 "EOSP Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43905
43906 {&hf_ieee80211_qos_bit4,
43907 {"QoS bit 4", "wlan.qos.bit4",
43908 FT_BOOLEAN, 16, TFS(&bit4_flag)((0 ? (const struct true_false_string*)0 : ((&bit4_flag))
))
, QOS_FLAG_EOSP0x0010,
43909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43910
43911 {&hf_ieee80211_qos_ack_policy,
43912 {"Ack Policy", "wlan.qos.ack",
43913 FT_UINT16, BASE_HEX, VALS(ack_policy)((0 ? (const struct _value_string*)0 : ((ack_policy)))), 0x0060,
43914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43915
43916 {&hf_ieee80211_qos_amsdu_present,
43917 {"Payload Type", "wlan.qos.amsdupresent",
43918 FT_BOOLEAN, 16, TFS(&ieee80211_qos_amsdu_present_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_qos_amsdu_present_flag
))))
, 0x0080,
43919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43920
43921 {&hf_ieee80211_qos_txop_limit,
43922 {"TXOP Limit", "wlan.qos.txop_limit",
43923 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43925
43926 {&hf_ieee80211_qos_ps_buf_state,
43927 {"QAP PS Buffer State", "wlan.qos.ps_buf_state",
43928 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00,
43929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43930
43931 {&hf_ieee80211_qos_buf_state_indicated,
43932 {"Buffer State Indicated", "wlan.qos.buf_state_indicated",
43933 FT_BOOLEAN, 16, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x0200,
43934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43935
43936 {&hf_ieee80211_qos_highest_pri_buf_ac,
43937 {"Highest-Priority Buffered AC", "wlan.qos.highest_pri_buf_ac",
43938 FT_UINT16, BASE_DEC, VALS(wme_acs)((0 ? (const struct _value_string*)0 : ((wme_acs)))), 0x0C00,
43939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43940
43941 {&hf_ieee80211_qos_qap_buf_load,
43942 {"QAP Buffered Load", "wlan.qos.qap_buf_load",
43943 FT_UINT16, BASE_DEC, NULL((void*)0), 0xF000,
43944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43945
43946 {&hf_ieee80211_qos_txop_dur_req,
43947 {"TXOP Duration Requested", "wlan.qos.txop_dur_req",
43948 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43950
43951 {&hf_ieee80211_qos_queue_size,
43952 {"Queue Size", "wlan.qos.queue_size",
43953 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFF00,
43954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43955
43956 {&hf_ieee80211_qos_mesh_ctl_present,
43957 {"Mesh Control Present", "wlan.qos.mesh_ctl_present",
43958 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100,
43959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43960
43961 {&hf_ieee80211_qos_mesh_ps_rsvd,
43962 {"Mesh Power Save Level (reserved)", "wlan.qos.mesh_ps.reserved",
43963 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0200,
43964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43965
43966 {&hf_ieee80211_qos_mesh_ps_unicast,
43967 {"Mesh Power Save Level (for the receiving peer)", "wlan.qos.mesh_ps.unicast",
43968 FT_BOOLEAN, 16, TFS(&ieee80211_qos_mesh_ps)((0 ? (const struct true_false_string*)0 : ((&ieee80211_qos_mesh_ps
))))
, 0x0200,
43969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43970
43971 {&hf_ieee80211_qos_mesh_ps_multicast,
43972 {"Mesh Power Save Level (for all receiving peers)", "wlan.qos.mesh_ps.multicast",
43973 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,
43974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43975
43976 {&hf_ieee80211_qos_mesh_rspi,
43977 {"Receiver Service Period Initiated (RSPI)", "wlan.qos.mesh_rspi",
43978 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0400,
43979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43980
43981 {&hf_ieee80211_fcs,
43982 {"Frame check sequence", "wlan.fcs",
43983 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
43984 "Frame Check Sequence (FCS)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43985
43986 {&hf_ieee80211_fcs_status,
43987 {"FCS Status", "wlan.fcs.status",
43988 FT_UINT8, BASE_NONE, VALS(proto_checksum_vals)((0 ? (const struct _value_string*)0 : ((proto_checksum_vals)
)))
, 0x0,
43989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43990
43991 {&hf_ieee80211_fragment_overlap,
43992 {"Fragment overlap", "wlan.fragment.overlap",
43993 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43994 "Fragment overlaps with other fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
43995
43996 {&hf_ieee80211_fragment_overlap_conflict,
43997 {"Conflicting data in fragment overlap", "wlan.fragment.overlap.conflict",
43998 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
43999 "Overlapping fragments contained conflicting data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44000
44001 {&hf_ieee80211_fragment_multiple_tails,
44002 {"Multiple tail fragments found", "wlan.fragment.multipletails",
44003 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
44004 "Several tails were found when defragmenting the packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44005
44006 {&hf_ieee80211_fragment_too_long_fragment,
44007 {"Fragment too long", "wlan.fragment.toolongfragment",
44008 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
44009 "Fragment contained data past end of packet", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44010
44011 {&hf_ieee80211_fragment_error,
44012 {"Defragmentation error", "wlan.fragment.error",
44013 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
44014 "Defragmentation error due to illegal fragments", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44015
44016 {&hf_ieee80211_fragment_count,
44017 {"Fragment count", "wlan.fragment.count",
44018 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
44019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44020
44021 {&hf_ieee80211_fragment,
44022 {"802.11 Fragment", "wlan.fragment",
44023 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
44024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44025
44026 {&hf_ieee80211_fragments,
44027 {"802.11 Fragments", "wlan.fragments",
44028 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
44029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44030
44031 {&hf_ieee80211_reassembled_in,
44032 {"Reassembled 802.11 in frame", "wlan.reassembled_in",
44033 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x0,
44034 "This 802.11 packet is reassembled in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44035
44036 {&hf_ieee80211_reassembled_length,
44037 {"Reassembled 802.11 length", "wlan.reassembled.length",
44038 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
44039 "The total length of the reassembled payload", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44040
44041 {&hf_ieee80211_wep_iv,
44042 {"Initialization Vector", "wlan.wep.iv",
44043 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
44044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44045
44046 {&hf_ieee80211_wep_iv_weak,
44047 {"Weak IV", "wlan.wep.weakiv",
44048 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
44049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
44050
44051 {&hf_ieee80211_tkip_extiv,
44052 {"TKIP Ext. Initialization Vector", "wlan.tkip.extiv",
44053 FT_STRING, BASE_NONE, NULL((void*)0), 0,
44054 "TKIP Extended Initialization Vector", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44055
44056 {&hf_ieee80211_ccmp_extiv,
44057 {"CCMP Ext. Initialization Vector", "wlan.ccmp.extiv",
44058 FT_STRING, BASE_NONE, NULL((void*)0), 0,
44059 "CCMP Extended Initialization Vector", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44060
44061 {&hf_ieee80211_wep_key,
44062 {"Key Index", "wlan.wep.key",
44063 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44065
44066 {&hf_ieee80211_wep_icv,
44067 {"WEP ICV", "wlan.wep.icv",
44068 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44070
44071 {&hf_ieee80211_fc_analysis_pmk,
44072 {"PMK", "wlan.analysis.pmk",
44073 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
44074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44075
44076 {&hf_ieee80211_fc_analysis_kck,
44077 {"KCK", "wlan.analysis.kck",
44078 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
44079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44080
44081 {&hf_ieee80211_fc_analysis_kek,
44082 {"KEK", "wlan.analysis.kek",
44083 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
44084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44085
44086 {&hf_ieee80211_fc_analysis_tk,
44087 {"TK", "wlan.analysis.tk",
44088 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
44089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44090
44091 {&hf_ieee80211_fc_analysis_gtk,
44092 {"GTK", "wlan.analysis.gtk",
44093 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
44094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44095
44096 {&hf_ieee80211_mgt,
44097 {"IEEE 802.11 Wireless Management", "wlan.mgt",
44098 FT_PROTOCOL, BASE_NONE, NULL((void*)0), 0x0,
44099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44100
44101 {&hf_ieee80211_block_ack_control,
44102 {"Block Ack Control", "wlan.ba.control",
44103 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
44104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44105
44106 {&hf_ieee80211_block_ack_control_ack_policy,
44107 {"BA Ack Policy", "wlan.ba.control.ackpolicy",
44108 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,
44109 "Block Ack Request (BAR) Ack Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44110
44111 {&hf_ieee80211_block_ack_control_type,
44112 {"BA Type", "wlan.ba.control.ba_type",
44113 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) }},
44114
44115 {&hf_ieee80211_block_ack_control_reserved,
44116 {"Reserved", "wlan.ba.control.reserved",
44117 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0fe0,
44118 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44119
44120 {&hf_ieee80211_block_ack_control_tid_info,
44121 {"TID for which a Basic BlockAck frame is requested", "wlan.ba.basic.tidinfo",
44122 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
44123 "Traffic Identifier (TID) for which a Basic BlockAck frame is requested", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44124
44125 {&hf_ieee80211_block_ack_multi_sta_aid11,
44126 {"AID11", "wlan.ba.multi_sta.aid11",
44127 FT_UINT16, BASE_HEX, NULL((void*)0), 0x07ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44128
44129 {&hf_ieee80211_block_ack_multi_sta_ack_type,
44130 {"Ack Type", "wlan.ba.multi_sta.ack_type",
44131 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44132
44133 {&hf_ieee80211_block_ack_multi_sta_tid,
44134 {"TID", "wlan.ba.multi_sta.tid",
44135 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44136
44137 {&hf_ieee80211_block_ack_multi_sta_aid_tid,
44138 {"AID TID Info", "wlan.ba.multi_sta.aid_tid_info",
44139 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44140
44141 {&hf_ieee80211_block_ack_multi_sta_reserved,
44142 {"Reserved", "wlan.ba.multi_sta.reserved",
44143 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44144
44145 {&hf_ieee80211_block_ack_multi_sta_ra,
44146 {"RA", "wlan.ba.multi_sta.ra",
44147 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44148
44149 {&hf_ieee80211_block_ack_multi_tid_reserved,
44150 {"Reserved", "wlan.bar.mtid.tidinfo.reserved",
44151 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0fff,
44152 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44153
44154 {&hf_ieee80211_block_ack_multi_tid_value,
44155 {"Multi-TID Value", "wlan.bar.mtid.tidinfo.value",
44156 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
44157 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44158
44159 {&hf_ieee80211_block_ack_bitmap,
44160 {"Block Ack Bitmap", "wlan.ba.bm",
44161 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
44162 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44163
44164 /* Used for Extended compressed BlockAck */
44165 {&hf_ieee80211_block_ack_RBUFCAP,
44166 {"Block Ack RBUFCAP", "wlan.ba.RBUFCAP",
44167 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0,
44168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44169
44170 {&hf_ieee80211_block_ack_bitmap_missing_frame,
44171 {"Not acknowledged frame", "wlan.ba.bm.missing_frame",
44172 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
44173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44174
44175 {&hf_ieee80211_block_ack_bitmap_last_ack_frame,
44176 {"Last acknowledged frame", "wlan.ba.bm.last_ack_frame",
44177 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
44178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44179
44180 {&hf_ieee80211_block_ack_gcr_addr,
44181 {"GCR Group Address", "wlan.ba.gcr_group_addr",
44182 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44183
44184 {&hf_ieee80211_beamform_feedback_seg_retrans_bitmap,
44185 {"Feedback segment Retransmission Bitmap", "wlan.beamform.feedback_seg_retrans_bitmap",
44186 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
44187 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44188
44189 {&hf_ieee80211_ndp_annc_token,
44190 {"Sounding Dialog Token", "wlan.ndp.token",
44191 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
44192 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44193
44194 {&hf_ieee80211_ndp_annc_variant,
44195 {"NDP Announcement Variant", "wlan.ndp.token.variant",
44196 FT_UINT8, BASE_HEX, VALS(ndp_annc_variant_vals)((0 ? (const struct _value_string*)0 : ((ndp_annc_variant_vals
))))
, 0x03,
44197 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44198
44199 {&hf_ieee80211_ndp_annc_token_number,
44200 {"Sounding Dialog Token", "wlan.ndp.token.number",
44201 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
44202 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44203
44204 {&hf_ieee80211_vht_ndp_annc_sta_info_aid12,
44205 {"AID12", "wlan.vht_ndp.sta_info.aid12",
44206 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0FFF,
44207 "12 least significant bits of the AID of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44208
44209 {&hf_ieee80211_vht_ndp_annc_sta_info_feedback_type,
44210 {"Feedback Type", "wlan.vht_ndp.sta_info.feedback_type",
44211 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,
44212 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44213
44214 {&hf_ieee80211_vht_ndp_annc_sta_info_nc_index,
44215 {"Nc Index", "wlan.vht_ndp.sta_info.nc_index",
44216 FT_UINT16, BASE_DEC, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0xE000,
44217 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44218
44219 {&hf_ieee80211_vht_ndp_annc_sta_info_reserved,
44220 {"Reserved", "wlan.vht_ndp.sta_info.reserved",
44221 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE000,
44222 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44223
44224 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008,
44225 {"STA Info, AID11 < 2008", "wlan.vht_ndp.sta_info.ranging_2008",
44226 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44227 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44228
44229 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_aid11,
44230 {"AID11", "wlan.vht_ndp.sta_info.ranging_2008.aid11",
44231 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 0)(((1U << ((10) - (0) + 1)) - 1) << (0)),
44232 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44233
44234 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_ltf_offset,
44235 {"LTF Offset", "wlan.vht_ndp.sta_info.ranging_2008.ltf_offset",
44236 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(16, 11)(((1U << ((16) - (11) + 1)) - 1) << (11)),
44237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44238
44239 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_n_sts,
44240 {"R2I N STS", "wlan.vht_ndp.sta_info.ranging_2008.r2i_n_sts",
44241 FT_UINT32, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK(19, 17)(((1U << ((19) - (17) + 1)) - 1) << (17)),
44242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44243
44244 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_r2i_rep,
44245 {"R2I Rep", "wlan.vht_ndp.sta_info.ranging_2008.r2i_rep",
44246 FT_UINT32, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(22, 20)(((1U << ((22) - (20) + 1)) - 1) << (20)),
44247 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44248
44249 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_n_sts,
44250 {"I2R N STS", "wlan.vht_ndp.sta_info.ranging_2008.i2r_n_sts",
44251 FT_UINT32, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK(25, 23)(((1U << ((25) - (23) + 1)) - 1) << (23)),
44252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44253
44254 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved1,
44255 {"Reserved", "wlan.vht_ndp.sta_info.ranging_2008.reserved1",
44256 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 26)(((1U << ((26) - (26) + 1)) - 1) << (26)),
44257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44258
44259 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_disambiguation,
44260 {"Disambiguation", "wlan.vht_ndp.sta_info.ranging_2008.disambiguation",
44261 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
44262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44263
44264 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_i2r_rep,
44265 {"I2R Rep", "wlan.vht_ndp.sta_info.ranging_2008.i2r_rep",
44266 FT_UINT32, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(30, 28)(((1U << ((30) - (28) + 1)) - 1) << (28)),
44267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44268
44269 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2008_reserved2,
44270 {"Reserved", "wlan.vht_ndp.sta_info.ranging_2008.reserved2",
44271 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(31, 31)(((1U << ((31) - (31) + 1)) - 1) << (31)),
44272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44273
44274 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043,
44275 {"STA Info, AID11 == 2043", "wlan.sta_info_ranging_2043",
44276 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44278
44279 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_aid11,
44280 {"AID11", "wlan.sta_info_ranging_2043.aid11",
44281 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
44282 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44283
44284 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_sac,
44285 {"SAC", "wlan.sta_info_ranging_2043.sac",
44286 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 11)(((1U << ((26) - (11) + 1)) - 1) << (11)),
44287 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44288
44289 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_disambiguation,
44290 {"Disambiguation", "wlan.sta_info_ranging_2043.disambiguation",
44291 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
44292 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44293
44294 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2043_reserved,
44295 {"Reserved", "wlan.sta_info_ranging_2043.reserved",
44296 FT_UINT32, BASE_HEX, NULL((void*)0), GENMASK(31, 28)(((1U << ((31) - (28) + 1)) - 1) << (28)),
44297 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44298
44299 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044,
44300 {"STA Info, AID11 == 2044", "wlan.sta_info_ranging_2044",
44301 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44303
44304 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_aid11,
44305 {"AID11", "wlan.sta_info_ranging_2044.aid11",
44306 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
44307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44308
44309 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_partial_tsf,
44310 {"Partial TSF", "wlan.sta_info_ranging_2044.partial_tsf",
44311 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)),
44312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44313
44314 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_disambiguation,
44315 {"Disambiguation", "wlan.sta_info_ranging_2044.disambiguation",
44316 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
44317 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44318
44319 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_reserved,
44320 {"Reserved", "wlan.sta_info_ranging_2044.reserved",
44321 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(28, 28)(((1U << ((28) - (28) + 1)) - 1) << (28)),
44322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44323
44324 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2044_token,
44325 {"Token", "wlan.sta_info_ranging_2044.token",
44326 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(31, 29)(((1U << ((31) - (29) + 1)) - 1) << (29)),
44327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44328
44329 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045,
44330 {"STA Info Ranging, AID11 == 2045", "wlan.sta_info_ranging_2045",
44331 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44333
44334 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_aid11,
44335 {"AID11", "wlan.sta_info_ranging_2045.aid11",
44336 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(10, 1)(((1U << ((10) - (1) + 1)) - 1) << (1)),
44337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44338
44339 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_i2r_ndp_tx_power,
44340 {"I2R NDP Tx Power", "wlan.sta_info_ranging_2045.i2r_ndp_tx_power",
44341 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(18, 11)(((1U << ((18) - (11) + 1)) - 1) << (11)),
44342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44343
44344 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_r2i_ndp_target_rssi,
44345 {"R2I NDP Target RSSI", "wlan.sta_info_ranging_2045.r2i_ndp_target_rssi",
44346 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(26, 19)(((1U << ((26) - (19) + 1)) - 1) << (19)),
44347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44348
44349 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_disambiguation,
44350 {"Disambiguation", "wlan.sta_info_ranging_2045.disambiguation",
44351 FT_UINT32, BASE_DEC, NULL((void*)0), GENMASK(27, 27)(((1U << ((27) - (27) + 1)) - 1) << (27)),
44352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44353
44354 {&hf_ieee80211_vht_ndp_annc_sta_info_ranging_2045_reserved,
44355 {"Reserved", "wlan.sta_info_ranging_2045.reserved",
44356 FT_UINT32, BASE_HEX, NULL((void*)0), GENMASK(31, 28)(((1U << ((31) - (28) + 1)) - 1) << (28)),
44357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44358
44359 {&hf_ieee80211_ndp_eht_annc_sta_info,
44360 {"STA Info", "wlan.ndp_eht.sta_info",
44361 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44362
44363 {&hf_ieee80211_ndp_eht_annc_aid11,
44364 {"AID11", "wlan.ndp_eht.sta_info.aid11",
44365 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000007ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44366
44367 {&hf_ieee80211_ndp_eht_annc_resolution,
44368 {"Resolution", "wlan.ndp_eht.sta_info.resolution",
44369 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44370
44371 {&hf_ieee80211_ndp_eht_annc_feedback_map,
44372 {"Feedback Bitmap", "wlan.ndp_eht.sta_info.feedback_bitmap",
44373 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44374
44375 {&hf_ieee80211_ndp_eht_annc_reserved1,
44376 {"Reserved", "wlan.ndp_eht.sta_info.reserved1",
44377 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44378
44379 {&hf_ieee80211_ndp_eht_annc_nc_index,
44380 {"Nc Index", "wlan.ndp_eht.sta_info.nc_index",
44381 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44382
44383 {&hf_ieee80211_ndp_eht_annc_feedback_type,
44384 {"Feedback Type And Ng", "wlan.ndp_eht.sta_info.feedback_type_and_ng",
44385 FT_UINT32, BASE_HEX, NULL((void*)0), 0x06000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44386
44387 {&hf_ieee80211_ndp_eht_annc_disambiguation,
44388 {"Disambiguation", "wlan.ndp_eht.sta_info.disambiguation",
44389 FT_UINT32, BASE_HEX, NULL((void*)0), 0x08000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44390
44391 {&hf_ieee80211_ndp_eht_annc_codebook_size,
44392 {"Codebook Size", "wlan.ndp_eht.sta_info.codebook_size",
44393 FT_UINT32, BASE_HEX, NULL((void*)0), 0x10000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44394
44395 {&hf_ieee80211_ndp_eht_annc_reserved2,
44396 {"Reserved", "wlan.ndp_eht.sta_info.reserved2",
44397 FT_UINT32, BASE_HEX, NULL((void*)0), 0xe0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44398
44399 {&hf_ieee80211_data_encap_payload_type,
44400 {"Payload Type", "wlan.data_encap.payload_type",
44401 FT_UINT8, BASE_DEC, VALS(ieee80211_data_encap_payload_types)((0 ? (const struct _value_string*)0 : ((ieee80211_data_encap_payload_types
))))
, 0,
44402 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44403
44404 {&hf_ieee80211_ff_tdls_action_code,
44405 {"Action code", "wlan.fixed.action_code",
44406 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tdls_action_codes_ext, 0,
44407 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44408
44409 {&hf_ieee80211_ff_target_channel,
44410 {"Target Channel", "wlan.fixed.target_channel",
44411 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44413
44414 {&hf_ieee80211_ff_operating_class,
44415 {"Operating Class", "wlan.fixed.operating_class",
44416 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44418
44419 {&hf_ieee80211_ff_channel,
44420 {"Channel", "wlan.fixed.channel",
44421 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44423
44424 {&hf_ieee80211_ff_wnm_action_code,
44425 {"Action code", "wlan.fixed.action_code",
44426 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &wnm_action_codes_ext, 0,
44427 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44428
44429 {&hf_ieee80211_ff_unprotected_wnm_action_code,
44430 {"Action code", "wlan.fixed.action_code",
44431 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &unprotected_wnm_action_codes_ext, 0,
44432 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44433
44434 {&hf_ieee80211_ff_key_data,
44435 {"Key Data", "wlan.fixed.key_data",
44436 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44437
44438 {&hf_ieee80211_ff_key_data_length,
44439 {"Key Data Length", "wlan.fixed.key_data_length",
44440 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44441
44442 {&hf_ieee80211_ff_wnm_notification_type,
44443 {"WNM-Notification type", "wlan.fixed.wnm_notification_type",
44444 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &wnm_notification_types_ext, 0,
44445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44446
44447 {&hf_ieee80211_ff_wnm_notification_response_status,
44448 {"Response Status", "wlan.fixed.wnm_notification_response_status",
44449 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(wnm_notification_response_code)((0 ? (const struct _range_string*)0 : ((wnm_notification_response_code
))))
, 0,
44450 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44451
44452 {&hf_ieee80211_ff_rm_action_code,
44453 {"Action code", "wlan.fixed.action_code",
44454 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &rm_action_codes_ext, 0,
44455 "Radio Measurement Action", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44456
44457 {&hf_ieee80211_ff_rm_dialog_token,
44458 {"Dialog token", "wlan.rm.dialog_token",
44459 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44460 "Non-zero Dialog Token identifies request/report transaction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44461
44462 {&hf_ieee80211_ff_rm_repetitions,
44463 {"Repetitions", "wlan.rm.repetitions",
44464 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44465 "Number of Repetitions, 65535 indicates repeat until cancellation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44466
44467 {&hf_ieee80211_ff_rm_tx_power,
44468 {"Transmit Power Used", "wlan.rm.tx_power",
44469 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44470 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44471
44472 {&hf_ieee80211_ff_rm_max_tx_power,
44473 {"Max Transmit Power", "wlan.rm.max_tx_power",
44474 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44475 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44476
44477 {&hf_ieee80211_ff_tpc,
44478 {"TPC Report", "wlan.rm.tpc",
44479 FT_NONE, BASE_NONE, NULL((void*)0), 0,
44480 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44481
44482 {&hf_ieee80211_ff_tpc_element_id,
44483 {"TPC Element ID", "wlan.rm.tpc.element_id",
44484 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44485 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44486
44487 {&hf_ieee80211_ff_tpc_length,
44488 {"TPC Length", "wlan.rm.tpc.length",
44489 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44490 "Length of TPC Report element (always 2)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44491
44492 {&hf_ieee80211_ff_tpc_tx_power,
44493 {"TPC Transmit Power", "wlan.rm.tpc.tx_power",
44494 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
44495 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44496
44497 {&hf_ieee80211_ff_tpc_link_margin,
44498 {"TPC Link Margin", "wlan.rm.tpc.link_margin",
44499 FT_INT8, BASE_DEC, NULL((void*)0), 0,
44500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44501
44502 {&hf_ieee80211_ff_rm_rx_antenna_id,
44503 {"Receive Antenna ID", "wlan.rm.rx_antenna_id",
44504 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44505 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44506
44507 {&hf_ieee80211_ff_rm_tx_antenna_id,
44508 {"Transmit Antenna ID", "wlan.rm.tx_antenna_id",
44509 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44511
44512 {&hf_ieee80211_ff_rm_rcpi,
44513 {"Received Channel Power", "wlan.rm.rcpi",
44514 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44516
44517 {&hf_ieee80211_ff_rm_rsni,
44518 {"Received Signal to noise indication", "wlan.rm.rsni",
44519 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44521
44522 {&hf_ieee80211_ff_request_mode_pref_cand,
44523 {"Preferred Candidate List Included", "wlan.fixed.request_mode.pref_cand",
44524 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
44525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44526
44527 {&hf_ieee80211_ff_request_mode_abridged,
44528 {"Abridged", "wlan.fixed.request_mode.abridged",
44529 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
44530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44531
44532 {&hf_ieee80211_ff_request_mode_disassoc_imminent,
44533 {"Disassociation Imminent", "wlan.fixed.request_mode.disassoc_imminent",
44534 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
44535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44536
44537 {&hf_ieee80211_ff_request_mode_bss_term_included,
44538 {"BSS Termination Included", "wlan.fixed.request_mode.bss_term_included",
44539 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
44540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44541
44542 {&hf_ieee80211_ff_request_mode_ess_disassoc_imminent,
44543 {"ESS Disassociation Imminent", "wlan.fixed.request_mode.ess_disassoc_imminent",
44544 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
44545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44546
44547 {&hf_ieee80211_ff_request_mode_link_removal_imminent,
44548 {"Link Removal Imminent", "wlan.fixed.request_mode.link_removal_imminent",
44549 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
44550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44551
44552 {&hf_ieee80211_ff_request_mode_reserved,
44553 {"Reserved", "wlan.fixed.request_mode.reserved",
44554 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0,
44555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44556
44557 {&hf_ieee80211_ff_disassoc_timer,
44558 {"Disassociation Timer", "wlan.fixed.disassoc_timer",
44559 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44561
44562 {&hf_ieee80211_ff_bss_termination_delay,
44563 {"BSS Termination Delay", "wlan.fixed.bss_termination_delay",
44564 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44566
44567 {&hf_ieee80211_ff_bss_transition_status_code,
44568 {"BSS Transition Status Code", "wlan.fixed.bss_transition_status_code",
44569 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44571
44572 {&hf_ieee80211_ff_validity_interval,
44573 {"Validity Interval", "wlan.fixed.validity_interval",
44574 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44575 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44576
44577 {&hf_ieee80211_ff_url_len,
44578 {"Session Information URL Length",
44579 "wlan.fixed.session_information.url_length",
44580 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
44581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44582
44583 {&hf_ieee80211_ff_url,
44584 {"Session Information URL", "wlan.fixed.session_information.url",
44585 FT_STRING, BASE_NONE, NULL((void*)0), 0,
44586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44587
44588 {&hf_ieee80211_ff_target_bss,
44589 {"BSS Transition Target BSS", "wlan.fixed.bss_transition_target_bss",
44590 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44592
44593 {&hf_ieee80211_ff_bss_transition_query_reason,
44594 {"BSS Transition Query Reason", "wlan.fixed.bss_transition_query_reason",
44595 FT_UINT8, BASE_DEC, VALS(ieee80211_transition_reasons)((0 ? (const struct _value_string*)0 : ((ieee80211_transition_reasons
))))
, 0,
44596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44597
44598 {&hf_ieee80211_ff_bss_transition_candidate_list_entries,
44599 {"BSS Transition Candidate List Entries", "wlan.fixed.bss_transition_candidate_list_entries",
44600 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
44601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44602
44603/* 802.11ai */
44604
44605 {&hf_ieee80211_ff_fils_discovery_frame_control,
44606 {"Frame Control", "wlan.fils_discovery.frame_control",
44607 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
44608 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44609
44610 {&hf_ieee80211_ff_fils_discovery_frame_control_ssid_length,
44611 {"SSID Length", "wlan.fils_discovery.frame_control.ssid_length",
44612 FT_UINT16, BASE_HEX, NULL((void*)0), PA_FILS_FC_SSID_LENGTH0x001F,
44613 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44614
44615 {&hf_ieee80211_ff_fils_discovery_frame_control_capability,
44616 {"Capability", "wlan.fils_discovery.frame_control.capability",
44617 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_CAPABILITY0x0020,
44618 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44619
44620 {&hf_ieee80211_ff_fils_discovery_frame_control_short_ssid,
44621 {"Short SSID", "wlan.fils_discovery.frame_control.short_ssid",
44622 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_SHORT_SSID0x0040,
44623 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44624
44625 {&hf_ieee80211_ff_fils_discovery_frame_control_ap_csn,
44626 {"AP-CSN", "wlan.fils_discovery.frame_control.ap_csn",
44627 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_AP_CSN0x0080,
44628 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44629
44630 {&hf_ieee80211_ff_fils_discovery_frame_control_ano,
44631 {"ANO", "wlan.fils_discovery.frame_control.ano",
44632 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_ANO0x0100,
44633 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44634
44635 {&hf_ieee80211_ff_fils_discovery_frame_control_channel_center_frequency,
44636 {"Channel Center Frequency Segment 1", "wlan.fils_discovery.frame_control.channel_center_frequency",
44637 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_CCFS10x0200,
44638 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44639
44640 {&hf_ieee80211_ff_fils_discovery_frame_control_primary_channel,
44641 {"Primary Channel", "wlan.fils_discovery.frame_control.primary_channel",
44642 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_PC0x0400,
44643 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44644
44645 {&hf_ieee80211_ff_fils_discovery_frame_control_rsn_info,
44646 {"RSN Info", "wlan.fils_discovery.frame_control.rsn_info",
44647 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_RSN_INFO0x0800,
44648 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44649
44650 {&hf_ieee80211_ff_fils_discovery_frame_control_length,
44651 {"Length", "wlan.fils_discovery.frame_control.length",
44652 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_LENGTH0x1000,
44653 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44654
44655 {&hf_ieee80211_ff_fils_discovery_frame_control_md,
44656 {"MD", "wlan.fils_discovery.frame_control.md",
44657 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_MD0x2000,
44658 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44659
44660 {&hf_ieee80211_ff_fils_discovery_frame_control_reserved,
44661 {"Reserved", "wlan.fils_discovery.frame_control.reserved",
44662 FT_BOOLEAN, 16, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, PA_FILS_FC_RESERVED0xC000,
44663 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44664
44665 {&hf_ieee80211_ff_fils_discovery_ssid,
44666 {"SSID", "wlan.fils_discovery.ssid_length",
44667 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
44668 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44669
44670 {&hf_ieee80211_ff_fils_discovery_capability,
44671 {"Capability", "wlan.fils_discovery.capability",
44672 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
44673 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44674
44675 {&hf_ieee80211_ff_fils_discovery_capability_ess,
44676 {"ESS", "wlan.fils_discovery.capability.ess",
44677 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001,
44678 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44679
44680 {&hf_ieee80211_ff_fils_discovery_capability_privacy,
44681 {"Privacy", "wlan.fils_discovery.capability.privacy",
44682 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0002,
44683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44684
44685 {&hf_ieee80211_ff_fils_discovery_capability_bss_operating_channel_width,
44686 {"BSS Operating Channel width", "wlan.fils_discovery.capability.bss_operating_channel_width",
44687 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,
44688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44689
44690 {&hf_ieee80211_ff_fils_discovery_capability_max_number_of_spatial_streams,
44691 {"Maximum Number of Spatial Streams", "wlan.fils_discovery.maximum_number_of_spatial_streams",
44692 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,
44693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44694
44695 {&hf_ieee80211_ff_fils_discovery_capability_reserved,
44696 {"Reserved", "wlan.fils_discovery.capability.reserved",
44697 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0100,
44698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44699
44700 {&hf_ieee80211_ff_fils_discovery_capability_multiple_bssid,
44701 {"Multiple BSSID", "wlan.fils_discovery.capability.multiple_bssid",
44702 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0200,
44703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44704
44705 {&hf_ieee80211_ff_fils_discovery_capability_phy_index,
44706 {"PHY Index", "wlan.fils_discovery.capability.phy_index",
44707 FT_UINT16, BASE_HEX, VALS(fils_discovery_capability_phy_index)((0 ? (const struct _value_string*)0 : ((fils_discovery_capability_phy_index
))))
, 0x1C00,
44708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44709
44710 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_dsss,
44711 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44712 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,
44713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44714
44715 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ofdm,
44716 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44717 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,
44718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44719
44720 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_ht_vht_tvht,
44721 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44722 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,
44723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44724
44725 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate_he,
44726 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44727 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,
44728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44729
44730 {&hf_ieee80211_ff_fils_discovery_capability_fils_minimum_rate,
44731 {"FILS Minimum Rate", "wlan.fils_discovery.capability.minimum_rate",
44732 FT_UINT16, BASE_HEX, NULL((void*)0), 0xE000,
44733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44734
44735 {&hf_ieee80211_ff_fils_discovery_short_ssid,
44736 {"Short SSID", "wlan.fils_discovery.short_ssid",
44737 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
44738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44739
44740 {&hf_ieee80211_ff_fils_discovery_ap_csn,
44741 {"AP Configuration Sequence Number", "wlan.fils_discovery.ap_csn",
44742 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44744
44745 {&hf_ieee80211_ff_fils_discovery_ano,
44746 {"Access Network Options", "wlan.fils_discovery.ano",
44747 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
44748 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44749
44750 {&hf_ieee80211_ff_fils_discovery_ccfs1,
44751 {"Channel Center Frequency Segment 1", "wlan.fils_discovery.channel_center_frequency",
44752 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
44753 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44754
44755 {&hf_ieee80211_ff_fils_discovery_operating_class,
44756 {"Operating Class", "wlan.fils_discovery.operating_class",
44757 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44758 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44759
44760 {&hf_ieee80211_ff_fils_discovery_primary_channel,
44761 {"Primary Channel", "wlan.fils_discovery.primary_channel",
44762 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44763 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44764
44765 {&hf_ieee80211_ff_fils_discovery_rsn_info,
44766 {"RSN Info", "wlan.fils_discovery.rsn_info",
44767 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
44768 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44769
44770 {&hf_ieee80211_ff_fils_discovery_length,
44771 {"Length", "wlan.fils_discovery.length",
44772 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
44773 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44774
44775 {&hf_ieee80211_ff_fils_discovery_md,
44776 {"MD", "wlan.fils_discovery.md",
44777 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
44778 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44779
44780/* 802.11ad */
44781 {&hf_ieee80211_cf_response_offset,
44782 {"Response Offset", "wlan.res_offset",
44783 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
44784 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44785
44786 {&hf_ieee80211_grant_ack_reserved,
44787 {"Reserved", "wlan.grant_ack.reserved",
44788 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
44789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44790
44791 {&hf_ieee80211_ff_dynamic_allocation,
44792 {"Dynamic Allocation", "wlan.dynamic_allocation",
44793 FT_UINT40, BASE_HEX, NULL((void*)0), 0,
44794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44795
44796 {&hf_ieee80211_ff_TID,
44797 {"TID", "wlan.dynamic_allocation.tid",
44798 FT_UINT40, BASE_DEC, NULL((void*)0), 0x000000000F,
44799 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44800
44801 {&hf_ieee80211_ff_alloc_type,
44802 {"Allocation Type", "wlan.dynamic_allocation.alloc_type",
44803 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000070,
44804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44805
44806 {&hf_ieee80211_ff_src_aid,
44807 {"Source AID", "wlan.dynamic_allocation.src_aid",
44808 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000007F80,
44809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44810
44811 {&hf_ieee80211_ff_dest_aid,
44812 {"Destination AID", "wlan.dynamic_allocation.dest_aid",
44813 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00007f8000,
44814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44815
44816 {&hf_ieee80211_ff_alloc_duration,
44817 {"Allocation Duration", "wlan.dynamic_allocation.alloc_duration",
44818 FT_UINT40, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x7FFF800000,
44819 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44820
44821 {&hf_ieee80211_ff_b39,
44822 {"Reserved (b39)", "wlan.dynamic_allocation.b39",
44823 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000,
44824 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44825
44826 {&hf_ieee80211_ff_ssw,
44827 {"Sector Sweep", "wlan.ssw",
44828 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
44829 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44830
44831 {&hf_ieee80211_ff_ssw_direction,
44832 {"Sector Sweep Direction", "wlan.ssw.direction",
44833 FT_BOOLEAN, 24, TFS(&ieee80211_cf_ssw_direction)((0 ? (const struct true_false_string*)0 : ((&ieee80211_cf_ssw_direction
))))
, 0x000001,
44834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
44835
44836 {&hf_ieee80211_ff_ssw_cdown,
44837 {"Sector Sweep CDOWN", "wlan.ssw.cdown",
44838 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0003fe,
44839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44840
44841 {&hf_ieee80211_ff_ssw_sector_id,
44842 {"Sector Sweep Sector ID", "wlan.ssw.sector_id",
44843 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00fc00,
44844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44845
44846 {&hf_ieee80211_ff_ssw_dmg_ant_id,
44847 {"Sector Sweep DMG Antenna ID", "wlan.ssw.dmg_ant_id",
44848 FT_UINT24, BASE_DEC, NULL((void*)0), 0x030000,
44849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44850
44851 {&hf_ieee80211_ff_ssw_rxss_len,
44852 {"Sector Sweep RXSS Length", "wlan.ssw.rxss_len",
44853 FT_UINT24, BASE_DEC, NULL((void*)0), 0xfc0000,
44854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44855
44856 {&hf_ieee80211_ff_bf,
44857 {"Beam Forming", "wlan.bf",
44858 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
44859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44860
44861 {&hf_ieee80211_ff_bf_train,
44862 {"Beam Forming Training", "wlan.bf.train",
44863 FT_BOOLEAN, 16, NULL((void*)0), 0x0001,
44864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44865
44866 {&hf_ieee80211_ff_bf_is_init,
44867 {"Beam Forming Is InitiatorTXSS", "wlan.bf.isInit",
44868 FT_BOOLEAN, 16, NULL((void*)0), 0x0002,
44869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44870
44871 {&hf_ieee80211_ff_bf_is_resp,
44872 {"Beam Forming Is ResponderTXSS", "wlan.bf.isResp",
44873 FT_BOOLEAN, 16, NULL((void*)0), 0x0004,
44874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44875
44876 {&hf_ieee80211_ff_bf_rxss_len,
44877 {"Beam Forming RXSS Length", "wlan.bf.rxss_len",
44878 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01f8,
44879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44880
44881 {&hf_ieee80211_ff_bf_rxss_rate,
44882 {"Beam Forming RXSS Rate", "wlan.bf.rxss_rate",
44883 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
44884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44885
44886 {&hf_ieee80211_ff_bf_b10b15,
44887 {"Reserved (B10-B15)", "wlan.bf.reserved",
44888 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFC00,
44889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44890
44891 {&hf_ieee80211_ff_bf_num_sectors,
44892 {"Beam Forming Total Number of Sectors", "wlan.bf.num_sectors",
44893 FT_UINT16, BASE_DEC, NULL((void*)0), 0x03f8,
44894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44895
44896 {&hf_ieee80211_ff_bf_num_rx_dmg_ants,
44897 {"Beam Forming Number of DMG Antennas", "wlan.bf.num_dmg_ants",
44898 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0c00,
44899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44900
44901 {&hf_ieee80211_ff_bf_b12b15,
44902 {"Reserved (B12-B15)", "wlan.bf.reserved",
44903 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
44904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44905
44906 {&hf_ieee80211_addr_nav_da,
44907 {"Destination address of STA that caused NAV update", "wlan.nav_da",
44908 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44909 "DMG Destination Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44910
44911 {&hf_ieee80211_addr_nav_sa,
44912 {"Source address of STA that caused NAV update", "wlan.nav_sa",
44913 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
44914 "DMG Source Hardware Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44915
44916 {&hf_ieee80211_ff_sswf,
44917 {"Sector Sweep Feedback", "wlan.sswf",
44918 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
44919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44920
44921 {&hf_ieee80211_ff_sswf_total_sectors,
44922 {"Sector Sweep Feedback total number of sectors", "wlan.sswf.num_sectors",
44923 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0001ff,
44924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44925
44926 {&hf_ieee80211_ff_sswf_num_rx_dmg_ants,
44927 {"Sector Sweep Feedback Number of receive DMG Antennas", "wlan.sswf.num_dmg_ants",
44928 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000600,
44929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44930
44931 {&hf_ieee80211_ff_sswf_poll_required,
44932 {"Sector Sweep Feedback Poll required", "wlan.sswf.poll",
44933 FT_BOOLEAN, 24, NULL((void*)0), 0x010000,
44934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44935
44936 {&hf_ieee80211_ff_sswf_reserved1,
44937 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
44938 FT_UINT24, BASE_HEX, NULL((void*)0), 0x00F800,
44939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44940
44941 {&hf_ieee80211_ff_sswf_reserved2,
44942 {"Sector Sweep Feedback Reserved", "wlan.sswf.reserved",
44943 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFE0000,
44944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44945
44946 {&hf_ieee80211_ff_sswf_sector_select,
44947 {"Sector Sweep Feedback Sector Select", "wlan.sswf.sector_select",
44948 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00003F,
44949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44950
44951 {&hf_ieee80211_ff_sswf_dmg_antenna_select,
44952 {"Sector Sweep Feedback DMG Antenna Select", "wlan.sswf.dmg_antenna_select",
44953 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000C0,
44954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44955
44956 {&hf_ieee80211_ff_sswf_snr_report,
44957 {"Sector Sweep Feedback SNR Report", "wlan.sswf.snr_report",
44958 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00FF00,
44959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44960
44961
44962 {&hf_ieee80211_ff_brp,
44963 {"BRP Request", "wlan.brp",
44964 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
44965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44966
44967 {&hf_ieee80211_ff_brp_L_RX,
44968 {"BRP Request L-RX", "wlan.brp.l_rx",
44969 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f,
44970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44971
44972 {&hf_ieee80211_ff_brp_TX_TRN_REQ,
44973 {"BRP Request TX-TRN-REQ", "wlan.brp.tx_trn_req",
44974 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
44975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44976
44977 {&hf_ieee80211_ff_brp_MID_REQ,
44978 {"BRP Request MID-REQ", "wlan.brp.mid_req",
44979 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
44980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44981
44982 {&hf_ieee80211_ff_brp_BC_REQ,
44983 {"BRP Request BC-REQ", "wlan.brp.bc_req",
44984 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
44985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44986
44987 {&hf_ieee80211_ff_brp_MID_GRANT,
44988 {"BRP Request MID-GRANT", "wlan.brp.mid_grant",
44989 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
44990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44991
44992 {&hf_ieee80211_ff_brp_BC_GRANT,
44993 {"BRP Request BC-GRANT", "wlan.brp.bc_grant",
44994 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
44995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
44996
44997 {&hf_ieee80211_ff_brp_chan_FBCK_CAP,
44998 {"BRP Request Chan FBCK-CAP", "wlan.brp.chan_fbck_cap",
44999 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
45000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45001
45002 {&hf_ieee80211_ff_brp_tx_sector,
45003 {"BRP Request TX Sector ID", "wlan.brp.tx_sector_id",
45004 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0001f800,
45005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45006
45007 {&hf_ieee80211_ff_brp_other_aid,
45008 {"BRP Request Other AID", "wlan.brp.other_aid",
45009 FT_UINT32, BASE_DEC, NULL((void*)0), 0x01fe0000,
45010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45011
45012 {&hf_ieee80211_ff_brp_tx_antenna,
45013 {"BRP Request TX Antenna ID", "wlan.brp.tx_antenna_id",
45014 FT_UINT32, BASE_DEC, NULL((void*)0), 0x06000000,
45015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45016
45017 {&hf_ieee80211_ff_brp_reserved,
45018 {"BRP Request Reserved", "wlan.brp.reserved",
45019 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF8000000,
45020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45021
45022 {&hf_ieee80211_ff_blm,
45023 {"Beamformed Link Maintenance", "wlan.blm",
45024 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
45025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45026
45027 {&hf_ieee80211_ff_blm_unit_index,
45028 {"BeamLink Maintenance Uint Index", "wlan.blm.uint_index",
45029 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
45030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45031
45032 {&hf_ieee80211_ff_blm_maint_value,
45033 {"BeamLink Maintenance Value", "wlan.blm.value",
45034 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7e,
45035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45036
45037 {&hf_ieee80211_ff_blm_is_master,
45038 {"BeamLink Is Master", "wlan.blm.is_master",
45039 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
45040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45041
45042 {&hf_ieee80211_ff_bic,
45043 {"Beacon Interval Control", "wlan.bic",
45044 FT_UINT48, BASE_HEX, NULL((void*)0), 0,
45045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45046
45047 {&hf_ieee80211_ff_bic_cc_present,
45048 {"Clustering Control Present", "wlan.bic.cc",
45049 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000001,
45050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45051
45052 {&hf_ieee80211_ff_bic_discovery_mode,
45053 {"Discovery Mode", "wlan.bic.discovery_mode",
45054 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000002,
45055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45056
45057 {&hf_ieee80211_ff_bic_next_beacon,
45058 {"Next Beacon", "wlan.bic.next_beacon",
45059 FT_UINT48, BASE_DEC, NULL((void*)0), 0x00000000003c,
45060
45061 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45062
45063 {&hf_ieee80211_ff_bic_ati_present,
45064 {"ATI Present", "wlan.bic.ati",
45065 FT_BOOLEAN, 48, NULL((void*)0), 0x000000000040,
45066 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45067
45068 {&hf_ieee80211_ff_bic_abft_len,
45069 {"A-BFT length", "wlan.bic.abft_len",
45070 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000000380,
45071 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45072
45073 {&hf_ieee80211_ff_bic_fss,
45074 {"FSS", "wlan.bic.fss",
45075 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000003c00,
45076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45077
45078 {&hf_ieee80211_ff_bic_is_resp,
45079 {"Is TXSS Responder", "wlan.bic.is_responder",
45080 FT_BOOLEAN, 48, NULL((void*)0), 0x000000004000,
45081 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45082
45083 {&hf_ieee80211_ff_bic_next_abft,
45084 {"Next A-BFT", "wlan.bic.next_abft",
45085 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000078000,
45086 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45087
45088 {&hf_ieee80211_ff_bic_frag_txss,
45089 {"Fragmented TXSS", "wlan.bic.frag_txss",
45090 FT_BOOLEAN, 48, NULL((void*)0), 0x000000080000,
45091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45092
45093 {&hf_ieee80211_ff_bic_txss_span,
45094 {"TXSS span", "wlan.bic.txss_span",
45095 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000007f00000,
45096 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45097
45098 {&hf_ieee80211_ff_bic_NBI_abft,
45099 {"Number of Beacon Intervals that are needed to allocate A-BFT", "wlan.bic.NBI_abft",
45100 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000078000000,
45101 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45102
45103 {&hf_ieee80211_ff_bic_abft_count,
45104 {"A-BFT Count", "wlan.bic.abft_count",
45105 FT_UINT48, BASE_DEC, NULL((void*)0), 0x001f80000000,
45106 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45107
45108 {&hf_ieee80211_ff_bic_nabft,
45109 {"Number of A-BFT's received from each Antenna", "wlan.bic.nabft",
45110 FT_UINT48, BASE_DEC, NULL((void*)0), 0x07e000000000,
45111 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45112
45113 {&hf_ieee80211_ff_bic_pcp,
45114 {"PCP Association Ready", "wlan.bic.pcp",
45115 FT_BOOLEAN, 48, NULL((void*)0), 0x080000000000,
45116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45117
45118 {&hf_ieee80211_ff_bic_reserved,
45119 {"Reserved", "wlan.bic.reserved",
45120 FT_UINT48, BASE_HEX, NULL((void*)0), 0xF00000000000,
45121 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45122
45123 {&hf_ieee80211_ff_dmg_params,
45124 {"DMG Parameters", "wlan.dmg_params",
45125 FT_UINT8, BASE_HEX , NULL((void*)0), 0,
45126 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45127
45128 {&hf_ieee80211_ff_dmg_params_bss,
45129 {"BSS Type", "wlan.dmg_params.bss",
45130 FT_UINT8, BASE_DEC, VALS(bss_type)((0 ? (const struct _value_string*)0 : ((bss_type)))), 0x03,
45131 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45132
45133 {&hf_ieee80211_ff_dmg_params_cbap_only,
45134 {"CBAP Only", "wlan.dmg_params.cbap_only",
45135 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
45136 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45137
45138 {&hf_ieee80211_ff_dmg_params_cbap_src,
45139 {"CBAP Source", "wlan.dmg_params.cbap_src",
45140 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
45141 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45142
45143 {&hf_ieee80211_ff_dmg_params_privacy,
45144 {"DMG Privacy", "wlan.dmg_params.privacy",
45145 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
45146 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45147
45148 {&hf_ieee80211_ff_dmg_params_policy,
45149 {"ECAPC Policy Enforced", "wlan.dmg_params.policy",
45150 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
45151 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45152
45153 {&hf_ieee80211_ff_dmg_params_spec_mgmt,
45154 {"Spectrum Management", "wlan.dmg_params.spec_mgmt",
45155 FT_BOOLEAN, 8, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x40,
45156 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45157
45158 {&hf_ieee80211_ff_dmg_params_radio_measure,
45159 {"Radio Measurement", "wlan.dmg_params.radio_measure",
45160 FT_BOOLEAN, 8, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x80,
45161 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45162
45163 {&hf_ieee80211_ff_cc,
45164 {"Clustering Control", "wlan.cc",
45165 FT_UINT64, BASE_HEX , NULL((void*)0), 0,
45166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45167
45168 {&hf_ieee80211_ff_cc_abft_resp_addr,
45169 {"A-BFT Responder Address", "wlan.cc.abft_resp_addr",
45170 FT_ETHER, BASE_NONE , NULL((void*)0), 0,
45171 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45172
45173 {&hf_ieee80211_ff_cc_sp_duration,
45174 {"Beacon SP Duration", "wlan.cc.sp_duration",
45175 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
45176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45177
45178 {&hf_ieee80211_ff_cc_cluster_id,
45179 {"Cluster ID", "wlan.cc.cluster_id",
45180 FT_UINT64, BASE_DEC , NULL((void*)0), 0,
45181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45182
45183 {&hf_ieee80211_ff_cc_role,
45184 {"Cluster Member Role", "wlan.cc.rold",
45185 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
45186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45187
45188 {&hf_ieee80211_ff_cc_max_mem,
45189 {"Cluster MaxMem", "wlan.cc.max_mem",
45190 FT_UINT8, BASE_DEC , NULL((void*)0), 0,
45191 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45192
45193 {&hf_ieee80211_tag_relay_support,
45194 {"Relay Supportability", "wlan.relay_capabilities.relay_support",
45195 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
45196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45197
45198 {&hf_ieee80211_tag_relay_use,
45199 {"Relay Usability", "wlan.relay_capabilities.relay_use",
45200 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
45201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45202
45203 {&hf_ieee80211_tag_relay_permission,
45204 {"Relay Permission", "wlan.relay_capabilities.relay_permission",
45205 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
45206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45207
45208 {&hf_ieee80211_tag_AC_power,
45209 {"A/C Power", "wlan.relay_capabilities.AC_power",
45210 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
45211 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45212
45213 {&hf_ieee80211_tag_relay_prefer,
45214 {"Relay Preference", "wlan.relay_capabilities.relay_prefer",
45215 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
45216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45217
45218 {&hf_ieee80211_tag_duplex,
45219 {"Duplex", "wlan.relay_capabilities.duplex",
45220 FT_UINT8, BASE_DEC, NULL((void*)0), 0x60,
45221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45222
45223 {&hf_ieee80211_tag_cooperation,
45224 {"Cooperation", "wlan.relay_capabilities.cooperation",
45225 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
45226 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45227
45228#if 0
45229 {&hf_ieee80211_ff_rcsi,
45230 {"Relay Capable STA Info", "wlan.rcsi",
45231 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
45232 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45233
45234 {&hf_ieee80211_ff_rcsi_aid,
45235 {"AID", "wlan.rcsi.aid",
45236 FT_UINT8, BASE_DEC, NULL((void*)0), 0xff,
45237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45238#endif
45239
45240 {&hf_ieee80211_ff_band_id,
45241 {"Band ID", "wlan.band_id",
45242 FT_UINT8, BASE_DEC, VALS(band_id)((0 ? (const struct _value_string*)0 : ((band_id)))), 0x0,
45243 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45244
45245 {&hf_ieee80211_tag_move,
45246 {"Move", "wlan.dmg_bss_param_change.move",
45247 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
45248 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45249
45250 {&hf_ieee80211_tag_size,
45251 {"Size", "wlan.dmg_bss_param_change.size",
45252 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
45253 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45254
45255 {&hf_ieee80211_tag_tbtt_offset,
45256 {"TBTT Offset", "wlan.dmg_bss_param_change.tbtt_offset",
45257 FT_UINT32, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x0,
45258 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45259
45260 {&hf_ieee80211_tag_bi_duration,
45261 {"BI Duration", "wlan.dmg_bss_param_change.bi_duration",
45262 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45263 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45264
45265 {&hf_ieee80211_tag_dmg_capa_sta_addr,
45266 {"STA Address", "wlan.dmg_capa.sta_addr",
45267 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45268 "STA_Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45269
45270 {&hf_ieee80211_tag_dmg_capa_aid,
45271 {"AID", "wlan.dmg_capa.aid",
45272 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45273 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45274/* 8.4.2.127.2 DMG STA Capability Information field */
45275 {&hf_ieee80211_tag_reverse_direction, /* DMG STA capa, bits [0] */
45276 {"Reverse Direction", "wlan.dmg_capa.reverse_direction",
45277 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
45278 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45279
45280 {&hf_ieee80211_tag_hlts, /* DMG STA capa, bits [1] */
45281 {"Higher Layer Timer Synchronization", "wlan.dmg_capa.htls",
45282 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)),
45283 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45284
45285 {&hf_ieee80211_tag_tpc, /* DMG STA capa, bits [2] */
45286 {"TPC", "wlan.dmg_capa.tpc",
45287 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(2, 2)(((1U << ((2) - (2) + 1)) - 1) << (2)),
45288 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45289
45290 {&hf_ieee80211_tag_spsh, /* DMG STA capa, bits [3] */
45291 {"SPSH and Interference Mitigation", "wlan.dmg_capa.spsh",
45292 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(3, 3)(((1U << ((3) - (3) + 1)) - 1) << (3)),
45293 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45294
45295 {&hf_ieee80211_tag_rx_antenna, /* DMG STA capa, bits [4..5] */
45296 {"Number of RX DMG Antennas", "wlan.dmg_capa.num_rx",
45297 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)),
45298 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45299
45300 {&hf_ieee80211_tag_fast_link, /* DMG STA capa, bits [6] */
45301 {"Fast Link Adaptation", "wlan.dmg_capa.fast_link",
45302 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(6, 6)(((1U << ((6) - (6) + 1)) - 1) << (6)),
45303 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45304
45305 {&hf_ieee80211_tag_num_sectors, /* DMG STA capa, bits [7..13] */
45306 {"Total Number of Sectors", "wlan.dmg_capa.num_sectors",
45307 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)),
45308 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45309
45310 {&hf_ieee80211_tag_rxss_length, /* DMG STA capa, bits [14..19] */
45311 {"RXSS Length", "wlan.dmg_capa.rxss_len",
45312 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)),
45313 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45314
45315 {&hf_ieee80211_tag_reciprocity, /* DMG STA capa, bits [20] */
45316 {"DMG Antenna Reciprocity", "wlan.dmg_capa.reciprocity",
45317 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(20, 20)(((1U << ((20) - (20) + 1)) - 1) << (20)),
45318 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45319/* DMG STA capa, A-MPDU params, bits [21..26] */
45320 {&hf_ieee80211_tag_max_ampdu_exp, /* DMG STA capa, bits [21..23] */
45321 {"Maximum A-MPDU Length Exponent", "wlan.dmg_capa.max_ampdu_exp",
45322 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(23, 21)(((1U << ((23) - (21) + 1)) - 1) << (21)),
45323 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45324
45325 {&hf_ieee80211_tag_min_mpdu_spacing, /* DMG STA capa, bits [24..26] */
45326 {"Minimum MPDU Start Spacing", "wlan.dmg_capa.min_mpdu_spacing",
45327 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(26-24, 24-24)(((1U << ((26-24) - (24-24) + 1)) - 1) << (24-24)
)
,
45328 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45329
45330 {&hf_ieee80211_tag_ba_flow_control , /* DMG STA capa, bits [27] */
45331 {"BA with Flow Control", "wlan.dmg_capa.bs_flow_ctrl",
45332 FT_BOOLEAN, 24, NULL((void*)0), GENMASK(27-24, 27-24)(((1U << ((27-24) - (27-24) + 1)) - 1) << (27-24)
)
,
45333 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45334/* DMG STA capa, supported MCS set, bits [28..51] */
45335 {&hf_ieee80211_tag_max_sc_rx_mcs, /* DMG STA capa, bits [28..32] */
45336 {"Maximum SC Rx MCS", "wlan.dmg_capa.max_sc_rx_mcs",
45337 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(32-24, 28-24)(((1U << ((32-24) - (28-24) + 1)) - 1) << (28-24)
)
,
45338 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45339
45340 {&hf_ieee80211_tag_max_ofdm_rx_mcs, /* DMG STA capa, bits [33..37] */
45341 {"Maximum OFDM Rx MCS", "wlan.dmg_capa.max_ofdm_rx_mcs",
45342 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(37-24, 33-24)(((1U << ((37-24) - (33-24) + 1)) - 1) << (33-24)
)
,
45343 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45344
45345 {&hf_ieee80211_tag_max_sc_tx_mcs, /* DMG STA capa, bits [38..42] */
45346 {"Maximum SC Tx MCS", "wlan.dmg_capa.max_sc_tx_mcs",
45347 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(42-24, 38-24)(((1U << ((42-24) - (38-24) + 1)) - 1) << (38-24)
)
,
45348 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45349
45350 {&hf_ieee80211_tag_max_ofdm_tx_mcs, /* DMG STA capa, bits [43..47] */
45351 {"Maximum OFDM Tx MCS", "wlan.dmg_capa.max_ofdm_tx_mcs",
45352 FT_UINT24, BASE_DEC, NULL((void*)0), GENMASK(47-24, 43-24)(((1U << ((47-24) - (43-24) + 1)) - 1) << (43-24)
)
,
45353 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45354
45355 {&hf_ieee80211_tag_low_power_supported, /* DMG STA capa, bits [48] */
45356 {"Low Power SC PHY Supported", "wlan.dmg_capa.low_power_supported",
45357 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(48-48, 48-48)(((1U << ((48-48) - (48-48) + 1)) - 1) << (48-48)
)
,
45358 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45359
45360 {&hf_ieee80211_tag_code_rate, /* DMG STA capa, bits [49] */
45361 {"Code Rate 13/16", "wlan.dmg_capa.code_rate",
45362 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(49-48, 49-48)(((1U << ((49-48) - (49-48) + 1)) - 1) << (49-48)
)
,
45363 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45364
45365 {&hf_ieee80211_tag_dtp, /* DMG STA capa, bits [52] */
45366 {"DTP Supported", "wlan.dmg_capa.dtp",
45367 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(52-48, 52-48)(((1U << ((52-48) - (52-48) + 1)) - 1) << (52-48)
)
,
45368 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45369
45370 {&hf_ieee80211_tag_appdu_supp, /* DMG STA capa, bits [53] */
45371 {"A-PPDU Supported", "wlan.dmg_capa.appdu_supp",
45372 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(53-48, 53-48)(((1U << ((53-48) - (53-48) + 1)) - 1) << (53-48)
)
,
45373 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45374
45375 {&hf_ieee80211_tag_heartbeat, /* DMG STA capa, bits [54] */
45376 {"HeartBeat", "wlan.dmg_capa.heartbeat",
45377 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(54-48, 54-48)(((1U << ((54-48) - (54-48) + 1)) - 1) << (54-48)
)
,
45378 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45379
45380 {&hf_ieee80211_tag_other_aid, /* DMG STA capa, bits [55] */
45381 {"Supports Other_AID", "wlan.dmg_capa.other_aid",
45382 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(55-48, 55-48)(((1U << ((55-48) - (55-48) + 1)) - 1) << (55-48)
)
,
45383 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45384
45385 {&hf_ieee80211_tag_pattern_recip, /* DMG STA capa, bits [56] */
45386 {"Antenna Pattern Reciprocity", "wlan.dmg_capa.pattern_recip",
45387 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(56-48, 56-48)(((1U << ((56-48) - (56-48) + 1)) - 1) << (56-48)
)
,
45388 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45389
45390 {&hf_ieee80211_tag_heartbeat_elapsed, /* DMG STA capa, bits [57..59] */
45391 {"Heartbeat Elapsed Indication", "wlan.dmg_capa.heartbeat_elapsed",
45392 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(59-48, 57-48)(((1U << ((59-48) - (57-48) + 1)) - 1) << (57-48)
)
,
45393 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45394
45395 {&hf_ieee80211_tag_grant_ack_supp, /* DMG STA capa, bits [60] */
45396 {"Grant ACK Supported", "wlan.dmg_capa.grant_ack_supp",
45397 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(60-48, 60-48)(((1U << ((60-48) - (60-48) + 1)) - 1) << (60-48)
)
,
45398 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45399
45400 {&hf_ieee80211_tag_RXSSTxRate_supp, /* DMG STA capa, bits [61] */
45401 {"RXSSTxRate Supported", "wlan.dmg_capa.RXSSTxRate",
45402 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(61-48, 61-48)(((1U << ((61-48) - (61-48) + 1)) - 1) << (61-48)
)
,
45403 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45404/* 8.4.2.127.3 DMG PCP/AP Capability Information field */
45405 {&hf_ieee80211_tag_pcp_tddti, /* DMG PCP/AP capa, bits [0] */
45406 {"TDDTI", "wlan.dmg_capa.pcp_tdtti",
45407 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
45408 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45409
45410 {&hf_ieee80211_tag_pcp_PSA, /* DMG PCP/AP capa, bits [1] */
45411 {"Pseudo-static Allocations", "wlan.dmg_capa.pcp_psa",
45412 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(1, 1)(((1U << ((1) - (1) + 1)) - 1) << (1)),
45413 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45414
45415 {&hf_ieee80211_tag_pcp_handover, /* DMG PCP/AP capa, bits [2] */
45416 {"PDP Handover", "wlan.dmg_capa.pcp_handover",
45417 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(2, 2)(((1U << ((2) - (2) + 1)) - 1) << (2)),
45418 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45419
45420 {&hf_ieee80211_tag_pcp_max_assoc, /* DMG PCP/AP capa, bits [3..10] */
45421 {"Max Associated STA Number", "wlan.dmg_capa.pcp_max_assoc",
45422 FT_UINT16, BASE_DEC, NULL((void*)0), GENMASK(10, 3)(((1U << ((10) - (3) + 1)) - 1) << (3)),
45423 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45424
45425 {&hf_ieee80211_tag_pcp_power_src, /* DMG PCP/AP capa, bits [11] */
45426 {"Power Source", "wlan.dmg_capa.pcp_power_src",
45427 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(11, 11)(((1U << ((11) - (11) + 1)) - 1) << (11)),
45428 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45429
45430 {&hf_ieee80211_tag_pcp_decenter, /* DMG PCP/AP capa, bits [12] */
45431 {"Decentralized PCP/AP Clustering", "wlan.dmg_capa.pcp_decenter",
45432 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(12, 12)(((1U << ((12) - (12) + 1)) - 1) << (12)),
45433 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45434
45435 {&hf_ieee80211_tag_pcp_forwarding, /* DMG PCP/AP capa, bits [13] */
45436 {"PCP Forwarding", "wlan.dmg_capa.pcp_forwarding",
45437 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(13, 13)(((1U << ((13) - (13) + 1)) - 1) << (13)),
45438 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45439
45440 {&hf_ieee80211_tag_pcp_center, /* DMG PCP/AP capa, bits [14] */
45441 {"Centralized PCP/AP Clustering", "wlan.dmg_capa.pcp_center",
45442 FT_BOOLEAN, 16, NULL((void*)0), GENMASK(14, 14)(((1U << ((14) - (14) + 1)) - 1) << (14)),
45443 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45444
45445 {&hf_ieee80211_tag_sta_beam_track, /* DMG STA beam track capa*/
45446 {"STA Beam Tracking Time Limit", "wlan.dmg_capa.beam_track",
45447 FT_UINT16, BASE_DEC | BASE_UNIT_STRING0x00001000, UNS(&units_microseconds)((0 ? (const struct unit_name_string*)0 : ((&units_microseconds
))))
, 0,
45448 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45449
45450 {&hf_ieee80211_tag_ext_sc_mcs_max_tx, /* DMG STA Ext SC MCS Capa: Max TX*/
45451 {"Extended SC Max Tx MCS Name", "wlan.dmg_capa.ext_sc_mcs_capa_max_tx",
45452 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)),
45453 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45454
45455 {&hf_ieee80211_tag_ext_sc_mcs_tx_code_7_8, /* DMG STA Ext SC MCS Capa: Tx code rate 7/8*/
45456 {"Extended SC Tx MCS code rate 7/8", "wlan.dmg_capa.ext_sc_mcs_tx_code_7_8",
45457 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)),
45458 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45459
45460 {&hf_ieee80211_tag_ext_sc_mcs_max_rx, /* DMG STA Ext SC MCS Capa: Max RX*/
45461 {"Extended SC Max Rx MCS Name", "wlan.dmg_capa.ext_sc_mcs_capa_max_rx",
45462 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)),
45463 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45464
45465 {&hf_ieee80211_tag_ext_sc_mcs_rx_code_7_8, /* DMG STA Ext SC MCS Capa: Rx code rate 7/8*/
45466 {"Extended SC Rx MCS code rate 7/8", "wlan.dmg_capa.ext_sc_mcs_rx_code_7_8",
45467 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)),
45468 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45469
45470 {&hf_ieee80211_tag_max_basic_sf_amsdu, /* DMG Max Number of Basic Subframes in an A-MSDU*/
45471 {"Max Number of Basic Subframes in an A-MSDU", "wlan.dmg_capa.max_basic_sf_amsdu",
45472 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(max_basic_sf_amsdu)((0 ? (const struct _range_string*)0 : ((max_basic_sf_amsdu))
))
, 0,
45473 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45474
45475 {&hf_ieee80211_tag_max_short_sf_amsdu, /* DMG Max Number of short Subframes in an A-MSDU*/
45476 {"Max Number of short Subframes in an A-MSDU", "wlan.dmg_capa.max_short_sf_amsdu",
45477 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(max_short_sf_amsdu)((0 ? (const struct _range_string*)0 : ((max_short_sf_amsdu))
))
, 0,
45478 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45479
45480 {&hf_ieee80211_tag_PSRSI,
45481 {"PS Request Suspension Interval", "wlan.dmg_oper.psrsi",
45482 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45483 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45484
45485 {&hf_ieee80211_tag_min_BHI_duration,
45486 {"Min BHI Duration", "wlan.dmg_oper.min_BHI_duration",
45487 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45488 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45489
45490 {&hf_ieee80211_tag_brdct_sta_info_dur,
45491 {"Broadcast STA Info Duration", "wlan.dmg_oper.brdcst_sta_info_dur",
45492 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45493 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45494
45495 {&hf_ieee80211_tag_assoc_resp_confirm_time,
45496 {"Associated Response Confirm Time", "wlan.dmg_oper.assoc_resp_confirm_time",
45497 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45498 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45499
45500 {&hf_ieee80211_tag_min_pp_duration,
45501 {"Min PP Duration", "wlan.dmg_oper.min_pp_duration",
45502 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45503 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45504
45505 {&hf_ieee80211_tag_SP_idle_timeout,
45506 {"SP Idle Timeout", "wlan.dmg_oper.SP_idle_timeout",
45507 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45508 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45509
45510 {&hf_ieee80211_tag_max_lost_beacons,
45511 {"Max Lost Beacons", "wlan.dmg_oper.max_lost_beacons",
45512 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45513 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45514
45515 {&hf_ieee80211_tag_type,
45516 {"Type", "wlan.sctor_id.type",
45517 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000f,
45518 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45519
45520 {&hf_ieee80211_tag_tap1,
45521 {"Tap 1", "wlan.sctor_id.tap1",
45522 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000003f0,
45523 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45524
45525 {&hf_ieee80211_tag_state1,
45526 {"State 1", "wlan.sctor_id.state1",
45527 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000fc00,
45528 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45529
45530 {&hf_ieee80211_tag_tap2,
45531 {"Tap 2", "wlan.sctor_id.tap2",
45532 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00ff0000,
45533 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45534
45535 {&hf_ieee80211_tag_state2,
45536 {"State 2", "wlan.sctor_id.state2",
45537 FT_UINT32, BASE_HEX, NULL((void*)0), 0xff000000,
45538 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45539
45540 {&hf_ieee80211_tag_allocation_id,
45541 {"Allocation ID", "wlan.ext_sched.alloc_id",
45542 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000f,
45543 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45544
45545 {&hf_ieee80211_tag_allocation_type,
45546 {"Allocation Type", "wlan.ext_sched.alloc_type",
45547 FT_UINT16, BASE_DEC, VALS(allocation_type)((0 ? (const struct _value_string*)0 : ((allocation_type)))), 0x0070,
45548 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45549
45550 {&hf_ieee80211_tag_pseudo_static,
45551 {"Pseudo-static", "wlan.ext_sched.p_static",
45552 FT_BOOLEAN, 16, NULL((void*)0), 0x0080,
45553 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45554
45555 {&hf_ieee80211_tag_truncatable,
45556 {"Truncatable", "wlan.ext_sched.truncatable",
45557 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
45558 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45559
45560 {&hf_ieee80211_tag_extendable,
45561 {"Extendable", "wlan.ext_sched.extendable",
45562 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
45563 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45564
45565 {&hf_ieee80211_tag_pcp_active,
45566 {"PCP Active", "wlan.ext_sched.pcp_active",
45567 FT_BOOLEAN, 16, NULL((void*)0), 0x0400,
45568 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45569
45570 {&hf_ieee80211_tag_lp_sc_used,
45571 {"LP SC Used", "wlan.ext_sched.lp_sc_used",
45572 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
45573 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45574
45575 {&hf_ieee80211_tag_src_aid,
45576 {"Source AID", "wlan.ext_sched.src_id",
45577 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45578 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45579
45580 {&hf_ieee80211_tag_dest_aid,
45581 {"Destination AID", "wlan.ext_sched.dest_id",
45582 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45583 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45584
45585 {&hf_ieee80211_tag_alloc_start,
45586 {"Allocation Start", "wlan.ext_sched.alloc_start",
45587 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45588 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45589
45590 {&hf_ieee80211_tag_alloc_block_duration,
45591 {"Allocation Block Duration", "wlan.ext_sched.block_duration",
45592 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45593 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45594
45595 {&hf_ieee80211_tag_num_blocks,
45596 {"Number of Blocks", "wlan.ext_sched.num_blocks",
45597 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45598 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45599
45600 {&hf_ieee80211_tag_alloc_block_period,
45601 {"Allocation Block Period", "wlan.ext_sched.alloc_block_period",
45602 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45603 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45604
45605 {&hf_ieee80211_tag_aid,
45606 {"AID", "wlan.sta_avail.aid",
45607 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00ff,
45608 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45609
45610 {&hf_ieee80211_tag_cbap,
45611 {"CBAP", "wlan.sta_avail.cbap",
45612 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
45613 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45614
45615 {&hf_ieee80211_tag_pp_avail,
45616 {"PP Available", "wlan.sta_avail.pp_avail",
45617 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
45618 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45619
45620 {&hf_ieee80211_tag_next_ati_start_time,
45621 {"Start Time", "wlan.next_ati.start_time",
45622 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45623 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45624
45625 {&hf_ieee80211_tag_next_ati_duration,
45626 {"ATI Duration", "wlan.next_ati.duration",
45627 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45628 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45629
45630 {&hf_ieee80211_tag_old_bssid,
45631 {"Old BSSID", "wlan.pcp_handover.old_bssid",
45632 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45633 "OLD_BSSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45634
45635 {&hf_ieee80211_tag_new_pcp_addr,
45636 {"New PCP Address", "wlan.pcp_handover.new_pcp_addr",
45637 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45638 "New_PCP_Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45639
45640 {&hf_ieee80211_tag_bssid,
45641 {"BSSID", "wlan.quiet_res.bssid",
45642 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45643 "BSS-ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45644
45645 {&hf_ieee80211_tag_duplex_relay,
45646 {"Duplex", "wlan.relay_capabilities.duplex",
45647 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45648 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45649
45650 {&hf_ieee80211_tag_cooperation_relay,
45651 {"Cooperation", "wlan.relay_capabilities.cooperation",
45652 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
45653 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45654
45655 {&hf_ieee80211_tag_tx_mode,
45656 {"TX-Mode", "wlan.relay_trans_param.tx_mode",
45657 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
45658 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45659
45660 {&hf_ieee80211_tag_link_change_interval,
45661 {"Link Change Interval", "wlan.relay_trans_param.link_change_interval",
45662 FT_UINT8, BASE_CUSTOM, CF_FUNC(allocation_duration_base_custom)((const void *) (size_t) (allocation_duration_base_custom)), 0x0,
45663 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45664
45665 {&hf_ieee80211_tag_data_sensing_time,
45666 {"Data Sensing Time", "wlan.relay_trans_param.data_sensing_time",
45667 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
45668 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45669
45670 {&hf_ieee80211_tag_first_period,
45671 {"First Period", "wlan.relay_trans_param.first_period",
45672 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45673 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45674
45675 {&hf_ieee80211_tag_second_period,
45676 {"Second Period", "wlan.relay_trans_param.second_period",
45677 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
45678 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45679
45680 {&hf_ieee80211_tag_initiator,
45681 {"Initiator", "wlan.beam_refine.initiator",
45682 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000001,
45683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45684
45685 {&hf_ieee80211_tag_tx_train_res,
45686 {"TX-train-response", "wlan.beam_refine.tx_train_res",
45687 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000002,
45688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45689
45690 {&hf_ieee80211_tag_rx_train_res,
45691 {"RX-train-response", "wlan.beam_refine.rx_train_res",
45692 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000004,
45693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45694
45695 {&hf_ieee80211_tag_tx_trn_ok,
45696 {"TX-TRN-OK", "wlan.beam_refine.tx_trn_ok",
45697 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000008,
45698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45699
45700 {&hf_ieee80211_tag_txss_fbck_req,
45701 {"TXSS-FBCK-REQ", "wlan.beam_refine.txss_fbck_req",
45702 FT_BOOLEAN, 40, NULL((void*)0), 0x0000000010,
45703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45704
45705 {&hf_ieee80211_tag_bs_fbck,
45706 {"BS-FBCK", "wlan.beam_refine.bs_fbck",
45707 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000007e0,
45708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45709
45710 {&hf_ieee80211_tag_bs_fbck_antenna_id,
45711 {"BS-FBCK Antenna ID", "wlan.beam_refine.bs_fbck_antenna_id",
45712 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000001800,
45713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45714
45715 {&hf_ieee80211_tag_snr_requested,
45716 {"SNR Requested", "wlan.beam_refine.snr_req",
45717 FT_BOOLEAN, 40, NULL((void*)0), 0x0000002000,
45718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45719
45720 {&hf_ieee80211_tag_channel_measurement_requested,
45721 {"Channel Measurement Requested", "wlan.beam_refine.ch_measure_req",
45722 FT_BOOLEAN, 40, NULL((void*)0), 0x0000004000,
45723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45724
45725 {&hf_ieee80211_tag_number_of_taps_requested,
45726 {"Number of Taps Requested", "wlan.beam_refine.taps_req",
45727 FT_UINT40, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(number_of_taps_values)((0 ? (const struct _val64_string*)0 : ((number_of_taps_values
))))
, 0x0000018000,
45728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45729
45730 {&hf_ieee80211_tag_sector_id_order_req,
45731 {"Sector ID Order Requested", "wlan.beam_refine.sector_id_req",
45732 FT_BOOLEAN, 40, NULL((void*)0), 0x0000020000,
45733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45734
45735 {&hf_ieee80211_tag_snr_present,
45736 {"SNR Present", "wlan.beam_refine.snr_present",
45737 FT_BOOLEAN, 40, NULL((void*)0), 0x0000040000,
45738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45739
45740 {&hf_ieee80211_tag_channel_measurement_present,
45741 {"Channel Measurement Present", "wlan.beam_refine.ch_measure_present",
45742 FT_BOOLEAN, 40, NULL((void*)0), 0x0000080000,
45743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45744
45745 {&hf_ieee80211_tag_tap_delay_present,
45746 {"Tap Delay Present", "wlan.beam_refine.tap_delay_present",
45747 FT_BOOLEAN, 40, NULL((void*)0), 0x0000100000,
45748 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45749
45750 {&hf_ieee80211_tag_number_of_taps_present,
45751 {"Number of Taps Present", "wlan.beam_refine.taps_present",
45752 FT_UINT40, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(number_of_taps_values)((0 ? (const struct _val64_string*)0 : ((number_of_taps_values
))))
, 0x0000600000,
45753 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45754
45755 {&hf_ieee80211_tag_number_of_measurement,
45756 {"Number of Measurements", "wlan.beam_refine.num_measurement",
45757 FT_UINT40, BASE_DEC, NULL((void*)0), 0x003f800000,
45758 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45759
45760 {&hf_ieee80211_tag_sector_id_order_present,
45761 {"Sector ID Order Present", "wlan.beam_refine.sector_id_present",
45762 FT_BOOLEAN, 40, NULL((void*)0), 0x0040000000,
45763 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45764
45765 {&hf_ieee80211_tag_number_of_beams,
45766 {"Number of Beams", "wlan.beam_refine.num_beams",
45767 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0f80000000,
45768 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45769
45770 {&hf_ieee80211_tag_mid_extension,
45771 {"MID Extension", "wlan.beam_refine.mid_ext",
45772 FT_BOOLEAN, 40, NULL((void*)0), 0x1000000000,
45773 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45774
45775 {&hf_ieee80211_tag_capability_request,
45776 {"Capability Request", "wlan.beam_refine.cap_req",
45777 FT_BOOLEAN, 40, NULL((void*)0), 0x2000000000,
45778 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45779
45780 {&hf_ieee80211_tag_beam_refine_reserved,
45781 {"Reserved", "wlan.beam_refine.reserved",
45782 FT_UINT40, BASE_HEX, NULL((void*)0), 0xc000000000,
45783 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45784
45785 {&hf_ieee80211_tag_nextpcp_list,
45786 {"AID of NextPCP", "wlan.next_pcp.list",
45787 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45788 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45789
45790 {&hf_ieee80211_tag_nextpcp_token,
45791 {"NextPCP List Token", "wlan.next_pcp.token",
45792 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45793 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45794
45795 {&hf_ieee80211_tag_remaining_BI,
45796 {"Remaining BI's", "wlan.pcp_handover.remaining_BIs",
45797 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45798 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45799
45800 {&hf_ieee80211_tag_request_token,
45801 {"Request Token", "wlan.request_token",
45802 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45803 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45804
45805 {&hf_ieee80211_tag_bi_start_time,
45806 {"BI Start Time", "wlan.bi_start_time",
45807 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45808 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45809
45810 {&hf_ieee80211_tag_sleep_cycle,
45811 {"Sleep Cycle", "wlan.sleep_cycle",
45812 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45813 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45814
45815 {&hf_ieee80211_tag_num_awake_bis,
45816 {"Number of Awake/Doze BIs", "wlan.num_awake_bis",
45817 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45818 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45819
45820 {&hf_ieee80211_ff_dmg_action_code,
45821 {"DMG Action", "wlan.fixed.dmg_act",
45822 FT_UINT8, BASE_HEX, VALS(ff_dmg_action_flags)((0 ? (const struct _value_string*)0 : ((ff_dmg_action_flags)
)))
, 0,
45823 "Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45824
45825 {&hf_ieee80211_ff_unprotected_dmg_action_code,
45826 {"Unprotected DMG Action", "wlan.fixed.unprotected_dmg_act",
45827 FT_UINT8, BASE_HEX, VALS(ff_unprotected_dmg_action_flags)((0 ? (const struct _value_string*)0 : ((ff_unprotected_dmg_action_flags
))))
, 0,
45828 "Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45829
45830 {&hf_ieee80211_ff_dmg_pwr_mgmt,
45831 {"DMG Power Management", "wlan.dmg.pwr_mgmt",
45832 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
45833 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45834
45835 {&hf_ieee80211_ff_subject_address,
45836 {"Subject Address", "wlan.dmg.subject_addr",
45837 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
45838 "MAC address of requested STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45839
45840 {&hf_ieee80211_ff_handover_reason,
45841 {"Handover Reason", "wlan.dmg.handover_reason",
45842 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45843 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45844
45845 {&hf_ieee80211_ff_handover_remaining_bi,
45846 {"Handover Remaining BI", "wlan.dmg.handover_remaining_bi",
45847 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45848 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45849
45850 {&hf_ieee80211_ff_handover_result,
45851 {"Handover Result", "wlan.dmg.handover_result",
45852 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45853 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45854
45855 {&hf_ieee80211_ff_handover_reject_reason,
45856 {"Handover Reject Reason", "wlan.dmg.handover_reject_reason",
45857 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45858 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45859
45860 {&hf_ieee80211_ff_destination_reds_aid,
45861 {"Destination REDS AID", "wlan.dmg.destination_reds_aid",
45862 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45863 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45864
45865 {&hf_ieee80211_ff_destination_aid,
45866 {"Destination AID", "wlan.dmg.destination_aid",
45867 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45868 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45869
45870 {&hf_ieee80211_ff_relay_aid,
45871 {"Relay AID", "wlan.dmg.relay_aid",
45872 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45873 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45874
45875 {&hf_ieee80211_ff_source_aid,
45876 {"Source AID", "wlan.dmg.source_aid",
45877 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45878 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45879
45880 {&hf_ieee80211_ff_timing_offset,
45881 {"Timing Offset", "wlan.dmg.timing_offset",
45882 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45883 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45884
45885 {&hf_ieee80211_ff_sampling_frequency_offset,
45886 {"Sampling Frequency Offset", "wlan.dmg.sampling_frequency_offset",
45887 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45888 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45889
45890 {&hf_ieee80211_ff_relay_operation_type,
45891 {"Relay Operation Type", "wlan.dmg.relay_operation_type",
45892 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
45893 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45894
45895 {&hf_ieee80211_ff_peer_sta_aid,
45896 {"Peer STA AID", "wlan.dmg.peer_sta_aid",
45897 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45898 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45899
45900 {&hf_ieee80211_ff_snr,
45901 {"SNR", "wlan.dmg.snr",
45902 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
45903 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45904
45905 {&hf_ieee80211_ff_internal_angle,
45906 {"Internal Angle", "wlan.dmg.internal_angle",
45907 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfe,
45908 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45909
45910 {&hf_ieee80211_ff_recommend,
45911 {"Recommend", "wlan.dmg.recommend",
45912 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
45913 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45914
45915 {&hf_ieee80211_ff_fst_action_code,
45916 {"FST Action Code", "wlan.fst.action_code",
45917 FT_UINT8, BASE_HEX, VALS(ff_fst_action_flags)((0 ? (const struct _value_string*)0 : ((ff_fst_action_flags)
)))
, 0,
45918 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45919
45920 {&hf_ieee80211_ff_robust_av_streaming_action_code,
45921 {"Robust AV Streaming Action Code", "wlan.robust_av_streaming.action_code",
45922 FT_UINT8, BASE_HEX, VALS(ff_robust_av_streaming_action_flags)((0 ? (const struct _value_string*)0 : ((ff_robust_av_streaming_action_flags
))))
, 0,
45923 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45924
45925 {&hf_ieee80211_ff_llt,
45926 {"Link Loss Timeout", "wlan.fst.llt",
45927 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45928 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45929
45930 {&hf_ieee80211_ff_fsts_id,
45931 {"FSTS ID", "wlan.session_trans.fsts_id",
45932 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
45933 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45934
45935 {&hf_ieee80211_ff_mmpdu_len,
45936 {"MMPDU Length", "wlan.fst.mmpdu_length",
45937 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
45938 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45939
45940 {&hf_ieee80211_ff_mmpdu_ctrl,
45941 {"MMPDU Control", "wlan.fst.mmpdu_ctrl",
45942 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
45943 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45944
45945 {&hf_ieee80211_ff_oct_mmpdu,
45946 {"OCT MMPDU", "wlan.fst.oct_mmpdu",
45947 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
45948 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45949
45950 {&hf_ieee80211_ff_scs_scsid,
45951 {"SCSID", "wlan.scs.scs_status_list.scsid",
45952 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45953
45954 {&hf_ieee80211_ff_scs_status,
45955 {"Status", "wlan.scs.scs_status_list.status",
45956 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
45957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45958
45959 {&hf_ieee80211_ff_scs_response_count,
45960 {"Count", "wlan.scs.scs_response.count",
45961 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45962
45963 {&hf_ieee80211_ff_vht_mimo_cntrl,
45964 {"VHT MIMO Control", "wlan.vht.mimo_control.control",
45965 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
45966 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45967
45968 {&hf_ieee80211_ff_vht_mimo_cntrl_nc_index,
45969 {"Nc Index", "wlan.vht.mimo_control.ncindex",
45970 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,
45971 "Number of Columns Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45972
45973 {&hf_ieee80211_ff_vht_mimo_cntrl_nr_index,
45974 {"Nr Index", "wlan.vht.mimo_control.nrindex",
45975 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,
45976 "Number of Rows Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45977
45978 {&hf_ieee80211_ff_vht_mimo_cntrl_channel_width,
45979 {"Channel Width", "wlan.vht.mimo_control.chanwidth",
45980 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,
45981 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45982
45983 {&hf_ieee80211_ff_vht_mimo_cntrl_grouping,
45984 {"Grouping (Ng)", "wlan.vht.mimo_control.grouping",
45985 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_grouping_vals)((0 ? (const struct _value_string*)0 : ((ff_vht_mimo_cntrl_grouping_vals
))))
, 0x000300,
45986 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45987
45988 {&hf_ieee80211_ff_vht_mimo_cntrl_codebook_info,
45989 {"Codebook Information", "wlan.vht.mimo_control.codebookinfo",
45990 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000400,
45991 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45992
45993 {&hf_ieee80211_ff_vht_mimo_cntrl_feedback_type,
45994 {"Feedback Type", "wlan.vht.mimo_control.feedbacktype",
45995 FT_UINT24, BASE_HEX, VALS(ff_vht_mimo_cntrl_feedback_vals)((0 ? (const struct _value_string*)0 : ((ff_vht_mimo_cntrl_feedback_vals
))))
, 0x000800,
45996 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
45997
45998 {&hf_ieee80211_ff_vht_mimo_cntrl_remaining_feedback_seg,
45999 {"Remaining Feedback Segments", "wlan.vht.mimo_control.remainingfeedbackseg",
46000 FT_UINT24, BASE_HEX, NULL((void*)0), 0x007000,
46001 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46002
46003 {&hf_ieee80211_ff_vht_mimo_cntrl_first_feedback_seg,
46004 {"First Feedback Segments", "wlan.vht.mimo_control.firstfeedbackseg",
46005 FT_UINT24, BASE_HEX, NULL((void*)0), 0x008000,
46006 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46007
46008 {&hf_ieee80211_ff_vht_mimo_cntrl_reserved,
46009 {"Reserved", "wlan.vht.mimo_control.reserved",
46010 FT_UINT24, BASE_HEX, NULL((void*)0), 0x030000,
46011 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46012
46013 {&hf_ieee80211_ff_vht_mimo_cntrl_sounding_dialog_token_number,
46014 {"Sounding Dialog Token Number", "wlan.vht.mimo_control.sounding_dialog_token_nbr",
46015 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFC0000,
46016 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46017
46018 {&hf_ieee80211_ff_vht_action,
46019 {"VHT Action", "wlan.vht.action",
46020 FT_UINT8, BASE_DEC, VALS(vht_action_vals)((0 ? (const struct _value_string*)0 : ((vht_action_vals)))), 0,
46021 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46022
46023 {&hf_ieee80211_vht_compressed_beamforming_report,
46024 {"VHT Compressed Beamforming Report", "wlan.vht.compressed_beamforming_report",
46025 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
46026 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46027
46028 {&hf_ieee80211_vht_mu_exclusive_beamforming_report,
46029 {"VHT MU Exclusive Beamforming Report","wlan.vht.exclusive_beamforming_report",
46030 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
46031 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46032
46033 {&hf_ieee80211_vht_compressed_beamforming_report_snr,
46034 {"Signal to Noise Ratio (SNR)", "wlan.vht.compressed_beamforming_report.snr",
46035 FT_INT8, BASE_DEC, NULL((void*)0), 0,
46036 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46037
46038 {&hf_ieee80211_vht_compressed_beamform_scidx,
46039 {"SCIDX", "wlan.vht.compressed_beamforming_report.scidx",
46040 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46041
46042 {&hf_ieee80211_vht_mu_exclusive_beamforming_delta_snr,
46043 {"Delta SNR for space-time stream Nc for subcarrier k", "wlan.vht.exclusive_beamforming_report.delta_snr",
46044 FT_NONE, BASE_NONE, NULL((void*)0), 0,
46045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46046
46047 {&hf_ieee80211_vht_group_id_management,
46048 {"Group ID Management", "wlan.vht.group_id_management",
46049 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
46050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46051
46052 {&hf_ieee80211_vht_membership_status_array,
46053 {"Membership Status Array", "wlan.vht.membership_status_array",
46054 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
46055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46056
46057 {&hf_ieee80211_vht_user_position_array,
46058 {"User Position Array", "wlan.vht.user_position_array",
46059 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
46060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46061
46062 {&hf_ieee80211_vht_membership_status_field,
46063 {"Membership Status Field", "wlan.vht.membership_status_array.field",
46064 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46066
46067 {&hf_ieee80211_vht_user_position_field,
46068 {"User Position Field", "wlan.vht.user_position_array.field",
46069 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46071
46072 {&hf_ieee80211_vht_operation_mode_notification,
46073 {"Operation Mode Notification", "wlan.vht.operation_mode_notification",
46074 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
46075 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46076
46077 {&hf_ieee80211_ff_he_action,
46078 {"HE Action", "wlan.he.action",
46079 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(he_action_rvals)((0 ? (const struct _range_string*)0 : ((he_action_rvals)))), 0,
46080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46081
46082 {&hf_ieee80211_ff_protected_he_action,
46083 {"Protected HE Action", "wlan.he.protected_action",
46084 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(protected_he_action_rvals)((0 ? (const struct _range_string*)0 : ((protected_he_action_rvals
))))
, 0,
46085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46086
46087 {&hf_ieee80211_ff_protected_eht_action,
46088 {"Protected EHT Action", "wlan.eht.protected_action",
46089 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(protected_eht_action_rvals)((0 ? (const struct _range_string*)0 : ((protected_eht_action_rvals
))))
, 0,
46090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46091
46092 {&hf_ieee80211_ff_protected_ftm_action,
46093 {"Protected FTM Action", "wlan.ftm.protected_action",
46094 FT_UINT8, BASE_DEC, VALS(protected_ftm_action_vals)((0 ? (const struct _value_string*)0 : ((protected_ftm_action_vals
))))
, 0,
46095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46096
46097 {&hf_ieee80211_ff_eht_action,
46098 {"EHT Action", "wlan.eht.action",
46099 FT_UINT8, BASE_RANGE_STRING0x00000100 | BASE_DEC, RVALS(eht_action_rvals)((0 ? (const struct _range_string*)0 : ((eht_action_rvals)))), 0,
46100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46101
46102 {&hf_ieee80211_he_mimo_control_nc_index,
46103 {"Nc Index", "wlan.he.mimo.nc_index",
46104 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
))))
,
46105 0x0000000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46106
46107 {&hf_ieee80211_he_mimo_control_nr_index,
46108 {"Nr Index", "wlan.he.mimo.nr_index",
46109 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
))))
,
46110 0x0000000038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46111
46112 {&hf_ieee80211_he_mimo_control_bw,
46113 {"BW", "wlan.he.mimo.bw",
46114 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46115
46116 {&hf_ieee80211_he_mimo_control_grouping,
46117 {"Grouping", "wlan.he.mimo.grouping",
46118 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(he_mimo_cntrl_grouping_flags)((0 ? (const struct _val64_string*)0 : ((he_mimo_cntrl_grouping_flags
))))
,
46119 0x0000000100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46120
46121 {&hf_ieee80211_he_mimo_control_codebook_info,
46122 {"Codebook Information", "wlan.he.mimo.codebook_info",
46123 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46124
46125 {&hf_ieee80211_he_mimo_control_feedback_type,
46126 {"Feedback Type", "wlan.he.mimo.feedback_type",
46127 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(he_mimo_cntrl_feedback_vals)((0 ? (const struct _val64_string*)0 : ((he_mimo_cntrl_feedback_vals
))))
,
46128 0x0000000C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46129
46130 {&hf_ieee80211_he_mimo_control_remaining_feedback_segs,
46131 {"Remaining Feedback Segments", "wlan.he.mimo.remaining_feedback_segs",
46132 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46133
46134 {&hf_ieee80211_he_mimo_control_first_feedback_seg,
46135 {"First Feedback Segment", "wlan.he.mimo.first_feedback_seg",
46136 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46137
46138 {&hf_ieee80211_he_mimo_control_ru_start_index,
46139 {"RU Start Index", "wlan.he.mimo.ru_start_index",
46140 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00007F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46141
46142 {&hf_ieee80211_he_mimo_control_ru_end_index,
46143 {"RU End Index", "wlan.he.mimo.ru_end_index",
46144 FT_UINT40, BASE_HEX, NULL((void*)0), 0x003F800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46145
46146 {&hf_ieee80211_he_mimo_control_sounding_dialog_token_num,
46147 {"Sounding Dialog Token Number", "wlan.he.mimo.sounding_dialog_token_num",
46148 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0FC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46149
46150 {&hf_ieee80211_he_mimo_control_reserved,
46151 {"Reserved", "wlan.he.mimo.reserved",
46152 FT_UINT40, BASE_HEX, NULL((void*)0), 0xF000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46153
46154 {&hf_ieee80211_he_mimo_control_field,
46155 {"HE MIMO Control", "wlan.he.action.he_mimo_control",
46156 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46157
46158 {&hf_ieee80211_he_compressed_beamforming_report_snr,
46159 {"AvgSNR", "wlan.he.mimo.beamforming_report.avgsnr",
46160 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46161
46162 {&hf_ieee80211_he_compressed_beamform_scidx,
46163 {"SCIDX", "wlan.he.action.he_mimo_control.scidx",
46164 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46165
46166 {&hf_ieee80211_he_beamforming_report_len,
46167 {"Report Len", "wlan.he.action.he_mimo_control.report_len",
46168 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46169
46170 {&hf_ieee80211_tag_tspec_allocation_id,
46171 {"Allocation ID", "wlan.dmg_tspec.allocation_id",
46172 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000f,
46173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46174
46175 {&hf_ieee80211_tag_tspec_allocation_type,
46176 {"Allocation Type", "wlan.dmg_tspec.allocation_type",
46177 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000070,
46178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46179
46180 {&hf_ieee80211_tag_tspec_allocation_format,
46181 {"Allocation Format", "wlan.dmg_tspec.allocation_format",
46182 FT_BOOLEAN, 24, NULL((void*)0), 0x000080,
46183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46184
46185 {&hf_ieee80211_tag_tspec_pseudo_static,
46186 {"Pseudo Static", "wlan.dmg_tspec.pseudo_static",
46187 FT_BOOLEAN, 24, NULL((void*)0), 0x000100,
46188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46189
46190 {&hf_ieee80211_tag_tspec_truncatable,
46191 {"Truncatable", "wlan.dmg_tspec.truncatable",
46192 FT_BOOLEAN, 24, NULL((void*)0), 0x000200,
46193 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46194
46195 {&hf_ieee80211_tag_tspec_extendable,
46196 {"Extendable", "wlan.dmg_tspec.extendable",
46197 FT_BOOLEAN, 24, NULL((void*)0), 0x000400,
46198 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46199
46200 {&hf_ieee80211_tag_tspec_lp_sc_used,
46201 {"LP SC Usec", "wlan.dmg_tspec.lp_sc_used",
46202 FT_BOOLEAN, 24, NULL((void*)0), 0x000800,
46203 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46204
46205 {&hf_ieee80211_tag_tspec_up,
46206 {"UP", "wlan.dmg_tspec.up",
46207 FT_UINT24, BASE_HEX, NULL((void*)0), 0x007000,
46208 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46209
46210 {&hf_ieee80211_tag_tspec_dest_aid,
46211 {"Destination AID", "wlan.dmg_tspec.dest_aid",
46212 FT_UINT24, BASE_HEX, NULL((void*)0), 0x7f8000,
46213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46214
46215 {&hf_ieee80211_tag_tspec_allocation_period,
46216 {"Allocation Period", "wlan.dmg_tspec.allocation_period",
46217 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46218 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46219
46220 {&hf_ieee80211_tag_tspec_min_allocation,
46221 {"Minimal Allocation", "wlan.dmg_tspec.min_allocation",
46222 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46223 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46224
46225 {&hf_ieee80211_tag_tspec_max_allocation,
46226 {"Maximal Allocation", "wlan.dmg_tspec.max_allocation",
46227 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46228 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46229
46230 {&hf_ieee80211_tag_tspec_min_duration,
46231 {"Minimal Duration", "wlan.dmg_tspec.min_duration",
46232 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46233 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46234
46235 {&hf_ieee80211_tag_tspec_num_of_constraints,
46236 {"Number Of Constraints", "wlan.dmg_tspec.num_of_constraints",
46237 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46238 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46239
46240 {&hf_ieee80211_tag_tspec_tsconst_start_time,
46241 {"TS Constraint Start Time", "wlan.dmg_tspec.tsconst.start_time",
46242 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
46243 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46244
46245 {&hf_ieee80211_tag_tspec_tsconst_duration,
46246 {"TS Constraint Duration", "wlan.dmg_tspec.tsconst.duration",
46247 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46248 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46249
46250 {&hf_ieee80211_tag_tspec_tsconst_period,
46251 {"TS Constraint Period", "wlan.dmg_tspec.tsconst.period",
46252 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46253 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46254
46255 {&hf_ieee80211_tag_tspec_tsconst_interferer_mac,
46256 {"TS Constraint Interferer MAC Address", "wlan.dmg_tspec.tsconst.interferer_mac",
46257 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
46258 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46259
46260 {&hf_ieee80211_tag_channel_measurement_feedback_relative_I,
46261 {"Channel Measurement Feedback Relative I", "wlan.ch_meas_fb.relative_I",
46262 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46263 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46264
46265 {&hf_ieee80211_tag_channel_measurement_feedback_relative_Q,
46266 {"Channel Measurement Feedback Relative Q", "wlan.ch_meas_fb.relative_Q",
46267 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46268 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46269
46270 {&hf_ieee80211_tag_channel_measurement_feedback_tap_delay,
46271 {"Channel Measurement Feedback Tap Delay", "wlan.ch_meas_fb.tap_delay",
46272 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46273 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46274
46275 {&hf_ieee80211_tag_channel_measurement_feedback_sector_id,
46276 {"Channel Measurement Feedback Sector ID", "wlan.ch_meas_fb.sector_id",
46277 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfc,
46278 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46279
46280 {&hf_ieee80211_tag_channel_measurement_feedback_antenna_id,
46281 {"Channel Measurement Feedback Antenna ID", "wlan.ch_meas_fb.antenna_id",
46282 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
46283 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46284
46285 {&hf_ieee80211_tag_awake_window,
46286 {"Awake Window", "wlan.awake_window",
46287 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
46288 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46289
46290 {&hf_ieee80211_tag_addba_ext_no_frag,
46291 {"ADDBA No Fragmentation", "wlan.addba.no_frag",
46292 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
46293 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46294
46295 {&hf_ieee80211_tag_addba_ext_he_fragmentation_operation,
46296 {"ADDBA HE Fragmentation Operation", "wlan.addba.he_frag_oper",
46297 FT_UINT8, BASE_HEX, NULL((void*)0), 0x06,
46298 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46299
46300 {&hf_ieee80211_tag_addba_ext_reserved,
46301 {"Reserved", "wlan.addba.reserved",
46302 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18,
46303 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46304
46305 {&hf_ieee80211_tag_addba_ext_buffer_size,
46306 {"Extended Buffer Size", "wlan.addba.extended_buffer_size",
46307 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46308
46309 {&hf_ieee80211_tag_multi_band_ctrl_sta_role,
46310 {"STA Rold", "wlan.multi_band.ctrl_sta_role",
46311 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
46312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46313
46314 {&hf_ieee80211_tag_multi_band_ctrl_addr_present,
46315 {"STA MAC Address Present", "wlan.multi_band.ctrl_addr_present",
46316 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
46317 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46318
46319 {&hf_ieee80211_tag_multi_band_ctrl_cipher_present,
46320 {"PCS Present", "wlan.multi_band.ctrl_cipher_present",
46321 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
46322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46323
46324 {&hf_ieee80211_tag_multi_band_oper_class,
46325 {"Operating Class", "wlan.multi_band.oper_class",
46326 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46328
46329 {&hf_ieee80211_tag_multi_band_channel_number,
46330 {"Channel Number", "wlan.multi_band.channel_number",
46331 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46333
46334 {&hf_ieee80211_tag_multi_band_tsf_offset,
46335 {"TSF Offset", "wlan.multi_band.tsf_offset",
46336 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
46337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46338
46339 {&hf_ieee80211_tag_multi_band_conn_ap,
46340 {"Connection Capability AP", "wlan.multi_band.conn_ap",
46341 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
46342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46343
46344 {&hf_ieee80211_tag_multi_band_conn_pcp,
46345 {"Connection Capability PCP", "wlan.multi_band.conn_pcp",
46346 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
46347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46348
46349 {&hf_ieee80211_tag_multi_band_conn_dls,
46350 {"Connection Capability DLS", "wlan.multi_band.conn_dls",
46351 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
46352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46353
46354 {&hf_ieee80211_tag_multi_band_conn_tdls,
46355 {"Connection Capability TDLS", "wlan.multi_band.conn_tdls",
46356 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
46357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46358
46359 {&hf_ieee80211_tag_multi_band_conn_ibss,
46360 {"Connection Capability IBSS", "wlan.multi_band.conn_ibss",
46361 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
46362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46363
46364 {&hf_ieee80211_tag_multi_band_fst_timeout,
46365 {"FST Session Timeout", "wlan.multi_band.fst_timeout",
46366 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46368
46369 {&hf_ieee80211_tag_multi_band_sta_mac,
46370 {"Transmitting STA MAC Address", "wlan.multi_band.sta_mac",
46371 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
46372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46373
46374 {&hf_ieee80211_tag_activity,
46375 {"Activity", "wlan.activity",
46376 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46377 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46378
46379 {&hf_ieee80211_tag_dmg_link_adapt_mcs,
46380 {"MCS", "wlan.dmg_link_adapt.mcs",
46381 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46382 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46383
46384 {&hf_ieee80211_tag_dmg_link_adapt_link_margin,
46385 {"Link Margin", "wlan.dmg_link_adapt.link_margin",
46386 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46387 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46388
46389 {&hf_ieee80211_tag_ref_timestamp,
46390 {"Reference Timestamp", "wlan.ref_timestamp",
46391 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
46392 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46393
46394 {&hf_ieee80211_tag_switching_stream_non_qos,
46395 {"Non-Qos Data Frames", "wlan.switching_stream.non_qos",
46396 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0,
46397 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46398
46399 {&hf_ieee80211_tag_switching_stream_param_num,
46400 {"Number Of Switching Stream Elements", "wlan.switching_stream.param_num",
46401 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46402 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46403
46404 {&hf_ieee80211_tag_switching_stream_old_tid,
46405 {"Old Band TID", "wlan.switching_stream.old_tid",
46406 FT_UINT16, BASE_DEC, NULL((void*)0), 0xf000,
46407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46408
46409 {&hf_ieee80211_tag_switching_stream_old_direction,
46410 {"Old Band Direction", "wlan.switching_stream.old_direction",
46411 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
46412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46413
46414 {&hf_ieee80211_tag_switching_stream_new_tid,
46415 {"New Band TID", "wlan.switching_stream.new_tid",
46416 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0780,
46417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46418
46419 {&hf_ieee80211_tag_switching_stream_new_direction,
46420 {"New Band Direction", "wlan.switching_stream.new_direction",
46421 FT_BOOLEAN, 16, NULL((void*)0), 0x0040,
46422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46423
46424 {&hf_ieee80211_tag_switching_stream_new_valid_id,
46425 {"Stream ID in New Band Valid", "wlan.switching_stream.new_valid_id",
46426 FT_BOOLEAN, 16, NULL((void*)0), 0x0020,
46427 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46428
46429 {&hf_ieee80211_tag_switching_stream_llt_type,
46430 {"LLT Type", "wlan.switching_stream.llt_type",
46431 FT_BOOLEAN, 16, NULL((void*)0), 0x0010,
46432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46433
46434 {&hf_ieee80211_ff_timestamp,
46435 {"Timestamp", "wlan.fixed.timestamp",
46436 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
46437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46438
46439 {&hf_ieee80211_ff_auth_alg,
46440 {"Authentication Algorithm", "wlan.fixed.auth.alg",
46441 FT_UINT16, BASE_DEC, VALS(auth_alg)((0 ? (const struct _value_string*)0 : ((auth_alg)))), 0,
46442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46443
46444 {&hf_ieee80211_ff_beacon_interval,
46445 {"Beacon Interval", "wlan.fixed.beacon",
46446 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
46447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46448
46449 {&hf_ieee80211_fixed_parameters,
46450 {"Fixed parameters", "wlan.fixed.all",
46451 FT_NONE, BASE_NONE, NULL((void*)0), 0,
46452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46453
46454 {&hf_ieee80211_tagged_parameters,
46455 {"Tagged parameters", "wlan.tagged.all",
46456 FT_NONE, BASE_NONE, NULL((void*)0), 0,
46457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46458
46459 {&hf_ieee80211_tag_ssid,
46460 {"SSID", "wlan.ssid",
46461 FT_BYTES, BASE_SHOW_UTF_8_PRINTABLE0x00020000, NULL((void*)0), 0,
46462 "Indicates the identity of an ESS or IBSS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46463
46464 {&hf_ieee80211_tag_supp_rates,
46465 {"Supported Rates", "wlan.supported_rates",
46466 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_supported_rates_vals_ext, 0x0,
46467 "In Mbit/sec, (B) for Basic Rates", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46468
46469 {&hf_ieee80211_tag_fh_dwell_time,
46470 {"Dwell Time", "wlan.fh.dwell_time",
46471 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
46472 "In Time Unit (TU)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46473
46474 {&hf_ieee80211_tag_fh_hop_set,
46475 {"Hop Set", "wlan.fh.hop_set",
46476 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46478
46479 {&hf_ieee80211_tag_fh_hop_pattern,
46480 {"Hop Pattern", "wlan.fh.hop_pattern",
46481 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46483
46484 {&hf_ieee80211_tag_fh_hop_index,
46485 {"Hop Index", "wlan.fh.hop_index",
46486 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
46487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46488
46489 {&hf_ieee80211_ff_block_ack_params,
46490 {"Block Ack Parameters", "wlan.fixed.baparams",
46491 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46492 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46493
46494 {&hf_ieee80211_ff_block_ack_params_amsdu_permitted,
46495 {"A-MSDUs", "wlan.fixed.baparams.amsdu",
46496 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,
46497 "A-MSDU Permitted in QoS Data MPDUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46498
46499 {&hf_ieee80211_ff_block_ack_params_policy,
46500 {"Block Ack Policy", "wlan.fixed.baparams.policy",
46501 FT_BOOLEAN, 16, TFS(&ff_block_ack_params_policy_flag)((0 ? (const struct true_false_string*)0 : ((&ff_block_ack_params_policy_flag
))))
, 0x0002,
46502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46503
46504 {&hf_ieee80211_ff_block_ack_params_tid,
46505 {"Traffic Identifier", "wlan.fixed.baparams.tid",
46506 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C,
46507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46508
46509 {&hf_ieee80211_ff_block_ack_params_buffer_size,
46510 {"Number of Buffers (1 Buffer = 2304 Bytes)", "wlan.fixed.baparams.buffersize",
46511 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFC0,
46512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46513
46514 {&hf_ieee80211_ff_block_ack_timeout,
46515 {"Block Ack Timeout", "wlan.fixed.batimeout",
46516 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46518
46519 {&hf_ieee80211_ff_block_ack_ssc,
46520 {"Block Ack Starting Sequence Control (SSC)", "wlan.fixed.ssc",
46521 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46523
46524 {&hf_ieee80211_ff_block_ack_ssc_fragment,
46525 {"Fragment", "wlan.fixed.ssc.fragment",
46526 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000f,
46527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46528
46529 {&hf_ieee80211_ff_block_ack_ssc_sequence,
46530 {"Starting Sequence Number", "wlan.fixed.ssc.sequence",
46531 FT_UINT16, BASE_DEC, NULL((void*)0), 0xfff0,
46532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46533
46534 {&hf_ieee80211_ff_delba_param,
46535 {"Delete Block Ack (DELBA) Parameter Set", "wlan.fixed.delba.param",
46536 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46538
46539 {&hf_ieee80211_ff_delba_param_reserved,
46540 {"Reserved", "wlan.fixed.delba.param.reserved",
46541 FT_UINT16, BASE_HEX, NULL((void*)0), 0x07ff,
46542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46543
46544 {&hf_ieee80211_ff_delba_param_init,
46545 {"Initiator", "wlan.fixed.delba.param.initiator",
46546 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
46547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46548
46549 {&hf_ieee80211_ff_delba_param_tid,
46550 {"TID", "wlan.fixed.delba.param.tid",
46551 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
46552 "Traffic Identifier (TID)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46553
46554 {&hf_ieee80211_ff_max_reg_pwr,
46555 {"Maximum Regulation Power", "wlan.fixed.maxregpwr",
46556 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46558
46559 {&hf_ieee80211_ff_measurement_pilot_int,
46560 {"Measurement Pilot Interval", "wlan.fixed.msmtpilotint",
46561 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
46562 "Measurement Pilot Interval Fixed Field (in TUs)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46563
46564 {&hf_ieee80211_ff_country_str,
46565 {"Country String", "wlan.fixed.country",
46566 FT_STRING, BASE_NONE, NULL((void*)0), 0,
46567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46568
46569 {&hf_ieee80211_ff_max_tx_pwr,
46570 {"Maximum Transmit Power", "wlan.fixed.maxtxpwr",
46571 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46573
46574 {&hf_ieee80211_ff_tx_pwr_used,
46575 {"Transmit Power Used", "wlan.fixed.txpwr",
46576 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46578
46579 {&hf_ieee80211_ff_transceiver_noise_floor,
46580 {"Transceiver Noise Floor", "wlan.fixed.tnoisefloor",
46581 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46583
46584 {&hf_ieee80211_ff_channel_width,
46585 {"Supported Channel Width", "wlan.fixed.chanwidth",
46586 FT_UINT8, BASE_HEX, VALS(ff_channel_width_vals)((0 ? (const struct _value_string*)0 : ((ff_channel_width_vals
))))
, 0,
46587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46588
46589 {&hf_ieee80211_ff_qos_info_ap,
46590 {"QoS Information (AP)", "wlan.fixed.qosinfo.ap",
46591 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46593
46594 {&hf_ieee80211_ff_qos_info_ap_edca_param_set_counter,
46595 {"EDCA Parameter Set Update Count", "wlan.fixed.qosinfo.ap.edcaupdate",
46596 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F,
46597 "Enhanced Distributed Channel Access (EDCA) Parameter Set Update Count", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46598
46599 {&hf_ieee80211_ff_qos_info_ap_q_ack,
46600 {"Q-Ack", "wlan.fixed.qosinfo.ap.qack",
46601 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,
46602 "QoS Ack", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46603
46604 {&hf_ieee80211_ff_qos_info_ap_queue_req,
46605 {"Queue Request", "wlan.fixed.qosinfo.ap.queue_req",
46606 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,
46607 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46608
46609 {&hf_ieee80211_ff_qos_info_ap_txop_request,
46610 {"TXOP Request", "wlan.fixed.qosinfo.ap.txopreq",
46611 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,
46612 "Transmit Opportunity (TXOP) Request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46613
46614 {&hf_ieee80211_ff_qos_info_ap_more_data_ack,
46615 {"More Data Ack", "wlan.fixed.qosinfo.ap.more_data_ack",
46616 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
46617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46618
46619 {&hf_ieee80211_ff_qos_info_sta,
46620 {"QoS Information (STA)", "wlan.fixed.qosinfo.sta",
46621 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46622 "TCLAS Processing", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46623
46624 {&hf_ieee80211_ff_qos_info_sta_ac_vo,
46625 {"AC_VO U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vo",
46626 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x01,
46627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46628
46629 {&hf_ieee80211_ff_qos_info_sta_ac_vi,
46630 {"AC_VI U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_vi",
46631 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x02,
46632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46633
46634 {&hf_ieee80211_ff_qos_info_sta_ac_bk,
46635 {"AC_BK U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_bk",
46636 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x04,
46637 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46638
46639 {&hf_ieee80211_ff_qos_info_sta_ac_be,
46640 {"AC_BE U-APSD Flag", "wlan.fixed.qosinfo.sta.ac_be",
46641 FT_BOOLEAN, 8, TFS(&ff_qos_info_sta_ac_flag)((0 ? (const struct true_false_string*)0 : ((&ff_qos_info_sta_ac_flag
))))
, 0x08,
46642 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46643
46644 {&hf_ieee80211_ff_qos_info_sta_q_ack,
46645 {"Q-Ack", "wlan.fixed.qosinfo.sta.qack",
46646 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,
46647 "QoS Ack", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46648
46649 {&hf_ieee80211_ff_qos_info_sta_max_sp_length,
46650 {"Max SP Length", "wlan.fixed.qosinfo.sta.max_sp_length",
46651 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,
46652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46653
46654 {&hf_ieee80211_ff_qos_info_sta_more_data_ack,
46655 {"More Data Ack", "wlan.fixed.qosinfo.sta.more_data_ack",
46656 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,
46657 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46658
46659 {&hf_ieee80211_ff_sm_pwr_save,
46660 {"Spatial Multiplexing (SM) Power Control", "wlan.fixed.sm.powercontrol",
46661 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46662 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46663
46664 {&hf_ieee80211_ff_sm_pwr_save_enabled,
46665 {"SM Power Save", "wlan.fixed.sm.powercontrol.enabled",
46666 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
46667 "Spatial Multiplexing (SM) Power Save", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46668
46669 {&hf_ieee80211_ff_sm_pwr_save_sm_mode,
46670 {"SM Mode", "wlan.fixed.sm.powercontrol.mode",
46671 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,
46672 "Spatial Multiplexing (SM) Mode", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46673
46674 {&hf_ieee80211_ff_sm_pwr_save_reserved,
46675 {"Reserved", "wlan.fixed.sm.powercontrol.reserved",
46676 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC,
46677 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46678
46679 {&hf_ieee80211_ff_pco_phase_cntrl,
46680 {"Phased Coexistence Operation (PCO) Phase Control", "wlan.fixed.pco.phasecntrl",
46681 FT_BOOLEAN, BASE_NONE, TFS(&ff_pco_phase_cntrl_flag)((0 ? (const struct true_false_string*)0 : ((&ff_pco_phase_cntrl_flag
))))
, 0x0,
46682 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46683
46684 {&hf_ieee80211_ff_psmp_param_set,
46685 {"Power Save Multi-Poll (PSMP) Parameter Set", "wlan.fixed.psmp.paramset",
46686 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
46687 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46688
46689 {&hf_ieee80211_ff_psmp_param_set_n_sta,
46690 {"Number of STA Info Fields Present", "wlan.fixed.psmp.paramset.nsta",
46691 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000F,
46692 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46693
46694 {&hf_ieee80211_ff_psmp_param_set_more_psmp,
46695 {"More PSMP", "wlan.fixed.psmp.paramset.more",
46696 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,
46697 "More Power Save Multi-Poll (PSMP)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46698
46699 {&hf_ieee80211_ff_psmp_param_set_psmp_sequence_duration,
46700 {"PSMP Sequence Duration [us]", "wlan.fixed.psmp.paramset.seqduration",
46701 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFE0,
46702 "Power Save Multi-Poll (PSMP) Sequence Duration", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46703
46704 {&hf_ieee80211_ff_mimo_cntrl,
46705 {"MIMO Control", "wlan.fixed.mimo.control",
46706 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
46707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46708
46709 {&hf_ieee80211_ff_mimo_cntrl_nc_index,
46710 {"Nc Index", "wlan.fixed.mimo.control.ncindex",
46711 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nc_index_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_nc_index_flags
))))
, 0x0003,
46712 "Number of Columns Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46713
46714 {&hf_ieee80211_ff_mimo_cntrl_nr_index,
46715 {"Nr Index", "wlan.fixed.mimo.control.nrindex",
46716 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_nr_index_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_nr_index_flags
))))
, 0x000C,
46717 "Number of Rows Less One", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46718
46719 {&hf_ieee80211_ff_mimo_cntrl_channel_width,
46720 {"Channel Width", "wlan.fixed.mimo.control.chanwidth",
46721 FT_BOOLEAN, 16, TFS(&ff_mimo_cntrl_channel_width_flag)((0 ? (const struct true_false_string*)0 : ((&ff_mimo_cntrl_channel_width_flag
))))
, 0x0010,
46722 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46723
46724 {&hf_ieee80211_ff_mimo_cntrl_grouping,
46725 {"Grouping (Ng)", "wlan.fixed.mimo.control.grouping",
46726 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_grouping_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_grouping_flags
))))
, 0x0060,
46727 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46728
46729 {&hf_ieee80211_ff_mimo_cntrl_coefficient_size,
46730 {"Coefficient Size (Nb)", "wlan.fixed.mimo.control.cosize",
46731 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_coefficient_size_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_coefficient_size_flags
))))
, 0x0180,
46732 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46733
46734 {&hf_ieee80211_ff_mimo_cntrl_codebook_info,
46735 {"Codebook Information", "wlan.fixed.mimo.control.codebookinfo",
46736 FT_UINT16, BASE_HEX, VALS(ff_mimo_cntrl_codebook_info_flags)((0 ? (const struct _value_string*)0 : ((ff_mimo_cntrl_codebook_info_flags
))))
, 0x0600,
46737 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46738
46739 {&hf_ieee80211_ff_mimo_cntrl_remaining_matrix_segment,
46740 {"Remaining Matrix Segment", "wlan.fixed.mimo.control.matrixseg",
46741 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3800,
46742 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46743
46744 {&hf_ieee80211_ff_mimo_cntrl_reserved,
46745 {"Reserved", "wlan.fixed.mimo.control.reserved",
46746 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000,
46747 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46748
46749 {&hf_ieee80211_ff_mimo_cntrl_sounding_timestamp,
46750 {"Sounding Timestamp", "wlan.fixed.mimo.control.soundingtime",
46751 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
46752 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46753
46754 {&hf_ieee80211_ff_ftm_param_delim1,
46755 {"FTM Params (Subset 1 of 3)", "wlan.fixed.ftm.param.delim1",
46756 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
46757 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46758
46759 {&hf_ieee80211_ff_ftm_param_status_indication,
46760 {"Status Indication", "wlan.fixed.ftm.param.status_indication",
46761 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0003,
46762 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46763
46764 {&hf_ieee80211_ff_ftm_param_value,
46765 {"Value", "wlan.fixed.ftm.param.value",
46766 FT_UINT16, BASE_HEX, NULL((void*)0), 0x007C,
46767 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46768
46769 {&hf_ieee80211_ff_ftm_param_reserved1,
46770 {"Reserved1", "wlan.fixed.ftm.param.reserved1",
46771 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0080,
46772 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46773
46774 {&hf_ieee80211_ff_ftm_param_burst_exponent,
46775 {"Number of Burst Exponent", "wlan.fixed.ftm.param.burst_exponent",
46776 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0F00,
46777 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46778
46779 {&hf_ieee80211_ff_ftm_param_burst_duration,
46780 {"Burst Duration", "wlan.fixed.ftm.param.burst_duration",
46781 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
46782 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46783
46784 {&hf_ieee80211_ff_ftm_param_delim2,
46785 {"FTM Params (Subset 2 of 3)", "wlan.fixed.ftm.param.delim2",
46786 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
46787 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46788
46789 {&hf_ieee80211_ff_ftm_param_min_delta_ftm,
46790 {"Min Delta FTM", "wlan.fixed.ftm.param.min_delta_ftm",
46791 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000FF,
46792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46793
46794 {&hf_ieee80211_ff_ftm_param_partial_tsf_timer,
46795 {"Partial TSF timer", "wlan.fixed.ftm.param.partial_tsf_timer",
46796 FT_UINT32, BASE_CUSTOM, CF_FUNC(partial_tsf_custom)((const void *) (size_t) (partial_tsf_custom)), 0x00FFFF00,
46797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46798
46799 {&hf_ieee80211_ff_ftm_param_partial_tsf_no_pref,
46800 {"Partial TSF no pref", "wlan.fixed.ftm.param.partial_tsf_no_pref",
46801 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01000000,
46802 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46803
46804 {&hf_ieee80211_ff_ftm_param_asap_capable,
46805 {"ASAP Capable", "wlan.fixed.ftm.param.asap_capable",
46806 FT_UINT32, BASE_HEX, NULL((void*)0), 0x02000000,
46807 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46808
46809 {&hf_ieee80211_ff_ftm_param_asap,
46810 {"ASAP", "wlan.fixed.ftm.param.asap",
46811 FT_UINT32, BASE_HEX, NULL((void*)0), 0x04000000,
46812 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46813
46814 {&hf_ieee80211_ff_ftm_param_ftm_per_burst,
46815 {"FTM per burst", "wlan.fixed.ftm.param.ftm_per_burst",
46816 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF8000000,
46817 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46818
46819 {&hf_ieee80211_ff_ftm_param_delim3,
46820 {"FTM Params (Subset 3 of 3)", "wlan.fixed.ftm.param.delim3",
46821 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0,
46822 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46823
46824 {&hf_ieee80211_ff_ftm_param_reserved2,
46825 {"Reserved2", "wlan.fixed.ftm.param.reserved2",
46826 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000003,
46827 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46828
46829 {&hf_ieee80211_ff_ftm_param_format_and_bw,
46830 {"Format and Bandwidth", "wlan.fixed.ftm.param.format_and_bw",
46831 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0000FC,
46832 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46833
46834 {&hf_ieee80211_ff_ftm_param_burst_period,
46835 {"Burst Period", "wlan.fixed.ftm.param.burst_period",
46836 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFFF00,
46837 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46838
46839 {&hf_ieee80211_ff_ftm_tod_err1,
46840 {"FTM TOD Error", "wlan.fixed.ftm.tod_error",
46841 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
46842 "Management action FTM LMR TOD Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46843
46844 /* az: Ranging Parameters element */
46845
46846 {&hf_ieee80211_tag_ranging_parameters,
46847 {"Ranging Parameters", "wlan.ranging",
46848 FT_UINT56, BASE_HEX, NULL((void*)0), 0,
46849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46850
46851 {&hf_ieee80211_tag_ranging_subelt_tag,
46852 {"Subelement Tag", "wlan.tag.ranging.subelt_tag",
46853 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46854
46855 {&hf_ieee80211_tag_ranging_subelt_len,
46856 {"Subelement Len", "wlan.tag.ranging.subelt_len",
46857 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46858
46859 {&hf_ieee80211_tag_ranging_status_indication,
46860 {"Status Indication", "wlan.ranging.status",
46861 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)),
46862 "Status Indication", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46863
46864 {&hf_ieee80211_tag_ranging_value,
46865 {"Value", "wlan.ranging.value",
46866 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(6, 2)(((1U << ((6) - (2) + 1)) - 1) << (2)),
46867 "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) }},
46868
46869 {&hf_ieee80211_tag_ranging_i2r_lmr_feedback,
46870 {"I2R LMR Feedback", "wlan.ranging.i2r_lmr_feedback",
46871 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(7, 7)(((1U << ((7) - (7) + 1)) - 1) << (7)),
46872 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46873
46874 {&hf_ieee80211_tag_ranging_secure_ltf_required,
46875 {"Secure LTF Required", "wlan.ranging.secure_ltf_required",
46876 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(8, 8)(((1U << ((8) - (8) + 1)) - 1) << (8)),
46877 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46878
46879 {&hf_ieee80211_tag_ranging_secure_ltf_support,
46880 {"Secure LTF Support", "wlan.ranging.secure_ltf_support",
46881 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(9, 9)(((1U << ((9) - (9) + 1)) - 1) << (9)),
46882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46883
46884 {&hf_ieee80211_tag_ranging_ranging_priority,
46885 {"Ranging Priority", "wlan.ranging.priority",
46886 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(11, 10)(((1U << ((11) - (10) + 1)) - 1) << (10)),
46887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46888
46889 {&hf_ieee80211_tag_ranging_r2i_toa_type,
46890 {"R2I TOA Type", "wlan.ranging.r2i_toa_type",
46891 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(12, 12)(((1U << ((12) - (12) + 1)) - 1) << (12)),
46892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46893
46894 {&hf_ieee80211_tag_ranging_i2r_toa_type,
46895 {"I2R TOA Type", "wlan.ranging.i2r_toa_type",
46896 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(13, 13)(((1U << ((13) - (13) + 1)) - 1) << (13)),
46897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46898
46899 {&hf_ieee80211_tag_ranging_r2i_aoa_requested,
46900 {"R2I AOA Requested", "wlan.ranging.r2i_aoa_requested",
46901 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(14, 14)(((1U << ((14) - (14) + 1)) - 1) << (14)),
46902 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46903
46904 {&hf_ieee80211_tag_ranging_i2r_aoa_requested,
46905 {"I2R AOA Requested", "wlan.ranging.i2r_aoa_requested",
46906 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(15, 15)(((1U << ((15) - (15) + 1)) - 1) << (15)),
46907 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46908
46909 {&hf_ieee80211_tag_ranging_format_and_bandwidth,
46910 {"Format and Bandwidth", "wlan.ranging.format_and_bandwidth",
46911 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)),
46912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46913
46914 {&hf_ieee80211_tag_ranging_immediate_r2i_feedback,
46915 {"Immediate R2I Feedback", "wlan.ranging.immediate_r2i_feedback",
46916 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(22, 22)(((1U << ((22) - (22) + 1)) - 1) << (22)),
46917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46918
46919 {&hf_ieee80211_tag_ranging_immediate_i2r_feedback,
46920 {"Immediate I2R Feedback", "wlan.ranging.immediate_i2r_feedback",
46921 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(23, 23)(((1U << ((23) - (23) + 1)) - 1) << (23)),
46922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46923
46924 {&hf_ieee80211_tag_ranging_max_i2r_repetition,
46925 {"Max I2R Repetition", "wlan.ranging.max_i2r_repetition",
46926 FT_UINT56, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(26, 24)(((1U << ((26) - (24) + 1)) - 1) << (24)),
46927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46928
46929 {&hf_ieee80211_tag_ranging_max_r2i_repetition,
46930 {"Max R2I Repetition", "wlan.ranging.max_r2i_repetition",
46931 FT_UINT56, BASE_CUSTOM, CF_FUNC(rep_custom)((const void *) (size_t) (rep_custom)), GENMASK(29, 27)(((1U << ((29) - (27) + 1)) - 1) << (27)),
46932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46933
46934 {&hf_ieee80211_tag_ranging_reserved1,
46935 {"Reserved", "wlan.ranging.reserved1",
46936 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(30, 30)(((1U << ((30) - (30) + 1)) - 1) << (30)),
46937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46938
46939 {&hf_ieee80211_tag_ranging_reserved2,
46940 {"Reserved", "wlan.ranging.reserved2",
46941 FT_UINT56, BASE_DEC, NULL((void*)0), GENMASK(31, 31)(((1U << ((31) - (31) + 1)) - 1) << (31)),
46942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46943
46944 {&hf_ieee80211_tag_ranging_max_r2i_sts_le_80_mhz,
46945 {"Max R2I STS <= 80 MHz", "wlan.ranging.max_r2i_sts_le_80_mhz",
46946 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(34, 32)(((1UL << ((34) - (32) + 1)) - 1) << (32)),
46947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46948
46949 {&hf_ieee80211_tag_ranging_max_r2i_sts_gt_80_mhz,
46950 {"Max R2I STS > 80 MHz", "wlan.ranging.max_r2i_sts_gt_80_mhz",
46951 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(37, 35)(((1UL << ((37) - (35) + 1)) - 1) << (35)),
46952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46953
46954 {&hf_ieee80211_tag_ranging_max_r2i_ltf_total,
46955 {"Max R2I LTF Total", "wlan.ranging.max_r2i_ltf_total",
46956 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)),
46957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46958
46959 {&hf_ieee80211_tag_ranging_max_i2r_ltf_total,
46960 {"Max I2R LTF Total", "wlan.ranging.max_i2r_ltf_total",
46961 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)),
46962 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46963
46964 {&hf_ieee80211_tag_ranging_max_i2r_sts_le_80_mhz,
46965 {"Max I2R STS <= 80 MHz", "wlan.ranging.max_i2r_sts_le_80_mhz",
46966 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(44, 42)(((1UL << ((44) - (42) + 1)) - 1) << (42)),
46967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46968
46969 {&hf_ieee80211_tag_ranging_max_i2r_sts_gt_80_mhz,
46970 {"Max I2R STS > 80 MHz", "wlan.ranging.max_i2r_sts_gt_80_mhz",
46971 FT_UINT56, BASE_CUSTOM, CF_FUNC(sts_custom)((const void *) (size_t) (sts_custom)), GENMASK64(47, 45)(((1UL << ((47) - (45) + 1)) - 1) << (45)),
46972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46973
46974 {&hf_ieee80211_tag_ranging_bss_color_info,
46975 {"BSS Color Information",
46976 "wlan.tag.ftm.param.ranging.bss_color_information",
46977 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) }},
46978
46979 /* az: non-TB-specific subelement */
46980
46981 {&hf_ieee80211_tag_ranging_ntb,
46982 {"Non-TB specific subelement", "wlan.ranging.ntb",
46983 FT_UINT48, BASE_HEX, NULL((void*)0), 0,
46984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46985
46986 {&hf_ieee80211_tag_ranging_ntb_reserved1,
46987 {"Reserved", "wlan.ranging.ntb.reserved1",
46988 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK(0, 0)(((1U << ((0) - (0) + 1)) - 1) << (0)),
46989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46990
46991 {&hf_ieee80211_tag_ranging_ntb_min_time_msmts,
46992 {"Min Time Between Measurements", "wlan.ranging.ntb.min_time",
46993 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)),
46994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
46995
46996 {&hf_ieee80211_tag_ranging_ntb_max_time_msmts,
46997 {"Max Time Between Measurements", "wlan.ranging.ntb.max_time",
46998 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)),
46999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47000
47001 {&hf_ieee80211_tag_ranging_ntb_r2i_tx_power,
47002 {"R2I Tx Power", "wlan.ranging.ntb.r2i_tx_power",
47003 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK64(44, 44)(((1UL << ((44) - (44) + 1)) - 1) << (44)),
47004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47005
47006 {&hf_ieee80211_tag_ranging_ntb_i2r_tx_power,
47007 {"I2R Tx Power", "wlan.ranging.ntb.i2r_tx_power",
47008 FT_UINT48, BASE_DEC, NULL((void*)0), GENMASK64(45, 45)(((1UL << ((45) - (45) + 1)) - 1) << (45)),
47009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47010
47011 {&hf_ieee80211_tag_ranging_ntb_reserved2,
47012 {"Reserved", "wlan.ranging.ntb.reserved2",
47013 FT_UINT48, BASE_HEX, NULL((void*)0), GENMASK64(47, 46)(((1UL << ((47) - (46) + 1)) - 1) << (46)),
47014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47015
47016 {&hf_ieee80211_tag_ranging_aid_rsid,
47017 {"AID/RSID", "wlan.ranging.tb.aid_rsid",
47018 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000ffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47019
47020 {&hf_ieee80211_tag_ranging_device_class,
47021 {"Device Class", "wlan.ranging.tb.device_class",
47022 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47023
47024 {&hf_ieee80211_tag_ranging_full_bw_ul_mu_mimo,
47025 {"Full Bandwidth UL MU-MIMO", "wlan.ranging.tb.full_bw_ul_mu_mimo",
47026 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47027
47028 {&hf_ieee80211_tag_ranging_trigger_frame_paddur,
47029 {"Trigger Frame Padding Duration",
47030 "wlan.ranging.tb.trigger_frame_padding_duration",
47031 FT_BOOLEAN, 32, NULL((void*)0), 0x000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47032
47033 {&hf_ieee80211_tag_ranging_max_sess_exp,
47034 {"Max Session Exp", "wlan.ranging.tb.max_session.exp",
47035 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00f00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47036
47037 {&hf_ieee80211_tag_ranging_passive_tb_ranging,
47038 {"Passive TB Ranging", "wlan.ranging.tb.passive_tb_ranging",
47039 FT_BOOLEAN, 32, NULL((void*)0), 0x01000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47040
47041 {&hf_ieee80211_tag_ranging_tb_specific_reserved,
47042 {"Reserved", "wlan.ranging.tb.reserved",
47043 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47044
47045 {&hf_ieee80211_tag_ranging_secure_he_ltf,
47046 {"Secure HE-LTF subelement", "wlan.ranging.secure_he_ltf",
47047 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
47048 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47049
47050 {&hf_ieee80211_tag_ranging_secure_he_ltf_version,
47051 {"Protocol Version", "wlan.ranging.secure_he_ltf.version",
47052 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
47053 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47054
47055 {&hf_ieee80211_tag_ranging_secure_he_ltf_req,
47056 {"Secure HE-LTF Req", "wlan.ranging.secure_he_ltf.req",
47057 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
47058 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47059
47060 {&hf_ieee80211_tag_ranging_secure_he_ltf_r2i_tx_window,
47061 {"R2I Tx Window", "wlan.ranging.secure_he_ltf.r2i_tx_window",
47062 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
47063 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47064
47065 {&hf_ieee80211_tag_ranging_secure_he_ltf_i2r_tx_window,
47066 {"I2R Tx Window", "wlan.ranging.secure_he_ltf.i2r_tx_window",
47067 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
47068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47069
47070 {&hf_ieee80211_tag_ranging_secure_he_ltf_reserved,
47071 {"Reserved", "wlan.ranging.secure_he_ltf.reserved",
47072 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0,
47073 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47074
47075 {&hf_ieee80211_tag_dirn_meas_results_aoa_results,
47076 {"AOA Results", "wlan.etag.direction_measurement_results.aoa_results",
47077 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47078
47079 {&hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth,
47080 {"AOA Azimuth", "wlan.etag.direction_measurement_results.aoa_azimuth",
47081 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_azimuth_custom)((const void *) (size_t) (aoa_azimuth_custom)),
47082 0x0000000007ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47083
47084 {&hf_ieee80211_tag_ftm_aoa_results_aoa_elevation,
47085 {"AOA Elevation", "wlan.etag.direction_measurement_results.aoa_elevation",
47086 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_elevation_custom)((const void *) (size_t) (aoa_elevation_custom)),
47087 0x0000001ff800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47088
47089 {&hf_ieee80211_tag_ftm_aoa_results_aoa_azimuth_accuracy,
47090 {"AOA Azimuth Accuracy",
47091 "wlan.etag.direction_measurement_results.aoa_azimuth_accuracy",
47092 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_accuracy_custom)((const void *) (size_t) (aoa_accuracy_custom)),
47093 0x00000fe00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47094
47095 {&hf_ieee80211_tag_ftm_aoa_results_aoa_elevation_accuracy,
47096 {"AOA Elevation Accuracy",
47097 "wlan.etag.direction_measurement_results.aoa_elevation_accuracy",
47098 FT_UINT48, BASE_CUSTOM, CF_FUNC(aoa_accuracy_custom)((const void *) (size_t) (aoa_accuracy_custom)),
47099 0x0007f0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47100
47101 {&hf_ieee80211_tag_ftm_aoa_results_best_awv_id,
47102 {"Best AWV ID", "wlan.etag.direction_measurement_results.best_awv_id",
47103 FT_UINT48, BASE_DEC, NULL((void*)0), 0x3ff800000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47104
47105 {&hf_ieee80211_tag_ftm_aoa_results_aoa_reference,
47106 {"AOA Reference", "wlan.etag.direction_measurement_results.aoa_reference",
47107 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) }},
47108
47109 {&hf_ieee80211_tag_ftm_aoa_results_reserved,
47110 {"Reserved", "wlan.etag.direction_measurement_results.reserved",
47111 FT_UINT48, BASE_DEC, NULL((void*)0), 0x800000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47112
47113 {&hf_ieee80211_ff_ftm_max_tod_error_exponent,
47114 {"Max TOD Error Exponent", "wlan.fixed.ftm.max_tod_error_exponent",
47115 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) }},
47116
47117 {&hf_ieee80211_ff_ftm_tod_err_reserved,
47118 {"Reserved", "wlan.fixed.ftm.tod_reserved",
47119 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) }},
47120
47121 {&hf_ieee80211_ff_ftm_tod_not_continuous,
47122 {"TOD Not Continuous", "wlan.fixed.ftm.tod_not_continuous",
47123 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) }},
47124
47125 {&hf_ieee80211_ff_ftm_toa_err1,
47126 {"FTM TOA Error", "wlan.fixed.ftm_toa_err",
47127 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47128 "Management action FTM LMR TOA Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47129
47130 {&hf_ieee80211_ff_ftm_max_toa_error_exponent,
47131 {"Max TOA Error Exponent", "wlan.fixed.ftm_max_toa_error_exponent",
47132 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) }},
47133
47134 {&hf_ieee80211_ff_ftm_toa_err_reserved,
47135 {"Reserved", "wlan.fixed.ftm_toa_reserved",
47136 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) }},
47137
47138 {&hf_ieee80211_ff_ftm_invalid_measurement,
47139 {"Invalid Measurement", "wlan.fixed.ftm_invalid_measurement",
47140 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) }},
47141
47142 {&hf_ieee80211_ff_ftm_toa_type,
47143 {"TOA Type", "wlan.fixed.ftm_toa_type",
47144 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) }},
47145
47146 {&hf_ieee80211_ff_ftm_cfo,
47147 {"CFO", "wlan.fixed.ftm.param.cfo",
47148 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47150
47151 {&hf_ieee80211_ff_ftm_r2i_ndp_tx_power,
47152 {"R2I NDP Tx Power", "wlan.fixed.ftm.param.r2i_ndp_tx_power",
47153 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47154 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47155
47156 {&hf_ieee80211_ff_ftm_i2r_ndp_target_rssi,
47157 {"I2R NDP Target RSSI", "wlan.fixed.ftm.param.i2r_ndp_target_rssi",
47158 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47160
47161 {&hf_ieee80211_tag_secure_ltf_params_counter,
47162 {"Secure LTF Counter", "wlan.etag.secure_ltf_params.secure_ltf_counter",
47163 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47164
47165 {&hf_ieee80211_tag_secure_ltf_generation_sac,
47166 {"LTF Generation SAC", "wlan.etag.secure_ltf_params.ltf_generation_sac",
47167 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47168
47169 {&hf_ieee80211_tag_secure_ltf_management_sac,
47170 {"Ranging Management SAC",
47171 "wlan.etag.secure_ltf_params.ranging_management_sac",
47172 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47173
47174 {&hf_ieee80211_tag_secure_ltf_result_ltf_ofs,
47175 {"Measurement Result LTF Offset",
47176 "wlan.etag.secure_ltf_params.measurement_result_ltf_offset",
47177 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47178
47179 {&hf_ieee80211_ftm_ista_availability_count,
47180 {"ISTA Availability Count", "wlan.ranging.ista.availability_count",
47181 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47182
47183 {&hf_ieee80211_ftm_ista_availability_reserved,
47184 {"Reserved", "wlan.ranging.ista.availability_reserved",
47185 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47186
47187 {&hf_ieee80211_ftm_ista_avail_bits,
47188 {"ISTA Availability", "wlan.ranging.ista.availability_bits",
47189 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47190
47191 {&hf_ieee80211_ftm_ista_avail_pad,
47192 {"Padding", "wlan.ranging.ista.availability_pad",
47193 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47194
47195 {&hf_ieee80211_ftm_rsta_header,
47196 {"Header", "wlan.ftm.rsta.header",
47197 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47198
47199 {&hf_ieee80211_ftm_rsta_count,
47200 {"RSTA Count", "wlan.ranging.rsta.count",
47201 FT_UINT8, BASE_HEX, NULL((void*)0), 0x7F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47202
47203 {&hf_ieee80211_ftm_rsta_avail_window_bcast_fmt,
47204 {"Availability Window Broadcast Format",
47205 "wlan.ftm.rsta.availability_window_broadcast_format",
47206 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47207
47208 {&hf_ieee80211_ftm_rsta_partial_tsf_timer1,
47209 {"Partial TSF Timer", "wlan.ranging.rsta.partial_tsf_timer",
47210 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) }},
47211
47212 {&hf_ieee80211_ftm_rsta_duration1,
47213 {"Duration", "wlan.ranging.rsta.duration",
47214 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) }},
47215
47216 {&hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved1,
47217 {"Reserved", "wlan.ranging.rsta.reserved1",
47218 FT_BOOLEAN, 32, NULL((void*)0), 0x00800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47219
47220 {&hf_ieee80211_ftm_rsta_periodicity1,
47221 {"Periodicity", "wlan.ranging.rsta.periodicity1",
47222 FT_UINT32, BASE_DEC, NULL((void*)0), 0xff000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47223
47224 {&hf_ieee80211_ftm_rsta_partial_tsf_timer,
47225 {"Partial TSF Timer", "wlan.ranging.rsta.partial_tsf_timer_long",
47226 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) }},
47227
47228 {&hf_ieee80211_ftm_rsta_duration,
47229 {"Duration", "wlan.ranging.rsta.duration_long",
47230 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) }},
47231
47232 {&hf_ieee80211_ftm_rsta_passive_tb_ranging_reserved,
47233 {"Reserved", "wlan.ranging.rsta.reserved",
47234 FT_BOOLEAN, 40, NULL((void*)0), 0x0000800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47235
47236 {&hf_ieee80211_ftm_rsta_periodicity,
47237 {"Periodicity", "wlan.ranging.rsta.periodicity",
47238 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00ff000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47239
47240 {&hf_ieee80211_ftm_rsta_format_and_bandwidth,
47241 {"Format and Bandwidth", "wlan.ftm.rsta.format_and_bandwidth",
47242 FT_UINT40, BASE_HEX, NULL((void*)0), 0x3F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47243
47244 {&hf_ieee80211_ftm_rsta_reserved,
47245 {"Reserved", "wlan.ftm.rsta.reserved",
47246 FT_UINT40, BASE_HEX, NULL((void*)0), 0xC000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47247
47248 {&hf_ieee80211_ftm_rsta_avail_subfield_short,
47249 {"RSTA Availability Information", "wlan.ranging.rsta.availability_window",
47250 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47251
47252 {&hf_ieee80211_ftm_rsta_avail_subfield_long,
47253 {"RSTA Availability Information",
47254 "wlan.ranging.rsta.availability_window_long",
47255 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47256
47257 {&hf_ieee80211_ff_psmp_sta_info,
47258 {"Power Save Multi-Poll (PSMP) Station Information", "wlan.fixed.psmp.stainfo",
47259 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
47260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47261
47262 {&hf_ieee80211_ff_psmp_sta_info_type,
47263 {"Sta Info Type", "wlan.fixed.psmp.stainfo.type",
47264 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,
47265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47266
47267 {&hf_ieee80211_ff_psmp_sta_info_dtt_start_offset,
47268 {"DTT Start Offset", "wlan.fixed.psmp.stainfo.dttstart",
47269 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_DTT_START0x00001FFC,
47270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47271
47272 {&hf_ieee80211_ff_psmp_sta_info_dtt_duration,
47273 {"DTT Duration", "wlan.fixed.psmp.stainfo.dttduration",
47274 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_DTT_DURATION0x001FE000,
47275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47276
47277 {&hf_ieee80211_ff_psmp_sta_info_sta_id,
47278 {"Target Station ID", "wlan.fixed.psmp.stainfo.staid",
47279 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_STA_ID0x001FFFE0,
47280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47281
47282 {&hf_ieee80211_ff_psmp_sta_info_utt_start_offset,
47283 {"UTT Start Offset", "wlan.fixed.psmp.stainfo.uttstart",
47284 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_UTT_START0x0000FFE0,
47285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47286
47287 {&hf_ieee80211_ff_psmp_sta_info_utt_duration,
47288 {"UTT Duration", "wlan.fixed.psmp.stainfo.uttduration",
47289 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_UTT_DURATION0x03FF0000,
47290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47291
47292 {&hf_ieee80211_ff_psmp_sta_info_reserved_small,
47293 {"Reserved", "wlan.fixed.psmp.stainfo.reserved",
47294 FT_UINT32, BASE_HEX, NULL((void*)0), PSMP_STA_INFO_FLAG_IA_RESERVED0xFC000000,
47295 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47296
47297 {&hf_ieee80211_ff_psmp_sta_info_reserved_large,
47298 {"Reserved", "wlan.fixed.psmp.stainfo.reserved64",
47299 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
47300 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47301
47302 {&hf_ieee80211_ff_psmp_sta_info_psmp_multicast_id,
47303 {"Power Save Multi-Poll (PSMP) Multicast ID", "wlan.fixed.psmp.stainfo.multicastid",
47304 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
47305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47306
47307 {&hf_ieee80211_ff_ant_selection,
47308 {"Antenna Selection", "wlan.fixed.antsel",
47309 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47311
47312 {&hf_ieee80211_ff_ant_selection_0,
47313 {"Antenna 0", "wlan.fixed.antsel.ant0",
47314 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
47315 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47316
47317 {&hf_ieee80211_ff_ant_selection_1,
47318 {"Antenna 1", "wlan.fixed.antsel.ant1",
47319 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
47320 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47321
47322 {&hf_ieee80211_ff_ant_selection_2,
47323 {"Antenna 2", "wlan.fixed.antsel.ant2",
47324 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04,
47325 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47326
47327 {&hf_ieee80211_ff_ant_selection_3,
47328 {"Antenna 3", "wlan.fixed.antsel.ant3",
47329 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
47330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47331
47332 {&hf_ieee80211_ff_ant_selection_4,
47333 {"Antenna 4", "wlan.fixed.antsel.ant4",
47334 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10,
47335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47336
47337 {&hf_ieee80211_ff_ant_selection_5,
47338 {"Antenna 5", "wlan.fixed.antsel.ant5",
47339 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20,
47340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47341
47342 {&hf_ieee80211_ff_ant_selection_6,
47343 {"Antenna 6", "wlan.fixed.antsel.ant6",
47344 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40,
47345 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47346
47347 {&hf_ieee80211_ff_ant_selection_7,
47348 {"Antenna 7", "wlan.fixed.antsel.ant7",
47349 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
47350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47351
47352 {&hf_ieee80211_ff_ext_channel_switch_announcement,
47353 {"Extended Channel Switch Announcement", "wlan.fixed.extchansw",
47354 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
47355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47356
47357 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_mode,
47358 {"Channel Switch Mode", "wlan.fixed.extchansw.switchmode",
47359 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,
47360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47361
47362 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_ope_class,
47363 {"New Operating Class", "wlan.fixed.extchansw.new.opeclass",
47364 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FF00,
47365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47366
47367 {&hf_ieee80211_ff_ext_channel_switch_announcement_new_chan_number,
47368 {"New Channel Number", "wlan.fixed.extchansw.new.channumber",
47369 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00FF0000,
47370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47371
47372 {&hf_ieee80211_ff_ext_channel_switch_announcement_switch_count,
47373 {"Channel Switch Count", "wlan.extchansw.switchcount",
47374 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFF000000,
47375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47376
47377 {&hf_ieee80211_ff_ht_info,
47378 {"HT Information", "wlan.fixed.mimo",
47379 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47380 "HT Information Fixed Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47381
47382 {&hf_ieee80211_ff_ht_info_information_request,
47383 {"Information Request", "wlan.fixed.mimo.control.inforequest",
47384 FT_BOOLEAN, 8, TFS(&ff_ht_info_information_request_flag)((0 ? (const struct true_false_string*)0 : ((&ff_ht_info_information_request_flag
))))
, 0x01,
47385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47386
47387 {&hf_ieee80211_ff_ht_info_40_mhz_intolerant,
47388 {"40 MHz Intolerant", "wlan.fixed.mimo.control.intolerant",
47389 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,
47390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47391
47392 {&hf_ieee80211_ff_ht_info_sta_chan_width,
47393 {"Station Channel Width", "wlan.fixed.mimo.control.chanwidth",
47394 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,
47395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47396
47397 {&hf_ieee80211_ff_ht_info_reserved,
47398 {"Reserved", "wlan.fixed.reserved",
47399 FT_UINT8, BASE_HEX, 0, 0xF8,
47400 "Reserved Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47401
47402 {&hf_ieee80211_ff_ht_action,
47403 {"HT Action", "wlan.fixed.htact",
47404 FT_UINT8, BASE_HEX, VALS(ff_ht_action_flags)((0 ? (const struct _value_string*)0 : ((ff_ht_action_flags))
))
, 0,
47405 "HT Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47406
47407 {&hf_ieee80211_ff_mimo_csi_snr,
47408 {"Signal to Noise Ratio (SNR)", "wlan.mimo.csimatrices.snr",
47409 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47411
47412 {&hf_ieee80211_ff_mimo_csi_matrices,
47413 {"CSI Matrices", "wlan.mimo.csimatrices",
47414 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47416
47417 {&hf_ieee80211_ff_mimo_csi_bf_matrices,
47418 {"Beamforming Feedback Matrices", "wlan.mimo.csimatrices.bf",
47419 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47421
47422 {&hf_ieee80211_ff_mimo_csi_cbf_matrices,
47423 {"Compressed Beamforming Feedback Matrices", "wlan.mimo.csimatrices.cbf",
47424 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47426
47427 {&hf_ieee80211_ff_public_action,
47428 {"Public Action", "wlan.fixed.publicact",
47429 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ff_pa_action_codes_ext, 0,
47430 "Public Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47431
47432 {&hf_ieee80211_ff_protected_public_action,
47433 {"Protected Public Action", "wlan.fixed.protectedpublicact",
47434 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ff_ppa_action_codes_ext, 0,
47435 "Protected Public Action Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47436
47437 {&hf_ieee80211_ff_capture,
47438 {"Capabilities Information", "wlan.fixed.capabilities",
47439 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47440 "Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47441
47442 {&hf_ieee80211_ff_cf_ess,
47443 {"ESS capabilities", "wlan.fixed.capabilities.ess",
47444 FT_BOOLEAN, 16, TFS(&cf_ess_flags)((0 ? (const struct true_false_string*)0 : ((&cf_ess_flags
))))
, 0x0001,
47445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47446
47447 {&hf_ieee80211_ff_cf_ibss,
47448 {"IBSS status", "wlan.fixed.capabilities.ibss",
47449 FT_BOOLEAN, 16, TFS(&cf_ibss_flags)((0 ? (const struct true_false_string*)0 : ((&cf_ibss_flags
))))
, 0x0002,
47450 "IBSS participation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47451
47452 {&hf_ieee80211_ff_cf_reserved1,
47453 {"Reserved", "wlan.fixed.capabilities.reserved1",
47454 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47455
47456 {&hf_ieee80211_ff_cf_reserved2,
47457 {"Reserved", "wlan.fixed.capabilities.reserved2",
47458 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47459
47460 {&hf_ieee80211_ff_cf_privacy,
47461 {"Privacy", "wlan.fixed.capabilities.privacy",
47462 FT_BOOLEAN, 16, TFS(&cf_privacy_flags)((0 ? (const struct true_false_string*)0 : ((&cf_privacy_flags
))))
, 0x0010,
47463 "Data privacy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47464
47465 {&hf_ieee80211_ff_cf_preamble,
47466 {"Short Preamble", "wlan.fixed.capabilities.short_preamble",
47467 FT_BOOLEAN, 16, TFS(&tfs_allowed_not_allowed)((0 ? (const struct true_false_string*)0 : ((&tfs_allowed_not_allowed
))))
, 0x0020,
47468 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47469
47470 {&hf_ieee80211_ff_cf_critical_update_flag,
47471 {"Critical Update Flag", "wlan.fixed.capabilities.critical_update_flag",
47472 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47473
47474 {&hf_ieee80211_ff_cf_nontran_bss_critical_update_flag,
47475 {"Nontransmitted BSSIDs Critical Update Flag", "wlan.fixed.capabilities.nontran_bss_critical_update_flag",
47476 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47477
47478 {&hf_ieee80211_ff_cf_spec_man,
47479 {"Spectrum Management", "wlan.fixed.capabilities.spec_man",
47480 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0100,
47481 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47482
47483 {&hf_ieee80211_ff_cf_qos,
47484 {"QoS", "wlan.fixed.capabilities.qos",
47485 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0200,
47486 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47487
47488 {&hf_ieee80211_ff_cf_short_slot_time,
47489 {"Short Slot Time", "wlan.fixed.capabilities.short_slot_time",
47490 FT_BOOLEAN, 16, TFS(&tfs_inuse_not_inuse)((0 ? (const struct true_false_string*)0 : ((&tfs_inuse_not_inuse
))))
, 0x0400,
47491 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47492
47493 {&hf_ieee80211_ff_cf_apsd,
47494 {"Automatic Power Save Delivery", "wlan.fixed.capabilities.apsd",
47495 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x0800,
47496 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47497
47498 {&hf_ieee80211_ff_cf_radio_measurement,
47499 {"Radio Measurement", "wlan.fixed.capabilities.radio_measurement",
47500 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x1000,
47501 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47502
47503 {&hf_ieee80211_ff_cf_epd,
47504 {"EPD", "wlan.fixed.capabilities.epd",
47505 FT_BOOLEAN, 16, TFS(&tfs_implemented_not_implemented)((0 ? (const struct true_false_string*)0 : ((&tfs_implemented_not_implemented
))))
, 0x2000,
47506 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47507
47508 {&hf_ieee80211_ff_cf_reserved5,
47509 {"Reserved", "wlan.fixed.capabilities.reserved5",
47510 FT_UINT16, BASE_DEC, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47511
47512 {&hf_ieee80211_ff_cf_reserved6,
47513 {"Reserved", "wlan.fixed.capabilities.reserved6",
47514 FT_UINT16, BASE_DEC, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47515
47516 {&hf_ieee80211_ff_auth_seq,
47517 {"Authentication SEQ", "wlan.fixed.auth_seq",
47518 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47519 "Authentication Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47520
47521 {&hf_ieee80211_ff_assoc_id,
47522 {"Association ID", "wlan.fixed.aid",
47523 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3FFF,
47524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47525
47526 {&hf_ieee80211_ff_listen_ival,
47527 {"Listen Interval", "wlan.fixed.listen_ival",
47528 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47530
47531 {&hf_ieee80211_ff_current_ap,
47532 {"Current AP", "wlan.fixed.current_ap",
47533 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47534 "MAC address of current AP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47535
47536 {&hf_ieee80211_ff_reason,
47537 {"Reason code", "wlan.fixed.reason_code",
47538 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_reason_code_ext, 0,
47539 "Reason for unsolicited notification", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47540
47541 {&hf_ieee80211_ff_status_code,
47542 {"Status code", "wlan.fixed.status_code",
47543 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
47544 "Status of requested event", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47545
47546 {&hf_ieee80211_ff_category_code,
47547 {"Category code", "wlan.fixed.category_code",
47548 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &category_codes_ext, 0,
47549 "Management action category", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47550
47551 {&hf_ieee80211_ff_action_code,
47552 {"Action code", "wlan.fixed.action_code",
47553 FT_UINT16, BASE_DEC, VALS(action_codes)((0 ? (const struct _value_string*)0 : ((action_codes)))), 0,
47554 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47555
47556 {&hf_ieee80211_ff_dialog_token,
47557 {"Dialog token", "wlan.fixed.dialog_token",
47558 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47559 "Management action dialog token", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47560
47561 {&hf_ieee80211_ff_trigger,
47562 {"Trigger", "wlan.fixed.trigger",
47563 FT_UINT8, BASE_DEC, VALS(ftm_trigger_vals)((0 ? (const struct _value_string*)0 : ((ftm_trigger_vals)))), 0,
47564 "FTM action trigger", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47565
47566 {&hf_ieee80211_ff_ftm_tod,
47567 {"FTM TOD", "wlan.fixed.ftm_tod",
47568 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
47569 "Management action FTM TOD", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47570
47571 {&hf_ieee80211_ff_ftm_toa,
47572 {"FTM TOA", "wlan.fixed.ftm_toa",
47573 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
47574 "Management action FTM TOA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47575
47576 {&hf_ieee80211_ff_ftm_tod_err,
47577 {"FTM TOD Error", "wlan.fixed.ftm_tod_err",
47578 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47579 "Management action FTM TOD Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47580
47581 {&hf_ieee80211_ff_ftm_toa_err,
47582 {"FTM TOA Error", "wlan.fixed.ftm_toa_err",
47583 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47584 "Management action FTM TOA Error", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47585
47586 {&hf_ieee80211_ff_followup_dialog_token,
47587 {"Followup Dialog token", "wlan.fixed.followup_dialog_token",
47588 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47589 "Management action followup dialog token", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47590
47591 {&hf_ieee80211_ff_marvell_action_type,
47592 {"Marvell Action type", "wlan.fixed.mrvl_action_type",
47593 FT_UINT8, BASE_DEC, VALS(vendor_action_types_mrvl)((0 ? (const struct _value_string*)0 : ((vendor_action_types_mrvl
))))
, 0,
47594 "Vendor Specific Action Type (Marvell)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47595
47596 {&hf_ieee80211_ff_marvell_mesh_mgt_action_code,
47597 {"Mesh action(Marvell)", "wlan.fixed.mrvl_mesh_action",
47598 FT_UINT8, BASE_HEX, VALS(mesh_mgt_action_codes_mrvl)((0 ? (const struct _value_string*)0 : ((mesh_mgt_action_codes_mrvl
))))
, 0,
47599 "Mesh action code(Marvell)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47600
47601 {&hf_ieee80211_ff_marvell_mesh_mgt_length,
47602 {"Message Length", "wlan.fixed.length",
47603 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47605
47606 {&hf_ieee80211_ff_marvell_mesh_mgt_mode,
47607 {"Message Mode", "wlan.fixed.mode",
47608 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47610
47611 {&hf_ieee80211_ff_marvell_mesh_mgt_ttl,
47612 {"Message TTL", "wlan.fixed.ttl",
47613 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47615
47616 {&hf_ieee80211_ff_marvell_mesh_mgt_dstcount,
47617 {"Destination Count", "wlan.fixed.dstcount",
47618 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47620
47621 {&hf_ieee80211_ff_marvell_mesh_mgt_hopcount,
47622 {"Hop Count", "wlan.fixed.hopcount",
47623 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47625
47626 {&hf_ieee80211_ff_marvell_mesh_mgt_rreqid,
47627 {"RREQ ID", "wlan.fixed.rreqid",
47628 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47630
47631 {&hf_ieee80211_ff_marvell_mesh_mgt_sa,
47632 {"Source Address", "wlan.fixed.sa",
47633 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47634 "Source MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47635
47636 {&hf_ieee80211_ff_marvell_mesh_mgt_ssn,
47637 {"SSN", "wlan.fixed.ssn",
47638 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47639 "Source Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47640
47641 {&hf_ieee80211_ff_marvell_mesh_mgt_metric,
47642 {"Metric", "wlan.fixed.metric",
47643 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47644 "Route Metric", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47645
47646 {&hf_ieee80211_ff_marvell_mesh_mgt_flags,
47647 {"RREQ Flags", "wlan.fixed.flags",
47648 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47650
47651 {&hf_ieee80211_ff_marvell_mesh_mgt_da,
47652 {"Destination Address", "wlan.fixed.da",
47653 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47654 "Destination MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47655
47656 {&hf_ieee80211_ff_marvell_mesh_mgt_dsn,
47657 {"DSN", "wlan.fixed.dsn",
47658 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47659 "Destination Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47660
47661 {&hf_ieee80211_ff_marvell_mesh_mgt_lifetime,
47662 {"Lifetime", "wlan.fixed.lifetime",
47663 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47664 "Route Lifetime", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47665
47666 {&hf_ieee80211_ff_wme_action_code,
47667 {"Action code", "wlan.fixed.action_code",
47668 FT_UINT16, BASE_HEX, VALS(wme_action_codes)((0 ? (const struct _value_string*)0 : ((wme_action_codes)))), 0,
47669 "Management notification action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47670
47671 {&hf_ieee80211_ff_wme_status_code,
47672 {"Status code", "wlan.fixed.status_code",
47673 FT_UINT16, BASE_HEX, VALS(wme_status_codes)((0 ? (const struct _value_string*)0 : ((wme_status_codes)))), 0,
47674 "Management notification setup response status code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47675
47676 {&hf_ieee80211_ff_mesh_action,
47677 {"Mesh Action code", "wlan.fixed.mesh_action",
47678 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &mesh_action_ext, 0,
47679 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47680
47681 {&hf_ieee80211_ff_multihop_action,
47682 {"Multihop Action code", "wlan.fixed.multihop_action",
47683 FT_UINT8, BASE_HEX, VALS(multihop_action)((0 ? (const struct _value_string*)0 : ((multihop_action)))), 0,
47684 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47685
47686 {&hf_ieee80211_ff_mesh_flags,
47687 {"Mesh Flags", "wlan.fixed.mesh_flags",
47688 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47689 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47690
47691 {&hf_ieee80211_ff_mesh_ttl,
47692 {"Mesh TTL", "wlan.fixed.mesh_ttl",
47693 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47694 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47695
47696 {&hf_ieee80211_ff_mesh_sequence,
47697 {"Sequence Number", "wlan.fixed.mesh_sequence",
47698 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
47699 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47700
47701 {&hf_ieee80211_ff_mesh_addr4,
47702 {"Mesh Extended Address 4", "wlan.fixed.mesh_addr4",
47703 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47704 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47705
47706 {&hf_ieee80211_ff_mesh_addr5,
47707 {"Mesh Extended Address 5", "wlan.fixed.mesh_addr5",
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_ff_mesh_addr6,
47712 {"Mesh Extended Address 6", "wlan.fixed.mesh_addr6",
47713 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47715
47716 {&hf_ieee80211_ff_selfprot_action,
47717 {"Self-protected Action code", "wlan.fixed.selfprot_action",
47718 FT_UINT8, BASE_HEX, VALS(selfprot_action)((0 ? (const struct _value_string*)0 : ((selfprot_action)))), 0,
47719 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47720
47721 {&hf_ieee80211_mesh_peering_proto,
47722 {"Mesh Peering Protocol ID", "wlan.peering.proto",
47723 FT_UINT16, BASE_HEX, VALS(mesh_peering_proto_ids)((0 ? (const struct _value_string*)0 : ((mesh_peering_proto_ids
))))
, 0,
47724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47725
47726 {&hf_ieee80211_mesh_peering_local_link_id,
47727 {"Local Link ID", "wlan.peering.local_id",
47728 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47729 "Mesh Peering Management Local Link ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47730
47731 {&hf_ieee80211_mesh_peering_peer_link_id,
47732 {"Peer Link ID", "wlan.peering.peer_id",
47733 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
47734 "Mesh Peering Management Peer Link ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47735
47736 {&hf_ieee80211_ff_hwmp_flags,
47737 {"HWMP Flags", "wlan.hwmp.flags",
47738 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47740
47741 {&hf_ieee80211_ff_hwmp_hopcount,
47742 {"HWMP Hop Count", "wlan.hwmp.hopcount",
47743 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47744 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47745
47746 {&hf_ieee80211_ff_hwmp_ttl,
47747 {"HWMP TTL", "wlan.hwmp.ttl",
47748 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47750
47751 {&hf_ieee80211_ff_hwmp_pdid,
47752 {"HWMP Path Discovery ID", "wlan.hwmp.pdid",
47753 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47755
47756 {&hf_ieee80211_ff_hwmp_orig_sta,
47757 {"Originator STA Address", "wlan.hwmp.orig_sta",
47758 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47760
47761 {&hf_ieee80211_ff_hwmp_orig_sn,
47762 {"HWMP Originator Sequence Number", "wlan.hwmp.orig_sn",
47763 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
47765
47766 {&hf_ieee80211_ff_hwmp_orig_ext,
47767 {"Originator External Address", "wlan.hwmp.orig_ext",
47768 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47770
47771 {&hf_ieee80211_ff_hwmp_lifetime,
47772 {"HWMP Lifetime", "wlan.hwmp.lifetime",
47773 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47774 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47775
47776 {&hf_ieee80211_ff_hwmp_metric,
47777 {"HWMP Metric", "wlan.hwmp.metric",
47778 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47780
47781 {&hf_ieee80211_ff_hwmp_targ_count,
47782 {"HWMP Target Count", "wlan.hwmp.targ_count",
47783 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47784 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47785
47786 {&hf_ieee80211_ff_hwmp_targ_flags,
47787 {"HWMP Per-Target Flags", "wlan.hwmp.targ_flags",
47788 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47790
47791 {&hf_ieee80211_ff_hwmp_targ_to_flags,
47792 {"TO Flag", "wlan.hwmp.to_flag",
47793 FT_BOOLEAN, 8, TFS(&hwmp_targ_to_flags)((0 ? (const struct true_false_string*)0 : ((&hwmp_targ_to_flags
))))
, 0x01,
47794 "Target Only Flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47795
47796 {&hf_ieee80211_ff_hwmp_targ_usn_flags,
47797 {"USN Flag", "wlan.hwmp.usn_flag",
47798 FT_BOOLEAN, 8, TFS(&hwmp_targ_usn_flags)((0 ? (const struct true_false_string*)0 : ((&hwmp_targ_usn_flags
))))
, 0x04,
47799 "Unknown Target HWMP Sequence Number Flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47800
47801 {&hf_ieee80211_ff_hwmp_targ_sta,
47802 {"Target STA Address", "wlan.hwmp.targ_sta",
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_hwmp_targ_ext,
47807 {"Target External Address", "wlan.hwmp.targ_ext",
47808 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
47809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47810
47811 {&hf_ieee80211_ff_hwmp_targ_sn,
47812 {"Target HWMP Sequence Number", "wlan.hwmp.targ_sn",
47813 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47815
47816 {&hf_ieee80211_mesh_config_path_sel_protocol,
47817 {"Path Selection Protocol", "wlan.mesh.config.ps_protocol",
47818 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47819 "Mesh Configuration Path Selection Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47820
47821 {&hf_ieee80211_mesh_config_path_sel_metric,
47822 {"Path Selection Metric", "wlan.mesh.config.ps_metric",
47823 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47824 "Mesh Configuration Path Selection Metric", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47825
47826 {&hf_ieee80211_mesh_config_congestion_control,
47827 {"Congestion Control", "wlan.mesh.config.cong_ctl",
47828 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47829 "Mesh Configuration Congestion Control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47830
47831 {&hf_ieee80211_mesh_config_sync_method,
47832 {"Synchronization Method", "wlan.mesh.config.sync_method",
47833 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47834 "Mesh Configuration Synchronization Method", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47835
47836 {&hf_ieee80211_mesh_config_auth_protocol,
47837 {"Authentication Protocol", "wlan.mesh.config.auth_protocol",
47838 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47839 "Mesh Configuration Authentication Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47840
47841 {&hf_ieee80211_mesh_config_formation_info,
47842 {"Formation Info", "wlan.mesh.config.formation_info",
47843 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47844 "Mesh Configuration Formation Info", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47845
47846 {&hf_ieee80211_mesh_form_info_conn_to_mesh_gate,
47847 {"Connected to Mesh Gate", "wlan.mesh.formation_info.connect_to_mesh_gate",
47848 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
47849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47850
47851 {&hf_ieee80211_mesh_form_info_num_of_peerings,
47852 {"Number of Peerings", "wlan.mesh.config.formation_info.num_peers",
47853 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7E,
47854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47855
47856 {&hf_ieee80211_mesh_form_info_conn_to_as,
47857 {"Connected to AS", "wlan.mesh.formation_info.connect_to_as",
47858 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x80,
47859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47860
47861 {&hf_ieee80211_mesh_config_capability,
47862 {"Capability", "wlan.mesh.config.cap",
47863 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47864 "Mesh Configuration Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47865
47866 {&hf_ieee80211_mesh_config_cap_accepting,
47867 {"Accepting Additional Mesh Peerings", "wlan.mesh.config.cap.accept",
47868 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
47869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47870
47871 {&hf_ieee80211_mesh_config_cap_mcca_support,
47872 {"MCCA Support", "wlan.mesh.config.cap.mcca_support",
47873 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x02,
47874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47875
47876 {&hf_ieee80211_mesh_config_cap_mcca_enabled,
47877 {"MCCA Enabled", "wlan.mesh.config.cap.mcca_enabled",
47878 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x04,
47879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47880
47881 {&hf_ieee80211_mesh_config_cap_forwarding,
47882 {"Mesh Forwarding", "wlan.mesh.config.cap.forwarding",
47883 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x08,
47884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47885
47886 {&hf_ieee80211_mesh_config_cap_mbca_enabled,
47887 {"MBCA Enabled", "wlan.mesh.config.cap.mbca_enabled",
47888 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
47889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47890
47891 {&hf_ieee80211_mesh_config_cap_tbtt_adjusting,
47892 {"TBTT Adjustment", "wlan.mesh.config.cap.tbtt_adjusting",
47893 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x20,
47894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47895
47896 {&hf_ieee80211_mesh_config_cap_power_save_level,
47897 {"Power Save", "wlan.mesh.config.cap.power_save_level",
47898 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,
47899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47900
47901 {&hf_ieee80211_mesh_config_cap_reserved,
47902 {"Reserved", "wlan.mesh.config.cap.reserved",
47903 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
47904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47905
47906 {&hf_ieee80211_mesh_id,
47907 {"Mesh ID", "wlan.mesh.id",
47908 FT_STRING, BASE_NONE, NULL((void*)0), 0,
47909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47910
47911 {&hf_ieee80211_bcn_timing_rctrl,
47912 {"Report Control", "wlan.bcntime.rctrl",
47913 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47915
47916 {&hf_ieee80211_bcn_timing_rctrl_more,
47917 {"More Beacon Timing Elements", "wlan.bcntime.rctrl.more",
47918 FT_BOOLEAN, 8, TFS(&tfs_more_nomore)((0 ? (const struct true_false_string*)0 : ((&tfs_more_nomore
))))
, 0x01,
47919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47920
47921 {&hf_ieee80211_bcn_timing_rctrl_element_num,
47922 {"Beacon Timing Element Number", "wlan.bcntime.rctrl.elem_num",
47923 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0E,
47924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47925
47926 {&hf_ieee80211_bcn_timing_rctrl_status_num,
47927 {"Status Number", "wlan.bcntime.rctrl.status_num",
47928 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
47929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47930
47931 {&hf_ieee80211_bcn_timing_info,
47932 {"Beacon Timing Info", "wlan.bcntime.info",
47933 FT_NONE, BASE_NONE, NULL((void*)0), 0,
47934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47935
47936 {&hf_ieee80211_bcn_timing_info_nsta_id,
47937 {"Neighbor STA ID", "wlan.bcntime.info.nstaid",
47938 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47940
47941 {&hf_ieee80211_bcn_timing_info_nsta_tbtt,
47942 {"Neighbor STA TBTT", "wlan.bcntime.info.nstatbtt",
47943 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
47944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47945
47946 {&hf_ieee80211_bcn_timing_info_nsta_bi,
47947 {"Neighbor STA Beacon Interval", "wlan.bcntime.info.nstabi",
47948 FT_UINT16, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
47949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47950
47951 {&hf_ieee80211_gann_flags,
47952 {"GANN Flags", "wlan.gann.flags",
47953 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47955
47956 {&hf_ieee80211_gann_flags_reserved,
47957 {"Reserved", "wlan.gann.flags.reserved",
47958 FT_UINT8, BASE_HEX, NULL((void*)0), 0xff,
47959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47960
47961 {&hf_ieee80211_gann_hop_count,
47962 {"GANN Hop count", "wlan.gann.hop_count",
47963 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47965
47966 {&hf_ieee80211_gann_elem_ttl,
47967 {"GANN Element TTL", "wlan.gann.elem_ttl",
47968 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
47969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47970
47971 {&hf_ieee80211_gann_mesh_gate_addr,
47972 {"GANN Mesh Gate Address", "wlan.gann.gate_addr",
47973 FT_BYTES, SEP_COLON, NULL((void*)0), 0,
47974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47975
47976 {&hf_ieee80211_gann_seq_num,
47977 {"GANN Sequence Number", "wlan.gann.seq_num",
47978 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
47979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47980
47981 {&hf_ieee80211_gann_interval,
47982 {"GANN Interval", "wlan.gann.interval",
47983 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
47984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47985
47986 {&hf_ieee80211_mesh_mic,
47987 {"Mesh Peering Management MIC", "wlan.mesh.mic",
47988 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47989
47990 {&hf_ieee80211_mesh_ampe_encrypted_data,
47991 {"Authenticated Mesh Peering Exchange Encrypted Data", "wlan.mesh.ampe.encrypted_data",
47992 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47993
47994 {&hf_ieee80211_rann_flags,
47995 {"RANN Flags", "wlan.rann.flags",
47996 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
47997 "Root Announcement Flags", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
47998
47999 {&hf_ieee80211_rann_root_sta,
48000 {"Root STA Address", "wlan.rann.root_sta", FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48001 "Root Mesh STA Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48002
48003 {&hf_ieee80211_rann_sn,
48004 {"Root STA Sequence Number", "wlan.rann.rann_sn",
48005 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
48006 "Root Mesh STA Sequence Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48007
48008 {&hf_ieee80211_rann_interval,
48009 {"RANN Interval", "wlan.rann.interval",
48010 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
48011 "Root Announcement Interval", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48012
48013 {&hf_ieee80211_pxu_pxu_id,
48014 {"PXU ID", "wlan.pxu.pxu_id",
48015 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48016 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48017
48018 {&hf_ieee80211_pxu_pxu_origin_mac,
48019 {"PXU Originator MAC Address", "wlan.pxu.origin_mac",
48020 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48021 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48022
48023 {&hf_ieee80211_pxu_no_proxy_info,
48024 {"Number of Proxy Information", "wlan.pxu.no_proxy_info",
48025 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48026 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48027
48028 {&hf_ieee80211_pxu_proxy_info,
48029 {"Proxy Information", "wlan.pxu.proxy_info",
48030 FT_NONE, BASE_NONE, NULL((void*)0), 0,
48031 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48032
48033 {&hf_ieee80211_pxu_proxy_info_flags,
48034 {"Flags", "wlan.pxu.pxu_info.flags",
48035 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
48036 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48037
48038 {&hf_ieee80211_pxu_proxy_info_flags_delete,
48039 {"Delete", "wlan.pxu.pxu_info.flags.delete",
48040 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
48041 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48042
48043 {&hf_ieee80211_pxu_proxy_info_flags_orig_is_proxy,
48044 {"Originator is Proxy", "wlan.pxu.pxu_info.flags.orig_is_proxy",
48045 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
48046 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48047
48048 {&hf_ieee80211_pxu_proxy_info_flags_lifetime,
48049 {"Lifetime", "wlan.pxu.pxu_info.flags.lifetime",
48050 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
48051 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48052
48053 {&hf_ieee80211_pxu_proxy_info_flags_reserved,
48054 {"Reserved", "wlan.pxu.pxu_info.flags.reserved",
48055 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
48056 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48057
48058 {&hf_ieee80211_pxu_proxy_info_ext_mac,
48059 {"External MAC Address", "wlan.pxu.pxu_info.ext_mac",
48060 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48061 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48062
48063 {&hf_ieee80211_pxu_proxy_info_seq_num,
48064 {"Proxy Information Sequence Number", "wlan.pxu.pxu_info.seq_num",
48065 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
48066 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48067
48068 {&hf_ieee80211_pxu_proxy_info_proxy_mac,
48069 {"Proxy MAC Address", "wlan.pxu.pxu_info.proxy_mac",
48070 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48071 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48072
48073 {&hf_ieee80211_pxu_proxy_info_lifetime,
48074 {"Proxy Information Lifetime", "wlan.pxu.pxu_info.lifetime",
48075 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
48076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48077
48078 {&hf_ieee80211_pxuc_pxu_id,
48079 {"PXU ID", "wlan.pxuc.pxu_id",
48080 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48081 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48082
48083 {&hf_ieee80211_pxuc_pxu_recip_mac,
48084 {"PXU Recipient MAC Address", "wlan.pxuc.recip_mac",
48085 FT_BYTES, SEP_COLON, NULL((void*)0), 0,
48086 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48087
48088 {&hf_ieee80211_ff_qos_action_code,
48089 {"Action code", "wlan.fixed.action_code",
48090 FT_UINT16, BASE_HEX, VALS(qos_action_codes)((0 ? (const struct _value_string*)0 : ((qos_action_codes)))), 0,
48091 "QoS management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48092
48093 {&hf_ieee80211_ff_ba_action,
48094 {"Action code", "wlan.fixed.action_code",
48095 FT_UINT8, BASE_HEX, VALS(ba_action_codes)((0 ? (const struct _value_string*)0 : ((ba_action_codes)))), 0,
48096 "Block Ack action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48097
48098 {&hf_ieee80211_ff_check_beacon,
48099 {"Check Beacon", "wlan.fixed.check_beacon",
48100 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48101 "Unprotected WNM Check Beacon", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48102
48103 {&hf_ieee80211_ff_tod,
48104 {"TOD", "wlan.fixed.tod",
48105 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
48106 "Previous TS of transmit antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48107
48108 {&hf_ieee80211_ff_toa,
48109 {"TOA", "wlan.fixed.toa",
48110 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
48111 "Previous TS of receive antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48112
48113 {&hf_ieee80211_ff_max_tod_err,
48114 {"MAX TOD ERROR", "wlan.fixed.max_tod_err",
48115 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48116 "Maximal Error at Previous TS of transmit antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48117
48118 {&hf_ieee80211_ff_max_toa_err,
48119 {"MAX TOA ERROR", "wlan.fixed.max_toa_err",
48120 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48121 "Maximal Error at Previous TS of receive antenna port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48122
48123 {&hf_ieee80211_ff_dls_action_code,
48124 {"Action code", "wlan.fixed.action_code",
48125 FT_UINT16, BASE_HEX, VALS(dls_action_codes)((0 ? (const struct _value_string*)0 : ((dls_action_codes)))), 0,
48126 "DLS management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48127
48128 {&hf_ieee80211_ff_dst_mac_addr,
48129 {"Destination address", "wlan.fixed.dst_mac_addr",
48130 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48131 "Destination MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48132
48133 {&hf_ieee80211_ff_src_mac_addr,
48134 {"Source address", "wlan.fixed.src_mac_addr",
48135 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48136 "Source MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48137
48138 {&hf_ieee80211_ff_req_ap_addr,
48139 {"RequesterAP address", "wlan.fixed.req_ap_addr",
48140 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48141 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48142
48143 {&hf_ieee80211_ff_res_ap_addr,
48144 {"ResponderAP address", "wlan.fixed.res_ap_addr",
48145 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48146 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48147
48148 {&hf_ieee80211_ff_ft_action_code,
48149 {"Action code", "wlan.fixed.action_code",
48150 FT_UINT8, BASE_DEC, VALS(ft_action_codes)((0 ? (const struct _value_string*)0 : ((ft_action_codes)))), 0,
48151 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48152
48153 {&hf_ieee80211_ff_sta_address,
48154 {"STA Address", "wlan.fixed.sta_address",
48155 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48156 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48157
48158 {&hf_ieee80211_ff_target_ap_address,
48159 {"Target AP Address", "wlan.fixed.target_ap_address",
48160 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
48161 "Target AP MAC address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48162
48163 {&hf_ieee80211_ff_gas_comeback_delay,
48164 {"GAS Comeback Delay", "wlan.fixed.gas_comeback_delay",
48165 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48167
48168 {&hf_ieee80211_ff_gas_fragment_id,
48169 {"GAS Query Response Fragment ID", "wlan.fixed.gas_fragment_id",
48170 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7f,
48171 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48172
48173 {&hf_ieee80211_ff_more_gas_fragments,
48174 {"More GAS Fragments", "wlan.fixed.more_gas_fragments",
48175 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
48176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48177
48178 {&hf_ieee80211_ff_query_request_length,
48179 {"Query Request Length", "wlan.fixed.query_request_length",
48180 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48182
48183 {&hf_ieee80211_ff_query_request,
48184 {"Query Request", "wlan.fixed.query_request",
48185 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48187
48188 {&hf_ieee80211_ff_query_response_length,
48189 {"Query Response Length", "wlan.fixed.query_response_length",
48190 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48191 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48192
48193 {&hf_ieee80211_ff_query_response,
48194 {"Query Response", "wlan.fixed.query_response",
48195 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48197
48198 {&hf_ieee80211_gas_resp_fragments,
48199 {"GAS Query Response fragments", "wlan.fixed.fragments",
48200 FT_NONE, BASE_NONE, NULL((void*)0), 0x00,
48201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48202
48203 {&hf_ieee80211_gas_resp_fragment,
48204 {"GAS Query Response fragment", "wlan.fixed.fragment",
48205 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
48206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48207
48208 {&hf_ieee80211_gas_resp_fragment_overlap,
48209 {"GAS Query Response fragment overlap", "wlan.fixed.fragment.overlap",
48210 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
48211 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48212
48213 {&hf_ieee80211_gas_resp_fragment_overlap_conflict,
48214 {"GAS Query Response fragment overlapping with conflicting data", "wlan.fixed.fragment.overlap.conflicts",
48215 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
48216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48217
48218 {&hf_ieee80211_gas_resp_fragment_multiple_tails,
48219 {"GAS Query Response has multiple tail fragments", "wlan.fixed.fragment.multiple_tails",
48220 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
48221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48222
48223 {&hf_ieee80211_gas_resp_fragment_too_long_fragment,
48224 {"GAS Query Response fragment too long", "wlan.fixed.fragment.too_long_fragment",
48225 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x00,
48226 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48227
48228 {&hf_ieee80211_gas_resp_fragment_error,
48229 {"GAS Query Response reassembly error", "wlan.fixed.fragment.error",
48230 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
48231 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48232
48233 {&hf_ieee80211_gas_resp_fragment_count,
48234 {"GAS Query Response fragment count", "wlan.fixed.fragment.count",
48235 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00,
48236 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48237
48238 {&hf_ieee80211_gas_resp_reassembled_in,
48239 {"Reassembled in", "wlan.fixed.reassembled.in",
48240 FT_FRAMENUM, BASE_NONE, NULL((void*)0), 0x00,
48241 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48242
48243 {&hf_ieee80211_gas_resp_reassembled_length,
48244 {"Reassembled length", "wlan.fixed.reassembled.length",
48245 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00,
48246 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
48247
48248 {&hf_ieee80211_ff_anqp_info_id,
48249 {"Info ID", "wlan.fixed.anqp.info_id",
48250 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
48251 "Access Network Query Protocol Info ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48252
48253 {&hf_ieee80211_ff_anqp_info_length,
48254 {"Length", "wlan.fixed.anqp.info_length",
48255 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48256 "Access Network Query Protocol Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48257
48258 {&hf_ieee80211_ff_anqp_info,
48259 {"Information", "wlan.fixed.anqp.info",
48260 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48261 "Access Network Query Protocol Information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48262
48263 {&hf_ieee80211_ff_anqp_query_id,
48264 {"ANQP Query ID", "wlan.fixed.anqp.query_id",
48265 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
48266 "Access Network Query Protocol Query ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48267
48268 {&hf_ieee80211_ff_anqp_capability,
48269 {"ANQP Capability", "wlan.fixed.anqp.capability",
48270 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &anqp_info_id_vals_ext, 0,
48271 "Access Network Query Protocol Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48272
48273 {&hf_ieee80211_ff_anqp_capability_vlen,
48274 {"Vendor-specific Capability Length", "wlan.fixed.anqp.capability_vlen",
48275 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48277
48278 {&hf_ieee80211_ff_anqp_capability_vendor,
48279 {"Vendor-specific Capability", "wlan.fixed.anqp.capability_vendor",
48280 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48282
48283 {&hf_ieee80211_ff_venue_info_group,
48284 {"Venue Group", "wlan.fixed.venue_info.group",
48285 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &venue_group_vals_ext, 0,
48286 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48287
48288 {&hf_ieee80211_ff_venue_info_type,
48289 {"Venue Type", "wlan.fixed.venue_info.type",
48290 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48291 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48292
48293 {&hf_ieee80211_ff_anqp_venue_length,
48294 {"Venue Name Duple Length", "wlan.fixed.anqp.venue.length",
48295 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48296 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48297
48298 {&hf_ieee80211_ff_anqp_venue_language,
48299 {"Language Code", "wlan.fixed.anqp.venue.language",
48300 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48301 "Venue Name Language Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48302
48303 {&hf_ieee80211_ff_anqp_venue_name,
48304 {"Venue Name", "wlan.fixed.anqp.venue.name",
48305 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48306 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48307
48308 {&hf_ieee80211_ff_anqp_nw_auth_type_indicator,
48309 {"Network Authentication Type Indicator", "wlan.fixed.anqp.nw_auth_type.indicator",
48310 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals)((0 ? (const struct _value_string*)0 : ((nw_auth_type_vals)))
)
, 0,
48311 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48312
48313 {&hf_ieee80211_ff_anqp_nw_auth_type_url_len,
48314 {"Re-direct URL Length", "wlan.fixed.anqp.nw_auth_type.url_len",
48315 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48316 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48317
48318 {&hf_ieee80211_ff_anqp_nw_auth_type_url,
48319 {"Re-direct URL", "wlan.fixed.anqp.nw_auth_type.url",
48320 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48322
48323 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_indicator,
48324 {"Network Authentication Type w/ Timestamp Indicator",
48325 "wlan.fixed.anqp.nw_auth_type_ts.indicator",
48326 FT_UINT8, BASE_DEC, VALS(nw_auth_type_vals)((0 ? (const struct _value_string*)0 : ((nw_auth_type_vals)))
)
, 0,
48327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48328
48329 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_url_len,
48330 {"Re-direct URL Length", "wlan.fixed.anqp.nw_auth_type_ts.url_len",
48331 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48333
48334 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_url,
48335 {"Re-direct URL", "wlan.fixed.anqp.nw_auth_type_ts.url",
48336 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48338
48339 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_year,
48340 {"Timestamp (Year)", "wlan.fixed.anqp.nw_auth_type_ts.year",
48341 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
48342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48343
48344 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_mon,
48345 {"Timestamp (Month)", "wlan.fixed.anqp.nw_auth_type_ts.mon",
48346 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48348
48349 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_day,
48350 {"Timestamp (Day)", "wlan.fixed.anqp.nw_auth_type_ts.day",
48351 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48353
48354 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_hr,
48355 {"Timestamp (Hours)", "wlan.fixed.anqp.nw_auth_type_ts.hr",
48356 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48358
48359 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_min,
48360 {"Timestamp (Minutes)", "wlan.fixed.anqp.nw_auth_type_ts.min",
48361 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48363
48364 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_sec,
48365 {"Timestamp (Seconds)", "wlan.fixed.anqp.nw_auth_type_ts.sec",
48366 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48368
48369 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_msec,
48370 {"Timestamp (Milliseconds)", "wlan.fixed.anqp.nw_auth_type_ts.msec",
48371 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
48372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48373
48374 {&hf_ieee80211_ff_anqp_nw_auth_type_ts_rsvd,
48375 {"Timestamp (Reserved)", "wlan.fixed.anqp.nw_auth_type_ts.rsvd",
48376 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
48377 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48378
48379 {&hf_ieee80211_ff_anqp_roaming_consortium_oi_len,
48380 {"OI Length", "wlan.fixed.anqp.roaming_consortium.oi_len",
48381 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48382 "Roaming Consortium OI Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48383
48384 {&hf_ieee80211_ff_anqp_roaming_consortium_oi,
48385 {"OI", "wlan.fixed.anqp.roaming_consortium.oi",
48386 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48387 "Roaming Consortium OI", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48388
48389 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv6,
48390 {"IPv6 Address", "wlan.fixed.anqp.ip_addr_availability.ipv6",
48391 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv6_vals)((0 ? (const struct _value_string*)0 : ((ip_addr_avail_ipv6_vals
))))
, 0x03,
48392 "IP Address Type Availability information for IPv6", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48393
48394 {&hf_ieee80211_ff_anqp_ip_addr_avail_ipv4,
48395 {"IPv4 Address", "wlan.fixed.anqp.ip_addr_availability.ipv4",
48396 FT_UINT8, BASE_DEC, VALS(ip_addr_avail_ipv4_vals)((0 ? (const struct _value_string*)0 : ((ip_addr_avail_ipv4_vals
))))
, 0xfc,
48397 "IP Address Type Availability information for IPv4", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48398
48399 {&hf_ieee80211_ff_anqp_nai_realm_count,
48400 {"NAI Realm Count", "wlan.fixed.anqp.nai_realm_list.count",
48401 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48402 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48403
48404 {&hf_ieee80211_ff_anqp_nai_field_len,
48405 {"NAI Realm Data Field Length", "wlan.fixed.anqp.nai_realm_list.field_len",
48406 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48408
48409 {&hf_ieee80211_ff_anqp_nai_realm_encoding,
48410 {"NAI Realm Encoding", "wlan.fixed.anqp_nai_realm_list.encoding",
48411 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_encoding_vals
))))
, 0x01,
48412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48413
48414 {&hf_ieee80211_ff_anqp_nai_realm_length,
48415 {"NAI Realm Length", "wlan.fixed.anqp_nai_realm_list.realm_length",
48416 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48418
48419 {&hf_ieee80211_ff_anqp_nai_realm,
48420 {"NAI Realm", "wlan.fixed.anqp_nai_realm_list.realm",
48421 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48423
48424 {&hf_ieee80211_ff_anqp_nai_realm_eap_count,
48425 {"EAP Method Count", "wlan.fixed.anqp_nai_realm_list.eap_method_count",
48426 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48427 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48428
48429 {&hf_ieee80211_ff_anqp_nai_realm_eap_len,
48430 {"EAP Method subfield Length", "wlan.fixed.anqp_nai_realm_list.eap_method_len",
48431 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48432 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48433
48434 {&hf_ieee80211_ff_anqp_nai_realm_eap_method,
48435 {"EAP Method", "wlan.fixed.anqp_nai_realm_list.eap_method",
48436 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &eap_type_vals_ext, 0,
48437 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48438
48439 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_count,
48440 {"Authentication Parameter Count", "wlan.fixed.anqp_nai_realm_list.auth_param_count",
48441 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48443
48444 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_id,
48445 {"Authentication Parameter ID", "wlan.fixed.anqp_nai_realm_list.auth_param_id",
48446 FT_UINT8, BASE_DEC, VALS(nai_realm_auth_param_id_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_auth_param_id_vals
))))
, 0,
48447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48448
48449 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_len,
48450 {"Authentication Parameter Length", "wlan.fixed.anqp_nai_realm_list.auth_param_len",
48451 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48453
48454 {&hf_ieee80211_ff_anqp_nai_realm_auth_param_value,
48455 {"Authentication Parameter Value", "wlan.fixed.anqp_nai_realm_list.auth_param_value",
48456 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48458
48459 {&hf_ieee80211_3gpp_gc_gud,
48460 {"GUD", "wlan.fixed.anqp.3gpp_cellular_info.gud",
48461 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48462 "Generic container User Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48463
48464 {&hf_ieee80211_3gpp_gc_udhl,
48465 {"UDHL", "wlan.fixed.anqp.3gpp_cellular_info.udhl",
48466 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48467 "User Data Header Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48468
48469 {&hf_ieee80211_3gpp_gc_iei,
48470 {"IEI", "wlan.fixed.anqp.3gpp_cellular_info.iei",
48471 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48472 "Information Element Identity", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48473
48474 {&hf_ieee80211_3gpp_gc_plmn_len,
48475 {"PLMN Length", "wlan.fixed.anqp.3gpp_cellular_info.plmn_len",
48476 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48477 "Length of PLMN List value contents", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48478
48479 {&hf_ieee80211_3gpp_gc_num_plmns,
48480 {"Number of PLMNs", "wlan.fixed.anqp.3gpp_cellular_info.num_plmns",
48481 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48483
48484 {&hf_ieee80211_3gpp_gc_plmn,
48485 {"PLMN", "wlan.fixed.anqp.3gpp_cellular_info.plmn_info",
48486 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48487
48488 {&hf_ieee80211_ff_anqp_domain_name_len,
48489 {"Domain Name Length", "wlan.fixed.anqp.domain_name_list.len",
48490 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48491 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48492
48493 {&hf_ieee80211_ff_anqp_domain_name,
48494 {"Domain Name", "wlan.fixed.anqp.domain_name_list.name",
48495 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48496 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48497
48498 {&hf_ieee80211_ff_dls_timeout,
48499 {"DLS timeout", "wlan.fixed.dls_timeout",
48500 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
48501 "DLS timeout value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48502
48503 {&hf_ieee80211_ff_sa_query_action_code,
48504 {"Action code", "wlan.fixed.action_code",
48505 FT_UINT8, BASE_DEC, VALS(sa_query_action_codes)((0 ? (const struct _value_string*)0 : ((sa_query_action_codes
))))
, 0,
48506 "Management action code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48507
48508 {&hf_ieee80211_ff_transaction_id,
48509 {"Transaction Id", "wlan.fixed.transaction_id",
48510 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
48511 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48512
48513 {&hf_ieee80211_ff_send_confirm,
48514 {"Send-Confirm", "wlan.fixed.send_confirm",
48515 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48516 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48517
48518 {&hf_ieee80211_ff_scalar,
48519 {"Scalar", "wlan.fixed.scalar",
48520 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48521 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48522
48523 {&hf_ieee80211_ff_finite_field_element,
48524 {"Finite Field Element", "wlan.fixed.finite_field_element",
48525 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48526 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48527
48528 {&hf_ieee80211_ff_confirm,
48529 {"Confirm", "wlan.fixed.confirm",
48530 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48531 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48532
48533 {&hf_ieee80211_ff_finite_cyclic_group,
48534 {"Group Id", "wlan.fixed.finite_cyclic_group",
48535 FT_UINT16, BASE_DEC, VALS(ff_finite_cyclic_group_vals)((0 ? (const struct _value_string*)0 : ((ff_finite_cyclic_group_vals
))))
, 0,
48536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48537
48538 {&hf_ieee80211_ff_sae_message_type,
48539 {"SAE Message Type", "wlan.fixed.sae_message_type",
48540 FT_UINT16, BASE_DEC, VALS(ff_sae_message_type_vals)((0 ? (const struct _value_string*)0 : ((ff_sae_message_type_vals
))))
, 0,
48541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48542
48543 {&hf_ieee80211_ff_sae_anti_clogging_token,
48544 {"Anti-Clogging Token", "wlan.fixed.anti_clogging_token",
48545 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48546
48547 {&hf_ieee80211_anqp_wfa_subtype,
48548 {"WFA Subtype", "wlan.anqp.wfa.subtype",
48549 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) }},
48550
48551 {&hf_ieee80211_dpp_subtype,
48552 {"DPP Subtype", "wlan.wfa.dpp.subtype",
48553 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) }},
48554
48555 {&hf_ieee80211_hs20_indication_dgaf_disabled,
48556 {"DGAF Disabled", "wlan.hs20.indication.dgaf_disabled",
48557 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48558
48559 {&hf_ieee80211_hs20_indication_pps_mo_id_present,
48560 {"PPS MO ID Present", "wlan.hs20.indication.pps_mo_id_present",
48561 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) }},
48562
48563 {&hf_ieee80211_hs20_indication_anqp_domain_id_present,
48564 {"ANQP Domain ID Present", "wlan.hs20.indication.anqp_domain_id_present",
48565 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) }},
48566
48567 {&hf_ieee80211_hs20_reserved,
48568 { "Reserved", "wlan.hs20.indication.reserved",
48569 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) }},
48570
48571 {&hf_ieee80211_hs20_indication_version_number,
48572 {"Version Number", "wlan.hs20.indication.version_number",
48573 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) }},
48574
48575 {&hf_ieee80211_hs20_indication_pps_mo_id,
48576 {"PPS MO ID", "wlan.hs20.indication.pps_mo_id",
48577 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48578
48579 {&hf_ieee80211_hs20_indication_anqp_domain_id,
48580 {"ANQP Domain ID", "wlan.hs20.indication.domain_id",
48581 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48582
48583 {&hf_ieee80211_hs20_anqp_subtype,
48584 {"Subtype", "wlan.hs20.anqp.subtype",
48585 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48586 "Hotspot 2.0 ANQP Subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48587
48588 {&hf_ieee80211_hs20_anqp_reserved,
48589 {"Reserved", "wlan.hs20.anqp.reserved",
48590 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48591
48592 {&hf_ieee80211_hs20_anqp_payload,
48593 {"Payload", "wlan.hs20.anqp.payload",
48594 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48595 "Hotspot 2.0 ANQP Payload", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48596
48597 {&hf_ieee80211_hs20_anqp_hs_query_list,
48598 {"Queried Subtype", "wlan.hs20.anqp.hs_query_list",
48599 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48600 "Queried HS 2.0 Element Subtype", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48601
48602 {&hf_ieee80211_hs20_anqp_hs_capability_list,
48603 {"Capability", "wlan.hs20.anqp.hs_capability_list",
48604 FT_UINT8, BASE_DEC, VALS(hs20_anqp_subtype_vals)((0 ? (const struct _value_string*)0 : ((hs20_anqp_subtype_vals
))))
, 0,
48605 "Hotspot 2.0 ANQP Subtype Capability", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48606
48607 {&hf_ieee80211_hs20_anqp_ofn_length,
48608 {"Length", "wlan.hs20.anqp.ofn.length",
48609 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48610 "Operator Friendly Name Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48611
48612 {&hf_ieee80211_hs20_anqp_ofn_language,
48613 {"Language Code", "wlan.hs20.anqp.ofn.language",
48614 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48615 "Operator Friendly Name Language Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48616
48617 {&hf_ieee80211_hs20_anqp_ofn_name,
48618 {"Operator Friendly Name", "wlan.hs20.anqp.ofn.name",
48619 FT_STRING, BASE_NONE, NULL((void*)0), 0,
48620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48621
48622 {&hf_ieee80211_hs20_anqp_wan_metrics_link_status,
48623 {"Link Status", "wlan.hs20.anqp.wan_metrics.link_status",
48624 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) }},
48625
48626 {&hf_ieee80211_hs20_anqp_wan_metrics_symmetric_link,
48627 {"Symmetric Link", "wlan.hs20.anqp.wan_metrics.symmetric_link",
48628 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48629
48630 {&hf_ieee80211_hs20_anqp_wan_metrics_at_capacity,
48631 {"At Capacity", "wlan.hs20.anqp.wan_metrics.at_capacity",
48632 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48633
48634 {&hf_ieee80211_hs20_anqp_wan_metrics_reserved,
48635 {"Reserved", "wlan.hs20.anqp.wan_metrics.reserved",
48636 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48637
48638 {&hf_ieee80211_hs20_anqp_wan_metrics_downlink_speed,
48639 {"Downlink Speed", "wlan.hs20.anqp.wan_metrics.downlink_speed",
48640 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48641
48642 {&hf_ieee80211_hs20_anqp_wan_metrics_uplink_speed,
48643 {"Uplink Speed", "wlan.hs20.anqp.wan_metrics.uplink_speed",
48644 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48645
48646 {&hf_ieee80211_hs20_anqp_wan_metrics_downlink_load,
48647 {"Downlink Load", "wlan.hs20.anqp.wan_metrics.downlink_load",
48648 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48649
48650 {&hf_ieee80211_hs20_anqp_wan_metrics_uplink_load,
48651 {"Uplink Load", "wlan.hs20.anqp.wan_metrics.uplink_load",
48652 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48653
48654 {&hf_ieee80211_hs20_anqp_wan_metrics_lmd,
48655 {"LMD", "wlan.hs20.anqp.wan_metrics.lmd",
48656 FT_UINT16, BASE_DEC, NULL((void*)0), 0, "Load Measurement Duration", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48657
48658 {&hf_ieee80211_hs20_anqp_cc_proto_ip_proto,
48659 {"IP Protocol", "wlan.hs20.anqp.cc.ip_proto",
48660 FT_UINT8, BASE_DEC, VALS(hs20_cc_proto_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_proto_vals))
))
, 0,
48661 "ProtoPort Tuple - IP Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48662
48663 {&hf_ieee80211_hs20_anqp_cc_proto_port_num,
48664 {"Port Number", "wlan.hs20.anqp.cc.port_num",
48665 FT_UINT16, BASE_DEC, VALS(hs20_cc_port_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_port_vals)))
)
, 0,
48666 "ProtoPort Tuple - Port Number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48667
48668 {&hf_ieee80211_hs20_anqp_cc_proto_status,
48669 {"Status", "wlan.hs20.anqp.cc.status",
48670 FT_UINT8, BASE_DEC, VALS(hs20_cc_status_vals)((0 ? (const struct _value_string*)0 : ((hs20_cc_status_vals)
)))
, 0,
48671 "ProtoPort Tuple - Status", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48672
48673 {&hf_ieee80211_hs20_anqp_nai_hrq_count,
48674 {"NAI Home Realm Count", "wlan.hs20.anqp.nai_hrq.count",
48675 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48676
48677 {&hf_ieee80211_hs20_anqp_nai_hrq_encoding_type,
48678 {"NAI Home Realm Encoding Type",
48679 "wlan.hs20.anqp.nai_hrq.encoding_type",
48680 FT_UINT8, BASE_DEC, VALS(nai_realm_encoding_vals)((0 ? (const struct _value_string*)0 : ((nai_realm_encoding_vals
))))
,
48681 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48682
48683 {&hf_ieee80211_hs20_anqp_nai_hrq_length,
48684 {"NAI Home Realm Name Length", "wlan.hs20.anqp.nai_hrq.length",
48685 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48686
48687 {&hf_ieee80211_hs20_anqp_nai_hrq_realm_name,
48688 {"NAI Home Realm Name", "wlan.hs20.anqp.nai_hrq.name",
48689 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48690
48691 {&hf_ieee80211_hs20_anqp_oper_class_indic,
48692 {"Operating Class", "wlan.hs20.anqp.oper_class_indic.oper_class",
48693 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))),
48694 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48695
48696 {&hf_ieee80211_hs20_osu_friendly_names_len,
48697 {"OSU Friendly Name Length", "wlan.hs20.osu_friendly_names_len",
48698 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48699
48700 {&hf_ieee80211_hs20_osu_friendly_name_length,
48701 {"Length", "wlan.hs20.osu_friendly_name.len",
48702 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48703
48704 {&hf_ieee80211_hs20_osu_friendly_name_language,
48705 {"Language Code", "wlan.hs20.osu_friendly_name.language",
48706 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48707
48708 {&hf_ieee80211_hs20_osu_friendly_name_name,
48709 {"OSU Friendly Name", "wlan.hs20.osu_friendly_name.name",
48710 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48711
48712 {&hf_ieee80211_hs20_osu_server_uri_len,
48713 {"OSU Server URI Length", "wlan.hs20.osu_server_uri_len",
48714 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48715
48716 {&hf_ieee80211_hs20_osu_server_uri,
48717 {"OSU Server URI", "wlan.hs20.osu_server_uri",
48718 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48719
48720 {&hf_ieee80211_hs20_osu_method_list_len,
48721 {"OSU Method List Length", "wlan.hs20.osu_method_list_len",
48722 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48723
48724 {&hf_ieee80211_hs20_osu_method_val,
48725 {"OSU Method", "wlan.hs20.osu_method_list.method",
48726 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48727
48728 {&hf_ieee80211_hs20_icons_avail_len,
48729 {"Icons Available Length", "wlan.hs20.osu_icons_avail_len",
48730 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48731
48732 {&hf_ieee80211_hs20_osu_providers_list_ssid_len,
48733 {"SSID Length", "wlan.hs20.anqp_osu_prov_list.ssid_len",
48734 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48735
48736 {&hf_ieee80211_hs20_osu_providers_ssid,
48737 {"SSID", "wlan.hs20.anqp_osu_prov_list.ssid",
48738 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48739
48740 {&hf_ieee80211_hs20_osu_providers_count,
48741 {"Number of OSU Providers", "wlan.hs20.anqp_osu_prov_list.number",
48742 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48743
48744 {&hf_ieee80211_hs20_osu_prov_length,
48745 {"OSU Provider Length", "wlan.hs20.anqp_osu_prov.len",
48746 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48747
48748 {&hf_ieee80211_hs20_icon_request_filename,
48749 {"Icon Filename", "wlan.hs20.anqp_icon_request.icon_filename",
48750 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48751
48752 {&hf_ieee80211_osu_icon_avail_width,
48753 {"Icon Width", "wlan.hs20.osu_icons_avail.icon_width",
48754 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48755
48756 {&hf_ieee80211_osu_icon_avail_height,
48757 {"Icon Height", "wlan.hs20.osu_icons_avail.icon_height",
48758 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48759
48760 {&hf_ieee80211_osu_icon_avail_lang_code,
48761 {"Language Code", "wlan.hs20.osu_icons_avail.lang_code",
48762 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48763
48764 {&hf_ieee80211_osu_icon_avail_icon_type_len,
48765 {"Icon Type Length", "wlan.hs20.osu_icons_avail.icon_type_len",
48766 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48767
48768 {&hf_ieee80211_osu_icon_avail_icon_type,
48769 {"Icon Type", "wlan.hs20.osu_icons_avail.icon_type",
48770 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48771
48772 {&hf_ieee80211_osu_icon_avail_filename_len,
48773 {"Icon Filename Length", "wlan.hs20.osu_icons_avail.icon_filename_len",
48774 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48775
48776 {&hf_ieee80211_osu_icon_avail_filename,
48777 {"Icon Filename", "wlan.hs20.osu_icons_avail.icon_filename",
48778 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48779
48780 {&hf_ieee80211_hs20_osu_nai_len,
48781 {"OSU_NAI Length", "wlan.hs20.osu_nai.len",
48782 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48783
48784 {&hf_ieee80211_hs20_osu_nai,
48785 {"OSU_NAI", "wlan.hs20.osu_nai",
48786 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48787
48788 {&hf_ieee80211_hs20_osu_service_desc_len,
48789 {"OSU Service Description Length", "wlan.hs20.osu_service_desc_len",
48790 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48791
48792 {&hf_ieee80211_hs20_osu_service_desc_duple_len,
48793 {"Length", "wlan.hs20.osu_service_desc.duple.len",
48794 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48795
48796 {&hf_ieee80211_hs20_osu_service_desc_lang,
48797 {"Language Code", "wlan.hs20.osu_service_desc.duple.lang",
48798 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48799
48800 {&hf_ieee80211_hs20_osu_service_desc,
48801 {"OSU Service Description", "wlan.hs20.osu_service_desc.duple.desc",
48802 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48803
48804 {&hf_ieee80211_hs20_icon_binary_file_status,
48805 {"Download Status Code", "wlan.hs20.anqp_icon_request.download_status",
48806 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48807
48808 {&hf_ieee80211_hs20_icon_type_length,
48809 {"Icon Type Length", "wlan.hs20.anqp_icon_request.icon_type_len",
48810 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48811
48812 {&hf_ieee80211_hs20_icon_type,
48813 {"Icon Type", "wlan.hs20.anqp_icon_request.icon_type",
48814 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48815
48816 {&hf_ieee80211_hs20_icon_binary_data_len,
48817 {"Icon Binary Data Length", "wlan.anqp_icon_request.icon_binary_data_len",
48818 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48819
48820 {&hf_ieee80211_hs20_icon_binary_data,
48821 {"Icon Binary Data", "wlan.h220.anqp_icon_request.icon_binary_data",
48822 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48823
48824 {&hf_ieee80211_hs20_subscription_remediation_url_len,
48825 {"Server URL Length", "wlan.hs20.subs_remediation.server_url_len",
48826 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48827
48828 {&hf_ieee80211_hs20_subscription_remediation_server_url,
48829 {"Server URL", "wlan.hs20.subs_remediation.server_url",
48830 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48831
48832 {&hf_ieee80211_hs20_subscription_remediation_server_method,
48833 {"Server Method", "wlan.hs20.subs_remediation.server_method",
48834 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48835
48836 {&hf_ieee80211_hs20_deauth_reason_code,
48837 {"De-Auth Reason Code", "wlan.hs20.deauth.reason_code",
48838 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48839
48840 {&hf_ieee80211_hs20_reauth_delay,
48841 {"Re-Auth Delay", "wlan.hs20.deauth.reauth_delay",
48842 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) }},
48843
48844 {&hf_ieee80211_hs20_deauth_reason_url_len,
48845 {"Reason URL Length", "wlan.hs20.deauth.reason_url_len",
48846 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48847
48848 {&hf_ieee80211_hs20_deauth_imminent_reason_url,
48849 {"Reason URL", "wlan.hs20.deauth.reason_url",
48850 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48851
48852 {&hf_ieee80211_hs20_anqp_venue_url_length,
48853 {"Length", "wlan.hs20.venue_url.len",
48854 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48855
48856 {&hf_ieee80211_hs20_anqp_venue_number,
48857 {"Venue number", "wlan.hs20.venue_url.venue_num",
48858 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48859
48860 {&hf_ieee80211_hs20_anqp_venue_url,
48861 {"Venue URL", "wlan.hs20.venue_url.url",
48862 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48863
48864 {&hf_ieee80211_hs20_anqp_advice_of_charge_length,
48865 {"Length", "wlan.hs20.advice_of_charge.len",
48866 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48867
48868 {&hf_ieee80211_hs20_anqp_advice_of_charge_type,
48869 {"Advice of Charge Type", "wlan.hs20.advice_of_charge.type",
48870 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48871
48872 {&hf_ieee80211_hs20_anqp_aoc_nai_realm_encoding,
48873 {"NAI Realm Encoding", "wlan.hs20.advice_of_charge.nai_realm_enc",
48874 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48875
48876 {&hf_ieee80211_hs20_anqp_aoc_nai_realm_len,
48877 {"NAI Realm Length", "wlan.hs20.advice_of_charge.nai_realm_len",
48878 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48879
48880 {&hf_ieee80211_hs20_anqp_aoc_nai_realm,
48881 {"NAI Realm", "wlan.hs20.advice_of_charge.nai_realm",
48882 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48883
48884 {&hf_ieee80211_hs20_anqp_aoc_plan_len,
48885 {"Plan length", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_len",
48886 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48887
48888 {&hf_ieee80211_hs20_anqp_aoc_plan_lang,
48889 {"Plan language", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_lang",
48890 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48891
48892 {&hf_ieee80211_hs20_anqp_aoc_plan_curcy,
48893 {"Plan currency", "wlan.hs20.advice_of_charge.plan_info_tuples.plan_curcy",
48894 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48895
48896 {&hf_ieee80211_hs20_anqp_aoc_plan_information,
48897 {"Plan information", "wlan.hs20.advice_of_charge.plan_info_tuples.info",
48898 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48899
48900 {&hf_ieee80211_tag,
48901 {"Tag", "wlan.tag",
48902 FT_NONE, BASE_NONE, NULL((void*)0), 0,
48903 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48904
48905 {&hf_ieee80211_tag_number,
48906 {"Tag Number", "wlan.tag.number",
48907 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
48908 "Element ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48909
48910 {&hf_ieee80211_tag_length,
48911 {"Tag length", "wlan.tag.length",
48912 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
48913 "Length of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48914
48915 {&hf_ieee80211_tag_data,
48916 {"Tag Data", "wlan.tag.data",
48917 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48918 "Data Interpretation of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48919
48920 {&hf_ieee80211_tag_oui,
48921 {"OUI", "wlan.tag.oui",
48922 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
48923 "OUI of vendor specific IE", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48924
48925 {&hf_ieee80211_tag_oui_wfa_subtype,
48926 {"WFA Subtype", "wlan.tag.oui.wfa_subtype",
48927 FT_UINT8, BASE_DEC, VALS(wfa_subtype_vals)((0 ? (const struct _value_string*)0 : ((wfa_subtype_vals)))), 0,
48928 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48929
48930 {&hf_ieee80211_tag_ds_param_channel,
48931 {"Current Channel", "wlan.ds.current_channel",
48932 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48933 "DS Parameter Set - Current Channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48934
48935 {&hf_ieee80211_tag_cfp_count,
48936 {"CFP Count", "wlan.cfp.count",
48937 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48938 "Indicates how many delivery traffic indication messages (DTIMs)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48939
48940 {&hf_ieee80211_tag_cfp_period,
48941 {"CFP Period", "wlan.cfp.period",
48942 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48943 "Indicates the number of DTIM intervals between the start of CFPs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48944
48945 {&hf_ieee80211_tag_cfp_max_duration,
48946 {"CFP Max Duration", "wlan.cfp.max_duration",
48947 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48948 "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) }},
48949
48950 {&hf_ieee80211_tag_cfp_dur_remaining,
48951 {"CFP Dur Remaining", "wlan.cfp.dur_remaining",
48952 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48953 "Indicates the maximum time (in TU) remaining in the present CFP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48954
48955 {&hf_ieee80211_tag_vendor_oui_type,
48956 {"Vendor Specific OUI Type", "wlan.tag.vendor.oui.type",
48957 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
48958 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48959
48960 {&hf_ieee80211_tag_vendor_data,
48961 {"Vendor Specific Data", "wlan.tag.vendor.data",
48962 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48963 "Unknown/undecoded Vendor Specific Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48964
48965 {&hf_ieee80211_symbp_extreme_assoc_clients,
48966 {"Associated clients", "wlan.tag.symbol_proprietary.extreme.assoc_clients",
48967 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48968 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48969
48970 {&hf_ieee80211_symbp_extreme_load_kbps,
48971 {"Load", "wlan.tag.symbol_proprietary.extreme.load_kbps",
48972 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_kbps)((0 ? (const struct unit_name_string*)0 : ((&units_kbps))
))
, 0,
48973 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48974
48975 {&hf_ieee80211_symbp_extreme_load_pps,
48976 {"Load", "wlan.tag.symbol_proprietary.extreme.load_pps",
48977 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_pkts_per_sec)((0 ? (const struct unit_name_string*)0 : ((&units_pkts_per_sec
))))
, 0,
48978 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48979
48980 {&hf_ieee80211_symbp_extreme_client_tx_power,
48981 {"Desired client Tx power", "wlan.tag.symbol_proprietary.extreme.client_txpower",
48982 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
48983 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48984
48985 {&hf_ieee80211_symbp_extreme_timestamp,
48986 {"Timestamp", "wlan.tag.symbol_proprietary.extreme.timestamp",
48987 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL((void*)0), 0,
48988 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48989
48990 {&hf_ieee80211_tag_symbol_proprietary_oui,
48991 {"Symbol Proprietary OUI", "wlan.tag.symbol_proprietary.oui",
48992 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
48993 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48994
48995 {&hf_ieee80211_tag_symbol_proprietary_data,
48996 {"Symbol Proprietary Data", "wlan.tag.symbol_proprietary.data",
48997 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
48998 "Unknown/undecoded Symbol Proprietary Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
48999
49000 {&hf_ieee80211_tim_dtim_count,
49001 {"DTIM count", "wlan.tim.dtim_count",
49002 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49003 "Indicates how many Beacon frames (including the current frame) appear before the next DTIM", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49004
49005 {&hf_ieee80211_tim_dtim_period,
49006 {"DTIM period", "wlan.tim.dtim_period",
49007 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49008 "Indicates the number of beacon intervals between successive DTIMs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49009
49010 {&hf_ieee80211_tim_bmapctl,
49011 {"Bitmap control", "wlan.tim.bmapctl",
49012 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49013 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49014
49015 {&hf_ieee80211_tim_bmapctl_mcast,
49016 {"Multicast", "wlan.tim.bmapctl.multicast",
49017 FT_BOOLEAN, 8, NULL((void*)0), 0x1,
49018 "Contains the Traffic Indicator bit associated with Association ID 0", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49019
49020 {&hf_ieee80211_tim_bmapctl_offset,
49021 {"Bitmap Offset", "wlan.tim.bmapctl.offset",
49022 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE,
49023 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49024
49025 {&hf_ieee80211_tim_partial_virtual_bitmap,
49026 {"Partial Virtual Bitmap", "wlan.tim.partial_virtual_bitmap",
49027 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
49028 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49029
49030 {&hf_ieee80211_tim_aid,
49031 {"Association ID", "wlan.tim.aid",
49032 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
49033 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49034
49035 {&hf_ieee80211_tag_ibss_atim_window,
49036 {"Atim Windows", "wlan.ibss.atim_windows",
49037 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
49038 "Contains the ATIM Window length in TU", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49039
49040 {&hf_ieee80211_tag_country_info_code,
49041 {"Code", "wlan.country_info.code",
49042 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
49043 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49044
49045 {&hf_ieee80211_tag_country_info_env,
49046 {"Environment", "wlan.country_info.environment",
49047 FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS0x00008000, VALS(environment_vals)((0 ? (const struct _value_string*)0 : ((environment_vals)))), 0x0,
49048 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49049
49050 {&hf_ieee80211_tag_country_info_pad,
49051 {"Padding", "wlan.country_info.padding",
49052 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
49053 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49054
49055 {&hf_ieee80211_tag_country_info_fnm,
49056 {"Country Info", "wlan.country_info.fnm",
49057 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
49058 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49059
49060 {&hf_ieee80211_tag_country_info_fnm_fcn,
49061 {"First Channel Number", "wlan.country_info.fnm.fcn",
49062 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
49063 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49064
49065 {&hf_ieee80211_tag_country_info_fnm_nc,
49066 {"Number of Channels", "wlan.country_info.fnm.nc",
49067 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
49068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49069
49070 {&hf_ieee80211_tag_country_info_fnm_mtpl,
49071 {"Maximum Transmit Power Level", "wlan.country_info.fnm.mtpl",
49072 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
49073 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49074
49075 {&hf_ieee80211_tag_country_info_rrc,
49076 {"Country Info", "wlan.country_info.rrc",
49077 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
49078 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49079
49080 {&hf_ieee80211_tag_country_info_rrc_oei,
49081 {"Operating Extension Identifier", "wlan.country_info.rrc.oei",
49082 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
49083 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49084
49085 {&hf_ieee80211_tag_country_info_rrc_oc,
49086 {"Operating Class", "wlan.country_info.rrc.oc",
49087 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
49088 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49089
49090 {&hf_ieee80211_tag_country_info_rrc_cc,
49091 {"Coverage Class", "wlan.country_info.rrc.cc",
49092 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
49093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49094
49095 {&hf_ieee80211_tag_fh_hopping_parameter_prime_radix,
49096 {"Prime Radix", "wlan.fh_hopping.parameter.prime_radix",
49097 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
49098 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49099
49100 {&hf_ieee80211_tag_fh_hopping_parameter_nb_channels,
49101 {"Number of Channels", "wlan.fh_hopping.parameter.nb_channels",
49102 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
49103 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49104
49105 {&hf_ieee80211_tag_fh_hopping_table_flag,
49106 {"Flag", "wlan.fh_hopping.table.flag",
49107 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
49108 "Indicates that a Random Table is present when the value is 1", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49109
49110 {&hf_ieee80211_tag_fh_hopping_table_number_of_sets,
49111 {"Number of Sets", "wlan.fh_hopping.table.number_of_sets",
49112 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
49113 "Indicates the total number of sets within the hopping patterns", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49114
49115 {&hf_ieee80211_tag_fh_hopping_table_modulus,
49116 {"Modulus", "wlan.fh_hopping.table.modulus",
49117 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
49118 "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) }},
49119
49120 {&hf_ieee80211_tag_fh_hopping_table_offset,
49121 {"Offset", "wlan.fh_hopping.table.offset",
49122 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
49123 "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) }},
49124
49125 {&hf_ieee80211_tag_fh_hopping_random_table,
49126 {"Random Table", "wlan.fh_hopping.table.random_table",
49127 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
49128 "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) }},
49129
49130 {&hf_ieee80211_tag_request,
49131 {"Requested Element ID", "wlan.tag.request",
49132 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
49133 "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) }},
49134
49135 {&hf_ieee80211_tag_extended_request_id,
49136 {"Requested Element ID", "wlan.tag.extended_request.id",
49137 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_ext, 0,
49138 "The Element ID used to indicate an extended element", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49139
49140 {&hf_ieee80211_tag_extended_request_extension,
49141 {"Requested Element ID Extensions", "wlan.tag.extended_request.ext",
49142 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_eid_ext_ext, 0,
49143 "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) }},
49144
49145 {&hf_ieee80211_tclas_up,
49146 {"User Priority", "wlan.tclas.user_priority",
49147 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(user_prio_rvals)((0 ? (const struct _range_string*)0 : ((user_prio_rvals)))), 0,
49148 "Contains the value of the UP of the associated MSDUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49149
49150 {&hf_ieee80211_tclas_class_type,
49151 {"Classifier Type", "wlan.tclas.class_type",
49152 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(classifier_type)((0 ? (const struct _range_string*)0 : ((classifier_type)))), 0,
49153 "Specifies the type of classifier parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49154
49155 {&hf_ieee80211_tclas_class_mask,
49156 {"Classifier Mask", "wlan.tclas.class_mask",
49157 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49158 "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) }},
49159
49160 {&hf_ieee80211_tclas_mask_reserved,
49161 {"Reserved", "wlan.tclas.class_mask.reserved",
49162 FT_UINT8, BASE_HEX, NULL((void*)0), 0, "Class mask is reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49163
49164 {&hf_ieee80211_tclas_class_mask0_src_addr,
49165 {"Source Address", "wlan.tclas.class_mask.src_addr",
49166 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49167
49168 {&hf_ieee80211_tclas_class_mask0_dst_addr,
49169 {"Destination Address", "wlan.tclas.class_mask.dst_addr",
49170 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49171
49172 {&hf_ieee80211_tclas_class_mask0_type,
49173 {"Type", "wlan.tclas.class_mask.type",
49174 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49175
49176 {&hf_ieee80211_tclas_class_mask1_ver,
49177 {"Version", "wlan.tclas.class_mask.version",
49178 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49179
49180 {&hf_ieee80211_tclas_class_mask1_src_ip,
49181 {"Source IP Address", "wlan.tclas.class_mask.src_ip",
49182 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49183
49184 {&hf_ieee80211_tclas_class_mask1_dst_ip,
49185 {"Destination IP Address", "wlan.tclas.class_mask.dst_ip",
49186 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49187
49188 {&hf_ieee80211_tclas_class_mask1_src_port,
49189 {"Source Port", "wlan.tclas.class_mask.src_port",
49190 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49191
49192 {&hf_ieee80211_tclas_class_mask1_dst_port,
49193 {"Destination Port", "wlan.tclas.class_mask.dst_port",
49194 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49195
49196 {&hf_ieee80211_tclas_class_mask1_ipv4_dscp,
49197 {"DSCP", "wlan.tclas.class_mask.dscp",
49198 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49199
49200 {&hf_ieee80211_tclas_class_mask1_ipv4_proto,
49201 {"Protocol", "wlan.tclas.class_mask.proto",
49202 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49203
49204 {&hf_ieee80211_tclas_class_mask1_ipv6_flow,
49205 {"Flow Label", "wlan.tclas.class_mask.flow_label",
49206 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49207
49208 {&hf_ieee80211_tclas_class_mask1_reserved,
49209 {"Reserved", "wlan.tclas.class_mask.reserved",
49210 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49211
49212 {&hf_ieee80211_tclas_class_mask2_tci,
49213 {"802.1Q CLAN TCI", "wlan.tclas.class_mask.tci",
49214 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49215
49216 {&hf_ieee80211_tclas_src_mac_addr,
49217 {"Source address", "wlan.tclas.src_mac_addr",
49218 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
49219 "Classifier Parameters Ethernet Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49220
49221 {&hf_ieee80211_tclas_dst_mac_addr,
49222 {"Destination address", "wlan.tclas.dat_mac_addr",
49223 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
49224 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49225
49226 {&hf_ieee80211_tclas_ether_type,
49227 {"Ethernet Type", "wlan.tclas.ether_type",
49228 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49229 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49230
49231 {&hf_ieee80211_tclas_version,
49232 {"IP Version", "wlan.tclas.version",
49233 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49234 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49235
49236 {&hf_ieee80211_tclas_ipv4_src,
49237 {"IPv4 Src Addr", "wlan.tclas.ipv4_src",
49238 FT_IPv4, BASE_NONE, NULL((void*)0), 0,
49239 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49240
49241 {&hf_ieee80211_tclas_ipv4_dst,
49242 {"IPv4 Dst Addr", "wlan.tclas.ipv4_dst",
49243 FT_IPv4, BASE_NONE, NULL((void*)0), 0,
49244 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49245
49246 {&hf_ieee80211_tclas_src_port,
49247 {"Source Port", "wlan.tclas.src_port",
49248 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49249 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49250
49251 {&hf_ieee80211_tclas_dst_port,
49252 {"Destination Port", "wlan.tclas.dst_port",
49253 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49254 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49255
49256 {&hf_ieee80211_tclas_dscp,
49257 {"IPv4 DSCP", "wlan.tclas.dscp",
49258 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49259 "IPv4 Differentiated Services Code Point (DSCP) Field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49260
49261 {&hf_ieee80211_tclas_protocol,
49262 {"Protocol", "wlan.tclas.protocol",
49263 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
49264 "IPv4 Protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49265
49266 {&hf_ieee80211_tclas_ipv6_src,
49267 {"IPv6 Src Addr", "wlan.tclas.ipv6_src",
49268 FT_IPv6, BASE_NONE, NULL((void*)0), 0,
49269 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49270
49271 {&hf_ieee80211_tclas_ipv6_dst,
49272 {"IPv6 Dst Addr", "wlan.tclas.ipv6_dst",
49273 FT_IPv6, BASE_NONE, NULL((void*)0), 0,
49274 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49275
49276 {&hf_ieee80211_tclas_flow,
49277 {"Flow Label", "wlan.tclas.flow",
49278 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
49279 "IPv6 Flow Label", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49280
49281 {&hf_ieee80211_tclas_tag_type,
49282 {"802.1Q Tag Type", "wlan.tclas.tag_type",
49283 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49284 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49285
49286 {&hf_ieee80211_tclas_filter_offset,
49287 {"Filter Offset", "wlan.tclas.filter_offset",
49288 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49289
49290 {&hf_ieee80211_tclas_filter_value,
49291 {"Filter Value", "wlan.tclas.filter_value",
49292 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49293
49294 {&hf_ieee80211_tclas_filter_mask,
49295 {"Filter Mask", "wlan.tclas.filter_mask",
49296 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49297
49298 {&hf_ieee80211_tclas4_version,
49299 {"Version", "wlan.tclas.class4.version",
49300 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49301
49302 {&hf_ieee80211_tclas_class_mask4_ver,
49303 {"Version", "wlan.tclas.class4.mask.version",
49304 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) }},
49305
49306 {&hf_ieee80211_tclas_class_mask4_4_src_ip,
49307 {"Source IP (IPv4)", "wlan.tclas.class4.mask.ipv4_src",
49308 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) }},
49309
49310 {&hf_ieee80211_tclas_class_mask4_4_dst_ip,
49311 {"Destination IP (IPv4)", "wlan.tclas.class4.mask.ipv4_dst",
49312 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) }},
49313
49314 {&hf_ieee80211_tclas_class_mask4_src_port,
49315 {"Source Port", "wlan.tclas.class4.mask.src_port",
49316 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) }},
49317
49318 {&hf_ieee80211_tclas_class_mask4_dst_port,
49319 {"Destination Port", "wlan.tclas.class4.mask.dst_port",
49320 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) }},
49321
49322 {&hf_ieee80211_tclas_class_mask4_dscp,
49323 {"DSCP", "wlan.tclas.class4.mask.dscp",
49324 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) }},
49325
49326 {&hf_ieee80211_tclas_class_mask4_ipv4_proto,
49327 {"Protocol", "wlan.tclas.class4.mask.protocol",
49328 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) }},
49329
49330 {&hf_ieee80211_tclas_class_mask4_reserved,
49331 {"Reserved", "wlan.tclas.class4.mask.reserved",
49332 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49333
49334 {&hf_ieee80211_tclas_class_mask4_6_src_ip,
49335 {"Source IP (IPv6)", "wlan.tclas.class4.mask.ipv6_src",
49336 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) }},
49337
49338 {&hf_ieee80211_tclas_class_mask4_6_dst_ip,
49339 {"Destination IP (IPv6)", "wlan.tclas.class4.mask.ipv6_dst",
49340 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) }},
49341
49342 {&hf_ieee80211_tclas_reserved_bytes,
49343 {"Reserved", "wlan.tclas.reserved",
49344 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49345
49346 {&hf_ieee80211_tclas_class_mask4_next_hdr,
49347 {"Next Header", "wlan.tclas.class4.mask.next_header",
49348 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) }},
49349
49350 {&hf_ieee80211_tclas_class_mask4_flow_label,
49351 {"Flow Label", "wlan.tclas.class4.mask.flow_label",
49352 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) }},
49353
49354 {&hf_ieee80211_tclas4_ipv4_src,
49355 {"Source IP (IPv4)", "wlan.tclas.class4.ipv4_src_ip",
49356 FT_IPv4, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49357
49358 {&hf_ieee80211_tclas4_ipv4_dst,
49359 {"Destination IP (IPv4)", "wlan.tclas.class4.ipv4_dst_ip",
49360 FT_IPv4, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49361
49362 {&hf_ieee80211_tclas4_src_port,
49363 {"Source Port", "wlan.tclas.class4.src_port",
49364 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49365
49366 {&hf_ieee80211_tclas4_dst_port,
49367 {"Destination Port", "wlan.tclas.class4.dst_port",
49368 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49369
49370 {&hf_ieee80211_tclas4_dscp,
49371 {"DSCP", "wlan.tclas.class4.dscp",
49372 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49373
49374 {&hf_ieee80211_tclas4_protocol,
49375 {"Protocol", "wlan.tclas.class4.protocol",
49376 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49377
49378 {&hf_ieee80211_tclas4_reserved,
49379 {"Reserved", "wlan.tclas.class4.reserved",
49380 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49381
49382 {&hf_ieee80211_tclas4_ipv6_src,
49383 {"Source IP (IPv6)", "wlan.tclas.class4.ipv6_src_ip",
49384 FT_IPv6, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49385
49386 {&hf_ieee80211_tclas4_ipv6_dst,
49387 {"Destination IP (IPv6)", "wlan.tclas.class4.ipv6_dst_ip",
49388 FT_IPv6, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49389
49390 {&hf_ieee80211_tclas4_next_hdr,
49391 {"Next Header", "wlan.tclas.class4.next_header",
49392 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49393
49394 {&hf_ieee80211_tclas4_flow,
49395 {"Flow Label", "wlan.tclas.class4.flow_label",
49396 FT_UINT24, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49397
49398 {&hf_ieee80211_tclas_tclas_8021d_up_pcp,
49399 {"802.1D UP/802.1Q Priority Code Point", "wlan.tclas.class4.8021dq_up_pcp",
49400 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49401
49402 {&hf_ieee80211_tclas_8021q_dei,
49403 {"802.1Q DEI", "wlan.tclas.class4.8021q_dei",
49404 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49405
49406 {&hf_ieee80211_tclas_8021q_vid,
49407 {"802.1Q VID", "wlan.tclas.class4.8021q_vid",
49408 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49409
49410 {&hf_ieee80211_tclas_class_mask5_up_prio,
49411 {"802.1D UP/802.1Q PCP", "wlan.tclas.class5.mask.8021dq_up_prio",
49412 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) }},
49413
49414 {&hf_ieee80211_tclas_class_mask5_dei,
49415 {"802.1Q DEI", "wlan.tclas.class4.mask.8021q_dei",
49416 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) }},
49417
49418 {&hf_ieee80211_tclas_class_mask5_vid,
49419 {"802.1Q VID", "wlan.tclas.class4.mask.8021q_vid",
49420 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49421
49422 {&hf_ieee80211_tclas_class_mask5_reserved,
49423 {"Reserved", "wlan.tclas.class5.mask.reserved",
49424 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49425
49426 {&hf_ieee80211_tclas_class_mask6_a_above,
49427 {"Classifier Mask", "wlan.tclas.class6-9.mask",
49428 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49429
49430 {&hf_ieee80211_tclas_class_mask6_frame_control_match_spec,
49431 {"Frame Control", "wlan.tclas.class6.mask.frame_control",
49432 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49433 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49434
49435 {&hf_ieee80211_tclas_class_mask6_duration_id_match_spec,
49436 {"Duration ID", "wlan.tclas.class6.mask.duration_id",
49437 FT_UINT24, BASE_HEX, VALS(duration_id_mask_vals)((0 ? (const struct _value_string*)0 : ((duration_id_mask_vals
))))
,
49438 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49439
49440 {&hf_ieee80211_tclas_class_mask6_address_1_match_spec,
49441 {"Address 1", "wlan.tclas.class6.mask.address_1",
49442 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) }},
49443
49444 {&hf_ieee80211_tclas_class_mask6_address_2_match_spec,
49445 {"Address 2", "wlan.tclas.class6.mask.address_2",
49446 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) }},
49447
49448 {&hf_ieee80211_tclas_class_mask6_address_3_match_spec,
49449 {"Address 3", "wlan.tclas.class6.mask.address_3",
49450 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) }},
49451
49452 {&hf_ieee80211_tclas_class_mask6_sequence_control_spec,
49453 {"Sequence Control", "wlan.tclas.class6.mask.sequence_control",
49454 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49455 0x00C000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49456
49457 {&hf_ieee80211_tclas_class_mask6_address_4_match_spec,
49458 {"Address 4", "wlan.tclas.class6.mask.address_4",
49459 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) }},
49460
49461 {&hf_ieee80211_tclas_class_mask6_qos_control_spec,
49462 {"QoS Control", "wlan.tclas.class6.mask.qos_control",
49463 FT_UINT24, BASE_HEX, VALS(qos_control_mask_vals)((0 ? (const struct _value_string*)0 : ((qos_control_mask_vals
))))
,
49464 0x0C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49465
49466 {&hf_ieee80211_tclas_class_mask6_ht_control_spec,
49467 {"HT Control", "wlan.tclas.class6.mask.ht_control",
49468 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) }},
49469
49470 {&hf_ieee80211_tclas_class_mask6_reserved,
49471 {"Reserved", "wlan.tclas.class6.mask.reserved",
49472 FT_UINT24, BASE_HEX, NULL((void*)0), 0xC00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49473
49474 {&hf_ieee80211_tclas6_frame_control_spec,
49475 {"Frame Control Spec", "wlan.tclas.class6.frame_control_spec",
49476 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49477
49478 {&hf_ieee80211_tclas6_frame_control_mask,
49479 {"Frame Control Mask", "wlan.tclas.class6.frame_control_mask",
49480 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49481
49482 {&hf_ieee80211_tclas6_duration_spec,
49483 {"Duration Spec", "wlan.tclas.class6.duration_spec",
49484 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49485
49486 {&hf_ieee80211_tclas6_duration_mask,
49487 {"Duration Mask", "wlan.tclas.class6.duration_mask",
49488 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49489
49490 {&hf_ieee80211_tclas6_address_1_spec,
49491 {"Address 1 Spec", "wlan.tclas.class6.address_1_spec",
49492 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49493
49494 {&hf_ieee80211_tclas6_address_1_mask,
49495 {"Address 1 Mask", "wlan.tclas.class6.address_1_mask",
49496 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49497
49498 {&hf_ieee80211_tclas6_address_2_spec,
49499 {"Address 2 Spec", "wlan.tclas.class6.address_2_spec",
49500 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49501
49502 {&hf_ieee80211_tclas6_address_2_mask,
49503 {"Address 2 Mask", "wlan.tclas.class6.address_2_mask",
49504 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49505
49506 {&hf_ieee80211_tclas6_address_3_spec,
49507 {"Address 3 Spec", "wlan.tclas.class6.address_3_spec",
49508 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49509
49510 {&hf_ieee80211_tclas6_address_3_mask,
49511 {"Address 3 Mask", "wlan.tclas.class6.address_3_mask",
49512 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49513
49514 {&hf_ieee80211_tclas6_sequence_control_spec,
49515 {"Sequence Control Spec", "wlan.tclas.class6.sequence_control_spec",
49516 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49517
49518 {&hf_ieee80211_tclas6_sequence_control_mask,
49519 {"Sequence Control Mask", "wlan.tclas.class6.sequence_control_mask",
49520 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49521
49522 {&hf_ieee80211_tclas6_address_4_spec,
49523 {"Address 4 Spec", "wlan.tclas.class6.address_4_spec",
49524 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49525
49526 {&hf_ieee80211_tclas6_address_4_mask,
49527 {"Address 4 Mask", "wlan.tclas.class6.address_4_mask",
49528 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49529
49530 {&hf_ieee80211_tclas6_qos_control_spec,
49531 {"QoS Control Spec", "wlan.tclas.class6.qos_control_spes",
49532 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49533
49534 {&hf_ieee80211_tclas6_qos_control_mask,
49535 {"QoS Control Mask", "wlan.tclas.class6.qos_control_mask",
49536 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49537
49538 {&hf_ieee80211_tclas6_ht_control_spec,
49539 {"HT Control Spec", "wlan.tclas.class6.ht_control_spec",
49540 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49541
49542 {&hf_ieee80211_tclas6_ht_control_mask,
49543 {"HT Control Mask", "wlan.tclas.class6.ht_control_mask",
49544 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49545
49546 {&hf_ieee80211_tclas_class_mask7_frame_control_match_spec,
49547 {"Frame Control Match", "wlan.tclas.class7.frame_control_spec",
49548 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49549 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49550
49551 {&hf_ieee80211_tclas_class_mask7_address_1_sid_match_spec,
49552 {"Address 1 (SID) Spec", "wlan.tclas.class4.address_1_sid_spec",
49553 FT_UINT24, BASE_HEX, VALS(address_1_sid_mask_vals)((0 ? (const struct _value_string*)0 : ((address_1_sid_mask_vals
))))
,
49554 0x00000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49555
49556 {&hf_ieee80211_tclas_class_mask7_address_2_match_spec,
49557 {"Address 2 Spec", "wlan.tclas.class7.address_2i_match_spec",
49558 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) }},
49559
49560 {&hf_ieee80211_tclas_class_mask7_sequence_control_spec,
49561 {"Sequence Control Spec", "wlan.tclas.class7.sequence_control_spec",
49562 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49563 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49564
49565 {&hf_ieee80211_tclas_class_mask7_address_3_match_spec,
49566 {"Address 3 Spec", "wlan.tclas.class7.address_3_match_spec",
49567 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) }},
49568
49569 {&hf_ieee80211_tclas_class_mask7_address_4_match_spec,
49570 {"Address 4 Spec", "wlan.tclas.class7.address_4_match_spec",
49571 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) }},
49572
49573 {&hf_ieee80211_tclas_class_mask7_reserved,
49574 {"Reserved", "wlan.tclas.class7.reserved",
49575 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49576
49577 {&hf_ieee80211_tclas7_frame_control_spec,
49578 {"Frame Control Spec", "wlan.tclas.class7.frame_control_spec",
49579 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49580
49581 {&hf_ieee80211_tclas7_frame_control_mask,
49582 {"Frame Control Mask", "wlan.tclas.class7.frame_control_mask",
49583 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49584
49585 {&hf_ieee80211_tclas7_address_1_sid_spec,
49586 {"Address 1 (SID) Spec", "wlan.tclas.class7.address_1_sid_spec",
49587 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49588
49589 {&hf_ieee80211_tclas7_address_1_sid_mask,
49590 {"Address 1 (SID) Mask", "wlan.tclas.class7.address_1_sid_mask",
49591 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49592
49593 {&hf_ieee80211_tclas7_address_2_spec,
49594 {"Address 2 Spec", "wlan.tclas.class7.address_2_spec",
49595 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49596
49597 {&hf_ieee80211_tclas7_address_2_mask,
49598 {"Address 2 Mask", "wlan.tclas.class7.address_2_mask",
49599 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49600
49601 {&hf_ieee80211_tclas7_sequence_control_spec,
49602 {"Sequence Control Spec", "wlan.tclas.class7.sequence_control_spec",
49603 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49604
49605 {&hf_ieee80211_tclas7_sequence_control_mask,
49606 {"Sequence Control Mask", "wlan.tclas.class7.sequence_control_mask",
49607 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49608
49609 {&hf_ieee80211_tclas7_address_3_spec,
49610 {"Address 3 Spec", "wlan.tclas.class7.address_3_spec",
49611 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49612
49613 {&hf_ieee80211_tclas7_address_3_mask,
49614 {"Address 3 Mask", "wlan.tclas.class7.address_3_mask",
49615 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49616
49617 {&hf_ieee80211_tclas7_address_4_spec,
49618 {"Address 4 Spec", "wlan.tclas.class4.address_4_spec",
49619 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49620
49621 {&hf_ieee80211_tclas7_address_4_mask,
49622 {"Address 4 Mask", "wlan.tclas.class4.address_4_mask",
49623 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49624
49625 {&hf_ieee80211_tclas_class_mask8_frame_control_match_spec,
49626 {"Frame Control Spec", "wlan.tclas.class8.mask.frame_control_spec",
49627 FT_UINT24, BASE_HEX, VALS(frame_control_mask_vals)((0 ? (const struct _value_string*)0 : ((frame_control_mask_vals
))))
,
49628 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49629
49630 {&hf_ieee80211_tclas_class_mask8_address_1_bssid_match_spec,
49631 {"Address 1 (BSSID) Spec", "wlan.tclas.class8.mask.address_1_bssid_spec",
49632 FT_UINT24, BASE_HEX, VALS(address_1_bssid_mask_vals)((0 ? (const struct _value_string*)0 : ((address_1_bssid_mask_vals
))))
,
49633 0x00000C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49634
49635 {&hf_ieee80211_tclas_class_mask8_address_2_sid_match_spec,
49636 {"Address 2 (SID) Spec", "wlan.tclas.class8.mask.address_2_sid_spec",
49637 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) }},
49638
49639 {&hf_ieee80211_tclas_class_mask8_sequence_control_spec,
49640 {"Sequence Control Spec", "wlan.tclas.class8.mask.sequence_control_spec",
49641 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49642 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49643
49644 {&hf_ieee80211_tclas_class_mask8_address_3_match_spec,
49645 {"Address 3 Spec", "wlan.tclas.class8.mask.address_3_spec",
49646 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) }},
49647
49648 {&hf_ieee80211_tclas_class_mask8_address_4_match_spec,
49649 {"Address 4 Spec", "wlan.tclas.class8.mask.address_4_spec",
49650 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) }},
49651
49652 {&hf_ieee80211_tclas_class_mask8_reserved,
49653 {"Reserved", "wlan.tclas.class8.reserved",
49654 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49655
49656 {&hf_ieee80211_tclas8_frame_control_spec,
49657 {"Frame Control Spec", "wlan.tclas.class8.frame_control_spec",
49658 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49659
49660 {&hf_ieee80211_tclas8_frame_control_mask,
49661 {"Frame Control Mask", "wlan.tclas.class8.frame_control_mask",
49662 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49663
49664 {&hf_ieee80211_tclas8_address_1_bssid_spec,
49665 {"Address 1 (BSSID) Spec", "wlan.tclas.class8.address_1_bssid_spec",
49666 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49667
49668 {&hf_ieee80211_tclas8_address_1_bssid_mask,
49669 {"Address 1 (BSSID) Mask", "wlan.tclas.class8.address_1_bssid_mask",
49670 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49671
49672 {&hf_ieee80211_tclas8_address_2_sid_spec,
49673 {"Address 2 (SID) Spec", "wlan.tclas.class8.address_2_sid_spec",
49674 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49675
49676 {&hf_ieee80211_tclas8_address_2_sid_mask,
49677 {"Address 2 (SID) Spec", "wlan.tclas.class8.address_2_sid_spec",
49678 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49679
49680 {&hf_ieee80211_tclas8_sequence_control_spec,
49681 {"Sequence Control Spec", "wlan.tclas.class8.sequence_control_spec",
49682 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49683
49684 {&hf_ieee80211_tclas8_sequence_control_mask,
49685 {"Sequence Control Mask", "wlan.tclas.class8.sequence_control_mask",
49686 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49687
49688 {&hf_ieee80211_tclas8_address_3_spec,
49689 {"Address 3 Spec", "wlan.tclas.class8.address_3_spec",
49690 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49691
49692 {&hf_ieee80211_tclas8_address_3_mask,
49693 {"Address 3 Mask", "wlan.tclas.class8.address_3_mask",
49694 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49695
49696 {&hf_ieee80211_tclas8_address_4_spec,
49697 {"Address 4 Spec", "wlan.tclas.class8.address_4_spec",
49698 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49699
49700 {&hf_ieee80211_tclas8_address_4_mask,
49701 {"Address 4 Mask", "wlan.tclas.class8.address_4_mask",
49702 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49703
49704 {&hf_ieee80211_tclas_class_mask9_frame_control_match_spec,
49705 {"Frame Control Spec", "wlan.tclas.class9.frame_control_spec",
49706 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) }},
49707
49708 {&hf_ieee80211_tclas_class_mask9_address_1_match_spec,
49709 {"Address 1 Spec", "wlan.tclas.class9.mask.address_1_spec",
49710 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) }},
49711
49712 {&hf_ieee80211_tclas_class_mask9_address_2_match_spec,
49713 {"Address 2 Spec", "wlan.tclas.class9.mask.address_2_spec",
49714 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) }},
49715
49716 {&hf_ieee80211_tclas_class_mask9_sequence_control_spec,
49717 {"Sequence Control Spec", "wlan.tclas.class9.mask.sequence_control_spec",
49718 FT_UINT24, BASE_HEX, VALS(sequence_control_mask_vals)((0 ? (const struct _value_string*)0 : ((sequence_control_mask_vals
))))
,
49719 0x0000C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49720
49721 {&hf_ieee80211_tclas_class_mask9_reserved,
49722 {"Reserved", "wlan.tclas.class9.mask.reserved",
49723 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49724
49725 {&hf_ieee80211_tclas9_frame_control_spec,
49726 {"Frame Control Spec", "wlan.tclas.class9.frame_control_spec",
49727 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49728
49729 {&hf_ieee80211_tclas9_frame_control_mask,
49730 {"Frame Control Mask", "wlan.tclas.class9.frame_control_mask",
49731 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49732
49733 {&hf_ieee80211_tclas9_address_1_spec,
49734 {"Address 1 Spec", "wlan.tclas.class9.address_1_spec",
49735 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49736
49737 {&hf_ieee80211_tclas9_address_1_mask,
49738 {"Address 1 Mask", "wlan.tclas.class9.address_1_mask",
49739 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49740
49741 {&hf_ieee80211_tclas9_address_2_spec,
49742 {"Address 2 Spec", "wlan.tclas.class9.address_2_spec",
49743 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49744
49745 {&hf_ieee80211_tclas9_address_2_mask,
49746 {"Address 2 Mask", "wlan.tclas.class9.address_2_mask",
49747 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49748
49749 {&hf_ieee80211_tclas9_sequence_control_spec,
49750 {"Sequence Control Spec", "wlan.tclas.class9.sequence_control_spec",
49751 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49752
49753 {&hf_ieee80211_tclas9_sequence_control_mask,
49754 {"Sequence Control Mask", "wlan.tclas.class9.sequence_control_mask",
49755 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49756
49757 {&hf_ieee80211_tclas10_protocol_instance,
49758 {"Protocol Instance", "wlan.tclas.class10.protocol_instance",
49759 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49760
49761 {&hf_ieee80211_tclas10_protocol_num_next_hdr,
49762 {"Protocol Number or Next Header",
49763 "wlan.tclas.class10.proto_num_or_next_hdr",
49764 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49765
49766 {&hf_ieee80211_tag_challenge_text,
49767 {"Challenge Text", "wlan.tag.challenge_text",
49768 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49770
49771 {&hf_ieee80211_tag_oui_wfa_action_type,
49772 {"OUI Type", "wlan.action.oui_type",
49773 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) }},
49774
49775 {&hf_ieee80211_oui_qos_subtype,
49776 {"OUI Subtype", "wlan.action.dscp_policy.oui_subtype",
49777 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) }},
49778
49779 {&hf_ieee80211_oui_qos_mgmt_dialog_token,
49780 {"Dialog Token", "wlan.action.dscp_policy.dialog_token",
49781 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49782
49783 {&hf_ieee80211_oui_qos_mgmt_rqst_control,
49784 {"Request Control", "wlan.action.dscp_policy.request.control",
49785 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49786
49787 {&hf_ieee80211_oui_qos_mgmt_rq_ctrl_more,
49788 {"More", "wlan.action.dscp_policy.request.control.more",
49789 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49790
49791 {&hf_ieee80211_oui_qos_mgmt_rq_ctrl_reset,
49792 {"Reset", "wlan.action.dscp_policy.request.control.reset",
49793 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49794
49795 {&hf_ieee80211_oui_qos_mgmt_rq_reserved,
49796 {"Reserved", "wlan.action.dscp_policy.request.control.reserved",
49797 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49798
49799 {&hf_ieee80211_dscp_policy_id,
49800 {"Policy ID", "wlan.action.dscp_policy_response.policy_id",
49801 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49802
49803 {&hf_ieee80211_dscp_policy_status,
49804 {"Status", "wlan.action.dscp_policy_response.policy_status",
49805 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49806
49807 {&hf_ieee80211_oui_qos_mgmt_resp_control,
49808 {"Response Control", "wlan.action.dscp_policy.request.control",
49809 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49810
49811 {&hf_ieee80211_oui_qos_mgmt_rsp_ctrl_more,
49812 {"More", "wlan.action.dscp_policy.response.control.more",
49813 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49814
49815 {&hf_ieee80211_oui_qos_mgmt_rsp_ctrl_reset,
49816 {"Reset", "wlan.action.dscp_policy.response.control.reset",
49817 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49818
49819 {&hf_ieee80211_oui_qos_mgmt_rsp_reserved,
49820 {"Reserved", "wlan.action.dscp_policy.response.control.reserved",
49821 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49822
49823 {&hf_ieee80211_dscp_policy_scs_sts_list,
49824 {"Status List", "wlan.action.dscp_policy_response.policy_status_list",
49825 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49826
49827 {&hf_ieee80211_oui_qos_mgmt_count,
49828 {"Count", "wlan.action.dscp_policy.response.count",
49829 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49830
49831 {&hf_ieee80211_tag_he_6ghz_cap_inf,
49832 {"Capabilities Information", "wlan.tag.he_6ghz.cap_inf",
49833 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49835
49836 {&hf_ieee80211_tag_he_6ghz_cap_inf_b0_b2,
49837 {"Minimum MPDU Start Spacing", "wlan.tag.he_6ghz.cap_inf.b0_b2",
49838 FT_UINT16, BASE_HEX, VALS(s1g_min_mpdu_start_spacing_vals)((0 ? (const struct _value_string*)0 : ((s1g_min_mpdu_start_spacing_vals
))))
, 0x0007,
49839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49840
49841 {&hf_ieee80211_tag_he_6ghz_cap_inf_b3_b5,
49842 {"Maximum A-MPDU Length Exponent", "wlan.tag.he_6ghz.cap_inf.b3_b5",
49843 FT_UINT16, BASE_HEX, VALS(vht_max_ampdu_flag)((0 ? (const struct _value_string*)0 : ((vht_max_ampdu_flag))
))
, 0x0038,
49844 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49845
49846 {&hf_ieee80211_tag_he_6ghz_cap_inf_b6_b7,
49847 {"Maximum MPDU Length", "wlan.tag.he_6ghz.cap_inf.b6_b7",
49848 FT_UINT16, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x00C0,
49849 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49850
49851 {&hf_ieee80211_tag_he_6ghz_cap_inf_b8,
49852 {"Reserved", "wlan.tag.he_6ghz.cap_inf.b8",
49853 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0100,
49854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49855
49856 {&hf_ieee80211_tag_he_6ghz_cap_inf_b9_b10,
49857 {"SM Power Save", "wlan.tag.he_6ghz.cap_inf.b9b_b10",
49858 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag)((0 ? (const struct _value_string*)0 : ((ht_sm_pwsave_flag)))
)
, 0x0600,
49859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49860
49861 {&hf_ieee80211_tag_he_6ghz_cap_inf_b11,
49862 {"RD Responder", "wlan.tag.he_6ghz.cap_inf.b11",
49863 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800,
49864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49865
49866 {&hf_ieee80211_tag_he_6ghz_cap_inf_b12,
49867 {"Rx Antenna Pattern Consistency", "wlan.tag.he_6ghz.cap_inf.b12",
49868 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x1000,
49869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49870
49871 {&hf_ieee80211_tag_he_6ghz_cap_inf_b13,
49872 {"Tx Antenna Pattern Consistency", "wlan.tag.he_6ghz.cap_inf.b13",
49873 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x2000,
49874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49875
49876 {&hf_ieee80211_tag_he_6ghz_cap_inf_b14_b15,
49877 {"Reserved", "wlan.tag.he_6ghz.cap_inf.b14_b15",
49878 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000,
49879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49880
49881 {&hf_ieee80211_tag_ftm_tsf_sync_info,
49882 {"TSF Sync Info", "wlan.tag.ftm_tsf_sync_info",
49883 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
49884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49885
49886 {&hf_ieee80211_rsn_version,
49887 {"RSN Version", "wlan.rsn.version",
49888 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49889 "Indicates the version number of the RSNA protocol", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49890
49891 {&hf_ieee80211_rsn_gcs,
49892 {"Group Cipher Suite", "wlan.rsn.gcs",
49893 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gcs_base_custom)((const void *) (size_t) (rsn_gcs_base_custom)), 0,
49894 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49895
49896 {&hf_ieee80211_rsn_gcs_oui,
49897 {"Group Cipher Suite OUI", "wlan.rsn.gcs.oui",
49898 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49900
49901 {&hf_ieee80211_rsn_gcs_type,
49902 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
49903 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49905
49906 {&hf_ieee80211_rsn_gcs_80211_type,
49907 {"Group Cipher Suite type", "wlan.rsn.gcs.type",
49908 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
49909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49910
49911 {&hf_ieee80211_rsn_pcs_count,
49912 {"Pairwise Cipher Suite Count", "wlan.rsn.pcs.count",
49913 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49914 "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) }},
49915
49916 {&hf_ieee80211_rsn_pcs_list,
49917 {"Pairwise Cipher Suite List", "wlan.rsn.pcs.list",
49918 FT_NONE, BASE_NONE, NULL((void*)0), 0,
49919 "Contains a series of cipher suite selectors that indicate the pairwisecipher suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49920
49921 {&hf_ieee80211_rsn_pcs,
49922 {"Pairwise Cipher Suite", "wlan.rsn.pcs",
49923 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_pcs_base_custom)((const void *) (size_t) (rsn_pcs_base_custom)), 0,
49924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49925
49926 {&hf_ieee80211_rsn_pcs_oui,
49927 {"Pairwise Cipher Suite OUI", "wlan.rsn.pcs.oui",
49928 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49930
49931 {&hf_ieee80211_rsn_pcs_type,
49932 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
49933 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49935
49936 {&hf_ieee80211_rsn_pcs_80211_type,
49937 {"Pairwise Cipher Suite type", "wlan.rsn.pcs.type",
49938 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
49939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49940
49941 {&hf_ieee80211_rsn_akms_count,
49942 {"Auth Key Management (AKM) Suite Count", "wlan.rsn.akms.count",
49943 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
49944 "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) }},
49945
49946 {&hf_ieee80211_rsn_akms_list,
49947 {"Auth Key Management (AKM) List", "wlan.rsn.akms.list",
49948 FT_NONE, BASE_NONE, NULL((void*)0), 0,
49949 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49950
49951 {&hf_ieee80211_rsn_akms,
49952 {"Auth Key Management (AKM) Suite", "wlan.rsn.akms",
49953 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_akms_base_custom)((const void *) (size_t) (rsn_akms_base_custom)), 0,
49954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49955
49956 {&hf_ieee80211_rsn_akms_oui,
49957 {"Auth Key Management (AKM) OUI", "wlan.rsn.akms.oui",
49958 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
49959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49960
49961 {&hf_ieee80211_rsn_akms_type,
49962 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
49963 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
49964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49965
49966 {&hf_ieee80211_rsn_akms_80211_type,
49967 {"Auth Key Management (AKM) type", "wlan.rsn.akms.type",
49968 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_keymgmt_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_keymgmt_vals
))))
, 0,
49969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49970
49971 {&hf_ieee80211_rsn_cap,
49972 {"RSN Capabilities", "wlan.rsn.capabilities",
49973 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
49974 "RSN Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49975
49976 {&hf_ieee80211_rsn_cap_preauth,
49977 {"RSN Pre-Auth capabilities", "wlan.rsn.capabilities.preauth",
49978 FT_BOOLEAN, 16, TFS(&rsn_preauth_flags)((0 ? (const struct true_false_string*)0 : ((&rsn_preauth_flags
))))
, 0x0001,
49979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49980
49981 {&hf_ieee80211_rsn_cap_no_pairwise,
49982 {"RSN No Pairwise capabilities", "wlan.rsn.capabilities.no_pairwise",
49983 FT_BOOLEAN, 16, TFS(&rsn_no_pairwise_flags)((0 ? (const struct true_false_string*)0 : ((&rsn_no_pairwise_flags
))))
, 0x0002,
49984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49985
49986 {&hf_ieee80211_rsn_cap_ptksa_replay_counter,
49987 {"RSN PTKSA Replay Counter capabilities", "wlan.rsn.capabilities.ptksa_replay_counter",
49988 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)((0 ? (const struct _value_string*)0 : ((rsn_cap_replay_counter
))))
, 0x000C,
49989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49990
49991 {&hf_ieee80211_rsn_cap_gtksa_replay_counter,
49992 {"RSN GTKSA Replay Counter capabilities", "wlan.rsn.capabilities.gtksa_replay_counter",
49993 FT_UINT16, BASE_HEX, VALS(rsn_cap_replay_counter)((0 ? (const struct _value_string*)0 : ((rsn_cap_replay_counter
))))
, 0x0030,
49994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
49995
49996 {&hf_ieee80211_rsn_cap_mfpr,
49997 {"Management Frame Protection Required", "wlan.rsn.capabilities.mfpr",
49998 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0040,
49999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50000
50001 {&hf_ieee80211_rsn_cap_mfpc,
50002 {"Management Frame Protection Capable", "wlan.rsn.capabilities.mfpc",
50003 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x0080,
50004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50005
50006 {&hf_ieee80211_rsn_cap_jmr,
50007 {"Joint Multi-band RSNA", "wlan.rsn.capabilities.jmr",
50008 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0100,
50009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50010
50011 {&hf_ieee80211_rsn_cap_peerkey,
50012 {"PeerKey Enabled", "wlan.rsn.capabilities.peerkey",
50013 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0200,
50014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50015
50016 {&hf_ieee80211_rsn_cap_spp_amsdu_cap,
50017 {"SPP A-MSDU Capable", "wlan.rsn.capabilities.spp_amsdu_cap",
50018 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x0400,
50019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50020
50021 {&hf_ieee80211_rsn_cap_spp_amsdu_req,
50022 {"SPP A-MSDU Required", "wlan.rsn.capabilities.spp_amsdu_req",
50023 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0800,
50024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50025
50026 {&hf_ieee80211_rsn_cap_pbac,
50027 {"PBAC (protected block ack agreement capable)", "wlan.rsn.capabilities.pbac",
50028 FT_BOOLEAN, 16, TFS(&tfs_capable_not_capable)((0 ? (const struct true_false_string*)0 : ((&tfs_capable_not_capable
))))
, 0x1000,
50029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50030
50031 {&hf_ieee80211_rsn_cap_extended_key_id_iaf,
50032 {"Extended Key ID for Individually Addressed Frames",
50033 "wlan.rsn.capabilities.extended_key_id_iaf",
50034 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) }},
50035
50036 {&hf_ieee80211_rsn_cap_ocvc,
50037 {"OCVC", "wlan.rsn.capabilities.ocvc",
50038 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x4000,
50039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50040
50041 {&hf_ieee80211_rsn_pmkid_count,
50042 {"PMKID Count", "wlan.rsn.pmkid.count",
50043 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
50044 "Indicates the number of PMKID selectors that are contained in the PMKID Suite List", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50045
50046 {&hf_ieee80211_rsn_pmkid_list,
50047 {"PMKID List", "wlan.rsn.pmkid.list",
50048 FT_NONE, BASE_NONE, NULL((void*)0), 0,
50049 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50050
50051 {&hf_ieee80211_rsn_pmkid,
50052 {"PMKID", "wlan.pmkid.akms",
50053 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
50054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50055
50056 {&hf_ieee80211_rsn_gmcs,
50057 {"Group Management Cipher Suite", "wlan.rsn.gmcs",
50058 FT_UINT32, BASE_CUSTOM, CF_FUNC(rsn_gmcs_base_custom)((const void *) (size_t) (rsn_gmcs_base_custom)), 0,
50059 "Contains the cipher suite selector used by the BSS to protect broadcast/multicast traffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50060
50061 {&hf_ieee80211_rsn_gmcs_oui,
50062 {"Group Management Cipher Suite OUI", "wlan.rsn.gmcs.oui",
50063 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
50064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50065
50066 {&hf_ieee80211_rsn_gmcs_type,
50067 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
50068 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
50069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50070
50071 {&hf_ieee80211_rsn_gmcs_80211_type,
50072 {"Group Management Cipher Suite type", "wlan.rsn.gmcs.type",
50073 FT_UINT8, BASE_DEC, VALS(ieee80211_rsn_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_rsn_cipher_vals
))))
, 0,
50074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50075
50076 {&hf_ieee80211_ht_pren_type,
50077 {"802.11n (Pre) Type", "wlan.vs.pren.type",
50078 FT_UINT8, BASE_DEC, VALS(ieee80211_ht_pren_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_ht_pren_type_vals
))))
, 0,
50079 "Vendor Specific HT Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50080 {&hf_ieee80211_ht_pren_unknown,
50081 {"802.11n (Pre) Unknown Data", "wlan.vs.pren.unknown_data",
50082 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
50083 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50084
50085 {&hf_ieee80211_ht_cap,
50086 {"HT Capabilities Info", "wlan.ht.capabilities",
50087 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
50088 "HT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50089
50090 {&hf_ieee80211_ht_vs_cap,
50091 {"HT Capabilities Info (VS)", "wlan.vs.ht.capabilities",
50092 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
50093 "Vendor Specific HT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50094
50095 {&hf_ieee80211_ht_ldpc_coding,
50096 {"HT LDPC coding capability", "wlan.ht.capabilities.ldpccoding",
50097 FT_BOOLEAN, 16, TFS(&ht_ldpc_coding_flag)((0 ? (const struct true_false_string*)0 : ((&ht_ldpc_coding_flag
))))
, 0x0001,
50098 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50099
50100 {&hf_ieee80211_ht_chan_width,
50101 {"HT Support channel width", "wlan.ht.capabilities.width",
50102 FT_BOOLEAN, 16, TFS(&ht_chan_width_flag)((0 ? (const struct true_false_string*)0 : ((&ht_chan_width_flag
))))
, 0x0002,
50103 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50104
50105 {&hf_ieee80211_ht_sm_pwsave,
50106 {"HT SM Power Save", "wlan.ht.capabilities.sm",
50107 FT_UINT16, BASE_HEX, VALS(ht_sm_pwsave_flag)((0 ? (const struct _value_string*)0 : ((ht_sm_pwsave_flag)))
)
, 0x000c,
50108 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50109
50110 {&hf_ieee80211_ht_green,
50111 {"HT Green Field", "wlan.ht.capabilities.green",
50112 FT_BOOLEAN, 16, TFS(&ht_green_flag)((0 ? (const struct true_false_string*)0 : ((&ht_green_flag
))))
, 0x0010,
50113 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50114
50115 {&hf_ieee80211_ht_short20,
50116 {"HT Short GI for 20MHz", "wlan.ht.capabilities.short20",
50117 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020,
50118 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50119
50120 {&hf_ieee80211_ht_short40,
50121 {"HT Short GI for 40MHz", "wlan.ht.capabilities.short40",
50122 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040,
50123 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50124
50125 {&hf_ieee80211_ht_tx_stbc,
50126 {"HT Tx STBC", "wlan.ht.capabilities.txstbc",
50127 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0080,
50128 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50129
50130 {&hf_ieee80211_ht_rx_stbc,
50131 {"HT Rx STBC", "wlan.ht.capabilities.rxstbc",
50132 FT_UINT16, BASE_HEX, VALS(ht_rx_stbc_flag)((0 ? (const struct _value_string*)0 : ((ht_rx_stbc_flag)))), 0x0300,
50133 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50134
50135 {&hf_ieee80211_ht_reserved_b10,
50136 {"Reserved", "wlan.ht.capabilities.info_reserved_b10",
50137 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0400,
50138 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50139
50140 {&hf_ieee80211_ht_max_amsdu,
50141 {"HT Max A-MSDU length", "wlan.ht.capabilities.amsdu",
50142 FT_BOOLEAN, 16, TFS(&ht_max_amsdu_flag)((0 ? (const struct true_false_string*)0 : ((&ht_max_amsdu_flag
))))
, 0x0800,
50143 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50144
50145 {&hf_ieee80211_ht_dss_cck_40,
50146 {"HT DSSS/CCK mode in 40MHz", "wlan.ht.capabilities.dsscck",
50147 FT_BOOLEAN, 16, TFS(&ht_dss_cck_40_flag)((0 ? (const struct true_false_string*)0 : ((&ht_dss_cck_40_flag
))))
, 0x1000,
50148 "HT DSS/CCK mode in 40MHz", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50149
50150 {&hf_ieee80211_ht_reserved_b13,
50151 {"Reserved", "wlan.ht.capabilities.info_reserved_b13",
50152 FT_UINT16, BASE_HEX, NULL((void*)0), 0x2000,
50153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50154
50155 {&hf_ieee80211_ht_40_mhz_intolerant,
50156 {"HT Forty MHz Intolerant", "wlan.ht.capabilities.40mhzintolerant",
50157 FT_BOOLEAN, 16, TFS(&ht_40_mhz_intolerant_flag)((0 ? (const struct true_false_string*)0 : ((&ht_40_mhz_intolerant_flag
))))
, 0x4000,
50158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50159
50160 {&hf_ieee80211_ht_reserved_b15,
50161 {"Reserved", "wlan.ht.capabilities.info_reserved_b15",
50162 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000,
50163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50164
50165 {&hf_ieee80211_ext_bss_mu_mimo_capable_sta_count,
50166 {"MU-MIMO Capable STA Count", "wlan.ext_bss.mu_mimo_capable_sta_count",
50167 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
50168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50169
50170 {&hf_ieee80211_ext_bss_ss_underutilization,
50171 {"Spatial Stream Underutilization", "wlan.ext_bss.ss_underutilization",
50172 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
50173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50174
50175 {&hf_ieee80211_ext_bss_observable_sec_20mhz_utilization,
50176 {"Observable Secondary 20MHz Utilization", "wlan.ext_bss.observable_sec_20mhz_utilization",
50177 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
50178 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50179
50180 {&hf_ieee80211_ext_bss_observable_sec_40mhz_utilization,
50181 {"Observable Secondary 40MHz Utilization", "wlan.ext_bss.observable_sec_40mhz_utilization",
50182 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
50183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50184
50185 {&hf_ieee80211_ext_bss_observable_sec_80mhz_utilization,
50186 {"Observable Secondary 80MHz Utilization", "wlan.ext_bss.observable_sec_80mhz_utilization",
50187 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
50188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50189
50190 {&hf_ieee80211_wide_bw_new_channel_width,
50191 {"New Channel Width", "wlan.wide_bw.new_channel_width",
50192 FT_UINT8, BASE_HEX, VALS(vht_operation_info_channel_width)((0 ? (const struct _value_string*)0 : ((vht_operation_info_channel_width
))))
, 0x0,
50193 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50194
50195 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment0,
50196 {"New Channel Center Frequency Segment 0", "wlan.wide_bw.new_channel_center_freq_segment0",
50197 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
50198 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50199
50200 {&hf_ieee80211_wide_bw_new_channel_center_freq_segment1,
50201 {"New Channel Center Frequency Segment 1", "wlan.wide_bw.new_channel_center_freq_segment1",
50202 FT_UINT8, BASE_HEX_DEC, NULL((void*)0), 0x0,
50203 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50204
50205 {&hf_ieee80211_operat_notification_mode,
50206 {"Operating Mode Notification", "wlan.operat_notification_mode",
50207 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
50208 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50209
50210 {&hf_ieee80211_operat_mode_field_channel_width,
50211 {"Channel Width", "wlan.operat_mode_field.channelwidth",
50212 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03,
50213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50214
50215 {&hf_ieee80211_operat_mode_field_160_80plus80_bw,
50216 {"160/80+80 BW", "wlan.operat_mode_field.160_80plus80_bw",
50217 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04,
50218 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50219
50220 {&hf_ieee80211_operat_mode_field_no_ldpc,
50221 {"No LDPC", "wlan.operat_mode_field.no_ldpc",
50222 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
50223 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50224
50225 {&hf_ieee80211_operat_mode_field_rxnss,
50226 {"Rx NSS", "wlan.operat_mode_field.rxnss",
50227 FT_UINT8, BASE_HEX, VALS(operat_mode_field_rxnss)((0 ? (const struct _value_string*)0 : ((operat_mode_field_rxnss
))))
, 0x70,
50228 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50229
50230 {&hf_ieee80211_operat_mode_field_rxnsstype,
50231 {"Rx NSS Type", "wlan.operat_mode_field.rxnsstype",
50232 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
50233 "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) }},
50234
50235 {&hf_ieee80211_tbtt_info,
50236 {"TBTT Information Field", "wlan.rnr.tbtt_info",
50237 FT_UINT16, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50238
50239 {&hf_ieee80211_tbtt_filtered_nap,
50240 {"TBTT Filtered Neighbor AP", "wlan.rnr.tbtt_info.fna",
50241 FT_UINT16, BASE_DEC, NULL((void*)0), 1<<2, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50242
50243 {&hf_ieee80211_tbtt_info_count,
50244 {"TBTT Information Count", "wlan.rnr.tbtt_info.info_count",
50245 FT_UINT16, BASE_DEC, NULL((void*)0), 0xf<<4, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50246
50247 {&hf_ieee80211_tbtt_info_length,
50248 {"TBTT Information Length", "wlan.rnr.tbtt_info.info_len",
50249 FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(tbtt_info_length)((0 ? (const struct _range_string*)0 : ((tbtt_info_length)))),
50250 0xff<<8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50251
50252 {&hf_ieee80211_tbtt_operating_class,
50253 {"Operating Class", "wlan.rnr.tbtt_info.operating_class",
50254 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50255
50256 {&hf_ieee80211_tbtt_channel_number,
50257 {"Channel Number", "wlan.rnr.tbtt_info.channel_num",
50258 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50259
50260 {&hf_ieee80211_tbtt_offset,
50261 {"Neighbor AP TBTT Offset", "wlan.rnr.tbtt_info.tbtt_offset",
50262 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50263
50264 {&hf_ieee80211_tbtt_bssid,
50265 {"BSSID", "wlan.rnr.tbtt_info.bssid",
50266 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50267
50268 {&hf_ieee80211_tbtt_short_ssid,
50269 {"Short SSID", "wlan.rnr.tbtt_info.sh_ssid",
50270 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50271
50272 {&hf_ieee80211_rnr_bss_params,
50273 {"BSS Parameters", "wlan.rnr.tbtt_info.bss_parameters",
50274 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50275
50276 {&hf_ieee80211_rnr_oct_recommended,
50277 {"OCT Recommended", "wlan.rnr.tbtt_info.bss_parameters.oct_recommended",
50278 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50279
50280 {&hf_ieee80211_rnr_same_ssid,
50281 {"Same SSID", "wlan.rnr.tbtt_info.bss_parameters.same_ssid",
50282 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50283
50284 {&hf_ieee80211_rnr_multiple_bssid,
50285 {"Multiple BSSID", "wlan.rnr.tbtt_info.bss_parameters.multiple_bssid",
50286 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50287
50288 {&hf_ieee80211_rnr_transmitted_bssid,
50289 {"Transmitted BSSID", "wlan.rnr.tbtt_info.bss_parameters.transmitted_bssid",
50290 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50291
50292 {&hf_ieee80211_rnr_ess_with_colocated_ap,
50293 {"Member of ESS with 2.4/5 GHz Co-Located AP",
50294 "wlan.rnr.tbtt_info.bss_parameters.member_of_ess_with_2p4_5_ghz_colocated_ap",
50295 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50296
50297 {&hf_ieee80211_rnr_unsolicited_probe_responses,
50298 {"Unsolicited Probe Responses",
50299 "wlan.rnr.tbtt_info.bss_parameters.unsolicited_probe_responses",
50300 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50301
50302 {&hf_ieee80211_rnr_same_colocated_ap,
50303 {"Co-Located AP", "wlan.rnr.tbtt_info.bss_parameters.colocated_ap",
50304 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50305
50306 {&hf_ieee80211_rnr_same_reserved,
50307 {"Reserved", "wlan.rnr.tbtt_info.bss_parameters.reserved",
50308 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50309
50310 {&hf_ieee80211_rnr_20mhz_psd_subfield,
50311 {"PSD Subfield", "wlan.rnr.tbtt_info.psd_subfield",
50312 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) }},
50313
50314 {&hf_ieee80211_rnr_reserved_data,
50315 {"Reserved", "wlan.rnr.tbtt_info.reserved",
50316 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50317
50318 {&hf_ieee80211_rnr_mld_params,
50319 {"MLD Parameters", "wlan.rnr.tbtt_info.mld_parameters",
50320 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50321
50322 {&hf_ieee80211_rnr_mld_id,
50323 {"MLD ID", "wlan.rnr.tbtt_info.mld_parameters.mld_id",
50324 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50325
50326 {&hf_ieee80211_rnr_mld_link_id,
50327 {"Link ID", "wlan.rnr.tbtt_info.mld_parameters.link_id",
50328 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50329
50330 {&hf_ieee80211_rnr_mld_bss_params_change_count,
50331 {"BSS Parameters Change Count",
50332 "wlan.rnr.tbtt_info.mld_parameters.bss_params_change_count",
50333 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0FF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50334
50335 {&hf_ieee80211_rnr_mld_all_updates_included,
50336 {"All Updates Included",
50337 "wlan.rnr.tbtt_info.mld_parameters.all_updates_included",
50338 FT_BOOLEAN, 24, NULL((void*)0), 0x100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50339
50340 {&hf_ieee80211_rnr_mld_disabled_link_indication,
50341 {"Disabled Link Indication",
50342 "wlan.rnr.tbtt_info.mld_parameters.disabled_link_indication",
50343 FT_BOOLEAN, 24, NULL((void*)0), 0x200000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50344
50345 {&hf_ieee80211_rnr_mld_reserved,
50346 {"Reserved", "wlan.rnr.tbtt_info.mld_parameters.reserved",
50347 FT_UINT24, BASE_HEX, NULL((void*)0), 0xC00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50348
50349 {&hf_ieee80211_s1g_cap_byte1,
50350 {"S1G Capabilities Byte 1", "wlan.s1g.capabilities.byte1",
50351 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50352
50353 {&hf_ieee80211_s1g_cap_byte2,
50354 {"S1G Capabilities Byte 2", "wlan.s1g.capabilities.byte2",
50355 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50356
50357 {&hf_ieee80211_s1g_cap_byte3,
50358 {"S1G Capabilities Byte 3", "wlan.s1g.capabilities.byte3",
50359 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50360
50361 {&hf_ieee80211_s1g_cap_byte4,
50362 {"S1G Capabilities Byte 4", "wlan.s1g.capabilities.byte4",
50363 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50364
50365 {&hf_ieee80211_s1g_cap_byte5,
50366 {"S1G Capabilities Byte 5", "wlan.s1g.capabilities.byte5",
50367 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50368
50369 {&hf_ieee80211_s1g_cap_byte6,
50370 {"S1G Capabilities Byte 6", "wlan.s1g.capabilities.byte6",
50371 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50372
50373 {&hf_ieee80211_s1g_cap_byte7,
50374 {"S1G Capabilities Byte 7", "wlan.s1g.capabilities.byte7",
50375 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50376
50377 {&hf_ieee80211_s1g_cap_byte8,
50378 {"S1G Capabilities Byte 8", "wlan.s1g.capabilities.byte8",
50379 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50380
50381 {&hf_ieee80211_s1g_cap_byte9,
50382 {"S1G Capabilities Byte 9", "wlan.s1g.capabilities.byte9",
50383 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50384
50385 {&hf_ieee80211_beacon_sequence,
50386 {"Beacon Sequence", "wlan.s1g.beacon_sequence",
50387 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50388
50389 {&hf_ieee80211_pentapartial_timestamp,
50390 {"Pentapartial Timestamp", "wlan.s1g.pentapartial_timestamp",
50391 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50392
50393 {&hf_ieee80211_tack_next_twt_info,
50394 {"Next TWT Info/Suspend Duration", "wlan.s1g.next_twt_info",
50395 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50396
50397 {&hf_ieee80211_tack_next_twt,
50398 {"Next TWT", "wlan.s1g.next_twt",
50399 FT_UINT40, BASE_HEX, NULL((void*)0), 0x1FFFFFFFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50400
50401 {&hf_ieee80211_tack_flow_identifier,
50402 {"TWT Flow Identifier", "wlan.s1g.twt_flow_identifier",
50403 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50404
50405 {&hf_ieee80211_s1g_cap_byte10,
50406 {"S1G Capabilities Byte 10", "wlan.s1g.capabilities.byte10",
50407 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50408
50409 {&hf_ieee80211_s1g_cap_s1g_long_support,
50410 {"S1G_LONG Support", "wlan.s1g.capabilities.s1g_long_support",
50411 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) }},
50412
50413 {&hf_ieee80211_s1g_cap_short_gi_for_1_mhz,
50414 {"Short GI for 1MHz", "wlan.s1g.capabilities.short_gi_for_1_mhz",
50415 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) }},
50416
50417 {&hf_ieee80211_s1g_cap_short_gi_for_2_mhz,
50418 {"Short GI for 2MHz", "wlan.s1g.capabilities.short_gi_for_2_mhz",
50419 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) }},
50420
50421 {&hf_ieee80211_s1g_cap_short_gi_for_4_mhz,
50422 {"Short GI for 4MHz", "wlan.s1g.capabilities.short_gi_for_4_mhz",
50423 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) }},
50424
50425 {&hf_ieee80211_s1g_cap_short_gi_for_8_mhz,
50426 {"Short GI for 8MHz", "wlan.s1g.capabilities.short_gi_for_8_mhz",
50427 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) }},
50428
50429 {&hf_ieee80211_s1g_cap_short_gi_for_16_mhz,
50430 {"Short GI for 16MHz", "wlan.s1g.capabilities.short_gi_for_16_mhz",
50431 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) }},
50432
50433 {&hf_ieee80211_s1g_cap_supported_channel_width,
50434 {"Supported Channel Width", "wlan.s1g.capabilities.supported_channel_width",
50435 FT_UINT8, BASE_HEX, VALS(s1g_supported_channel_width_vals)((0 ? (const struct _value_string*)0 : ((s1g_supported_channel_width_vals
))))
, 0xC0,
50436 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50437
50438 {&hf_ieee80211_s1g_cap_rx_ldpc,
50439 {"Rx LDPC", "wlan.s1g.capabilities.rx_ldpc",
50440 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) }},
50441
50442 {&hf_ieee80211_s1g_cap_tx_stbc,
50443 {"Tx STBC", "wlan.s1g.capabilities.tx_stbc",
50444 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) }},
50445
50446 {&hf_ieee80211_s1g_cap_rx_stbc,
50447 {"Rx STBC", "wlan.s1g.capabilities.rx_stbc",
50448 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) }},
50449
50450 {&hf_ieee80211_s1g_cap_su_beamformer_capable,
50451 {"SU Beamformer Capable", "wlan.s1g.capabilities.su_beamformer_capable",
50452 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) }},
50453
50454 {&hf_ieee80211_s1g_cap_su_beamformee_capable,
50455 {"SU Beamformee Capable", "wlan.s1g.capabilities.su_beamformee_capable",
50456 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) }},
50457
50458 {&hf_ieee80211_s1g_cap_beamformee_sts_capability,
50459 {"Beamformee STS Capability", "wlan.s1g.capabilities.sts_beamformee_capability",
50460 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50461
50462 {&hf_ieee80211_s1g_cap_number_sounding_dimensions,
50463 {"Number of Sounding Dimensions", "wlan.s1g.capabilities.number_sounding_dimensions",
50464 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50465
50466 {&hf_ieee80211_s1g_cap_mu_beamformer_capable,
50467 {"MU Beamformer Capable", "wlan.s1g.capabilities.beamformer_capable",
50468 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) }},
50469
50470 {&hf_ieee80211_s1g_cap_mu_beamformee_capable,
50471 {"MU Beamformee Capable", "wlan.s1g.capabilities.beamformee_capable",
50472 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) }},
50473
50474 {&hf_ieee80211_s1g_cap_htc_vht_capable,
50475 {"+HTC-VHT Capable", "wlan.s1g.capabilities.htc_vht_capable",
50476 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) }},
50477
50478 {&hf_ieee80211_s1g_cap_travelling_pilot_support,
50479 {"Traveling Pilot Support", "wlan.s1g.capabilities.traveling_pilot_support",
50480 FT_UINT8, BASE_HEX, VALS(s1g_traveling_pilot_support_vals)((0 ? (const struct _value_string*)0 : ((s1g_traveling_pilot_support_vals
))))
, 0xC0,
50481 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50482
50483 {&hf_ieee80211_s1g_cap_rd_responder,
50484 {"RD Responder", "wlan.s1g.capabilities.rd_responder",
50485 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) }},
50486
50487 {&hf_ieee80211_s1g_cap_ht_delayed_block_ack,
50488 {"HT Delayed Block Ack", "wlan.s1g.capabilities.ht_delayed_block_ack",
50489 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) }},
50490
50491 {&hf_ieee80211_s1g_cap_maximum_mpdu_length,
50492 {"Maximum MPDU Length", "wlan.s1g.capabilities.max_mpdu_length",
50493 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) }},
50494
50495 {&hf_ieee80211_s1g_cap_maximum_a_mpdu_length_exp,
50496 {"Maximum A-MPDU Length Exponent", "wlan.s1g.capabilities.max_a_mpdu_length_exp",
50497 FT_UINT8, BASE_DEC, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50498
50499 {&hf_ieee80211_s1g_cap_minimum_mpdu_start_spacing,
50500 {"Minimum MPDU Start Spacing", "wlan.s1g.capabilities.min_mpdu_start_spacing",
50501 FT_UINT8, BASE_DEC, VALS(s1g_min_mpdu_start_spacing_vals)((0 ? (const struct _value_string*)0 : ((s1g_min_mpdu_start_spacing_vals
))))
, 0xE0,
50502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50503
50504 {&hf_ieee80211_s1g_cap_uplink_sync_capable,
50505 {"Uplink Sync Capable", "wlan.s1g.capabilities.uplink_sync_capable",
50506 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) }},
50507
50508 {&hf_ieee80211_s1g_cap_dynamic_aid,
50509 {"Dynamic AID", "wlan.s1g.capabilities.dynamic_aid",
50510 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) }},
50511
50512 {&hf_ieee80211_s1g_cap_bat_support,
50513 {"BAT Support", "wlan.s1g.capabilities.bat_support",
50514 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) }},
50515
50516 {&hf_ieee80211_s1g_cap_tim_ade_support,
50517 {"TIM AID Support", "wlan.s1g.capabilities.tim_aid_support",
50518 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) }},
50519
50520 {&hf_ieee80211_s1g_cap_non_tim_support,
50521 {"Non TIM Support", "wlan.s1g.capabilities.non_tim_support",
50522 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) }},
50523
50524 {&hf_ieee80211_s1g_cap_group_aid_support,
50525 {"Group AID Support", "wlan.s1g.capabilities.group_aid_support",
50526 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) }},
50527
50528 {&hf_ieee80211_s1g_cap_sta_type_support,
50529 {"STA Type Support", "wlan.s1g.capabilities.sta_type_support",
50530 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) }},
50531
50532 {&hf_ieee80211_s1g_cap_centralized_authentication_control,
50533 {"Centralized Authentication Control", "wlan.s1g.capabilities.centralized_authentication_control",
50534 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) }},
50535
50536 {&hf_ieee80211_s1g_cap_distributed_authentication_control,
50537 {"Distributed Authentication Control", "wlan.s1g.capabilities.distributed_authentication_control",
50538 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) }},
50539
50540 {&hf_ieee80211_s1g_cap_a_msdu_support,
50541 {"A-MSDU Supported", "wlan.s1g.capabilities.a_msdu_supported",
50542 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) }},
50543
50544 {&hf_ieee80211_s1g_cap_a_mpdu_support,
50545 {"A-MPDU Support", "wlan.s1g.capabilities.a_mpdu_support",
50546 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) }},
50547
50548 {&hf_ieee80211_s1g_cap_asymmetic_block_ack_support,
50549 {"Asymmetric Block Ack Supported", "wlan.s1g.capabilities.asymmetric_block_ack_supported",
50550 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) }},
50551
50552 {&hf_ieee80211_s1g_cap_flow_control_support,
50553 {"Flow Control Supported", "wlan.s1g.capabilities.flow_control_supported",
50554 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) }},
50555
50556 {&hf_ieee80211_s1g_cap_sectorized_beam_capable,
50557 {"Sectorized Beam Capable", "wlan.s1g.capabilities.sectorized_beam_capable",
50558 FT_UINT8, BASE_HEX, VALS(s1g_sectorized_beam_capable_vals)((0 ? (const struct _value_string*)0 : ((s1g_sectorized_beam_capable_vals
))))
, 0xC0,
50559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50560
50561 {&hf_ieee80211_s1g_cap_obss_mitigation_support,
50562 {"OBSS Mitigation Support", "wlan.s1g.capabilities.obss_mitigation_support",
50563 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) }},
50564
50565 {&hf_ieee80211_s1g_cap_fragment_ba_support,
50566 {"Fragment BA Support", "wlan.s1g.capabilities.fragment_ba_support",
50567 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) }},
50568
50569 {&hf_ieee80211_s1g_cap_ndp_ps_poll_supported,
50570 {"NDS PS-Poll Supported", "wlan.s1g.capabilities.nds_ps_poll_supported",
50571 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) }},
50572
50573 {&hf_ieee80211_s1g_cap_raw_operation_support,
50574 {"Raw Operation Support", "wlan.s1g.capabilities.raw_operation_support",
50575 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) }},
50576
50577 {&hf_ieee80211_s1g_cap_page_slicing_support,
50578 {"Page Slicing Support", "wlan.s1g.capabilities.page_slicing_support",
50579 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) }},
50580
50581 {&hf_ieee80211_s1g_cap_txop_sharing_implicit_ack_support,
50582 {"TXOP Sharing Implicit Ack Support", "wlan.s1g.capabilities.txop_sharing_implicit_ack_support",
50583 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) }},
50584
50585 {&hf_ieee80211_s1g_cap_vht_link_adaptation_capable,
50586 {"VHT Link Adaptation Capable", "wlan.s1g.capabilities.vht_link_adaptation_capable",
50587 FT_UINT8, BASE_HEX, VALS(s1g_vht_link_adaptation_vals)((0 ? (const struct _value_string*)0 : ((s1g_vht_link_adaptation_vals
))))
, 0xC0,
50588 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
50589
50590 {&hf_ieee80211_s1g_cap_tack_support_as_ps_poll_response,
50591 {"TACK Support as PS-Poll Response", "wlan.s1g.capabilities.tack_support_as_ps_poll_response",
50592 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) }},
50593
50594 {&hf_ieee80211_s1g_cap_duplicate_1_mhz_support,
50595 {"Duplicate 1 MHz Support", "wlan.s1g.capabilities.duplicate_1_mhz_support",
50596 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) }},
50597
50598 {&hf_ieee80211_s1g_cap_mcs_negotiation_support,
50599 {"MCS Negotiation Support", "wlan.s1g.capabilities.ms_negotiation_support",
50600 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) }},
50601
50602 {&hf_ieee80211_s1g_cap_1_mhz_control_response_preamble_support,
50603 {"1 MHz Control Response Preamble Supported",
50604 "wlan.s1g.capabilities.1_mhz_control_response_preamble_supported",
50605 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) }},
50606
50607 {&hf_ieee80211_s1g_cap_ndp_beamforming_report_poll_support,
50608 {"NDP Beamforming Report Poll Supported",
50609 "wlan.s1g.capabilities.ndp_beamforming_report_poll_supported",
50610 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) }},
50611
50612 {&hf_ieee80211_s1g_cap_unsolicited_dynamic_aid,
50613 {"Unsolicited Dynamic AID", "wlan.s1g.capabilities.unsolicited_dynamic_aid",
50614 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) }},
50615
50616 {&hf_ieee80211_s1g_cap_sector_training_operation_supported,
50617 {"Sector Training Operation Supported",
50618 "wlan.s1g.capabilities.sector_training_operation_supported",
50619 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) }},
50620
50621 {&hf_ieee80211_s1g_cap_temporary_ps_mode_switch,
50622 {"Temporary PS Mode Switch",
50623 "wlan.s1g.capabilities.temporary_ps_mode_switch",
50624 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) }},
50625
50626 {&hf_ieee80211_s1g_cap_twt_grouping_support,
50627 {"TWT Grouping Support", "wlan.s1g.capabilities.twt_grouping_support",
50628 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) }},
50629
50630 {&hf_ieee80211_s1g_cap_bdt_capable,
50631 {"BDT Capable", "wlan.s1g.capabilities.bdt_capable",
50632 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) }},
50633
50634 {&hf_ieee80211_s1g_cap_color,
50635 {"COLOR", "wlan.s1g.capabilities.color",
50636 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50637
50638 {&hf_ieee80211_s1g_cap_twt_requester_support,
50639 {"TWT Requester Support", "wlan.s1g.capabilities.twt_requester_support",
50640 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) }},
50641
50642 {&hf_ieee80211_s1g_cap_twt_responder_support,
50643 {"TWT Responder Support", "wlan.s1g.capabilities.twt_responder_support",
50644 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) }},
50645
50646 {&hf_ieee80211_s1g_cap_pv1_frame_support,
50647 {"PV1 Frame Support", "wlan.s1g.capabilities.pv1_frame_support",
50648 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) }},
50649
50650 {&hf_ieee80211_s1g_cap_link_adaptation_per_normal_control_response_capable,
50651 {"Link Adaptation per Normal Control Response Capable",
50652 "wlan.s1g.capabilities.link_adaptation_per_normal_control_response_capable",
50653 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) }},
50654
50655 {&hf_ieee80211_s1g_cap_reserved,
50656 {"Reserved", "wlan.s1g.capabilities.reserved",
50657 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50658
50659 {&hf_ieee80211_s1g_mcs_and_nss_set,
50660 {"Supported S1G-MCS and NSS Set", "wlan.s1g.supported_mcs_nss_set",
50661 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50662
50663 {&hf_ieee80211_s1g_rx_s1g_mcs_map,
50664 {"Rx S1G-MCS Map", "wlan.s1g.supported_mcs_nss_set.rx_s1g_mcs_map",
50665 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00000000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50666
50667 {&hf_ieee80211_s1g_rx_highest_supported_long_gi_data_rate,
50668 {"Rx Highest Supported Long GI Data Rate",
50669 "wlan.s1g.supported_mcs_nss_set.rx_highest_supported_long_gi_data_rate",
50670 FT_UINT40, BASE_HEX, NULL((void*)0), 0x000001FF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50671
50672 {&hf_ieee80211_s1g_tx_s1g_mcs_map,
50673 {"Tx S1G-MCS Map", "wlan.s1g.supported_mcs_nss_set.tx_s1g_mcs_map",
50674 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001FE0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50675
50676 {&hf_ieee80211_s1g_tx_highest_supported_long_gi_data_rate,
50677 {"Tx Highest Supported Long GI Data Rate",
50678 "wlan.s1g.supported_mcs_nss_set.tx_highest_supported_long_gi_data_rate",
50679 FT_UINT40, BASE_HEX, NULL((void*)0), 0x03FE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50680
50681 {&hf_ieee80211_s1g_rx_single_spatial_stream_map_for_1_mhz,
50682 {"Rx Single Spatial Stream and S1G-MCS Map for 1MHz",
50683 "wlan.s1g.supported_mcs_nss_set.rx_single_spatial_stream_1_mhz",
50684 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0C00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50685
50686 {&hf_ieee80211_s1g_tx_single_spatial_stream_map_for_1_mhz,
50687 {"Tx Single Spatial Stream and S1G-MCS Map for 1MHz",
50688 "wlan.s1g.supported_mcs_nss_set.tx_single_spatial_stream_1_mhz",
50689 FT_UINT40, BASE_HEX, NULL((void*)0), 0x3000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50690
50691 {&hf_ieee80211_s1g_mcs_and_nss_reserved,
50692 {"Reserved", "wlan.s1g.supported_mcs_nss_set.reserved",
50693 FT_UINT40, BASE_HEX, NULL((void*)0), 0xC000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50694
50695 {&hf_ieee80211_s1g_subchannel_selective_transmission,
50696 {"Channel Activity Schedule", "wlan.sst.channel_activity_schedule",
50697 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50698
50699 {&hf_ieee80211_s1g_sst_sounding_option,
50700 {"Sounding Option", "wlan.sst.channel_activity_schedule.sounding_option",
50701 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50702
50703 {&hf_ieee80211_s1g_channel_activity_bitmap,
50704 {"Channel Activity Bitmap", "wlan.sst.channel_activity_schedule.channel_activity_bitmap",
50705 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001FE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50706
50707 {&hf_ieee80211_s1g_ul_activity,
50708 {"UL Activity", "wlan.sst.channel_activity_schedule.ul_activity",
50709 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50710
50711 {&hf_ieee80211_s1g_dl_activity,
50712 {"DL Activity", "wlan.sst.channel_activity_schedule.dl_activity",
50713 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50714
50715 {&hf_ieee80211_s1g_max_trans_width,
50716 {"Maximum Transmission Width", "wlan.sst.channel_activity_schedule.max_trans_width",
50717 FT_UINT32, BASE_DEC, VALS(max_trans_width_vals)((0 ? (const struct _value_string*)0 : ((max_trans_width_vals
))))
,
50718 0x00001800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50719
50720 {&hf_ieee80211_s1g_activity_start_time,
50721 {"Activity Start Time", "wlan.sst.channel_activity_schedule.activity_start_time",
50722 FT_UINT32, BASE_DEC, NULL((void*)0), 0xFFFFE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50723
50724 {&hf_ieee80211_s1g_sst_sounding_option1,
50725 {"Sounding Option", "wlan.sst.channel_activity_schedule.sounding_option",
50726 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50727
50728 {&hf_ieee80211_s1g_channel_activity_bitmap1,
50729 {"Channel Activity Bitmap", "wlan.sst.channel_activity_schedule.channel_activity_bitmap",
50730 FT_UINT16, BASE_HEX, NULL((void*)0), 0x01FE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50731
50732 {&hf_ieee80211_s1g_sounding_start_time_present,
50733 {"Sounding Start Time Present", "wlan.sst.channel_activity_schedule.sounding_start_time_present",
50734 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50735
50736 {&hf_ieee80211_s1g_channel_activity_reserved,
50737 { "Reserved", "wlan.sst.channel_activity_schedule.reserved",
50738 FT_UINT16, BASE_HEX, NULL((void*)0), 0x3C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50739
50740 {&hf_ieee80211_s1g_max_trans_width1,
50741 {"Maximum Transmission Width", "wlan.sst.channel_activity_schedule.max_trans_width",
50742 FT_UINT16, BASE_DEC, VALS(max_trans_width_vals)((0 ? (const struct _value_string*)0 : ((max_trans_width_vals
))))
,
50743 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50744
50745 {&hf_ieee80211_s1g_sounding_start_time,
50746 {"Sounding Start Time",
50747 "wlan.sst.channel_activity_schedule.sounding_start_time",
50748 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50749
50750 {&hf_ieee80211_s1g_open_loop_link_margin,
50751 {"Open-Loop Link Margin Index", "wlan.s1g.open_loop_link_margin_index",
50752 FT_UINT8, BASE_CUSTOM, CF_FUNC(s1g_open_loop_link_margin_custom)((const void *) (size_t) (s1g_open_loop_link_margin_custom)),
50753 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50754
50755 {&hf_ieee80211_s1g_raw_control,
50756 {"RAW Control", "wlan.s1g.rps.raw_control",
50757 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50758
50759 {&hf_ieee80211_s1g_raw_type,
50760 {"RAW Type", "wlan.s1g.rps.raw_control.raw_type",
50761 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) }},
50762
50763 {&hf_ieee80211_s1g_raw_type_options,
50764 {"RAW Type Options", "wlan.s1g.rps.raw_control.raw_type_options",
50765 FT_UINT8, BASE_CUSTOM, CF_FUNC(s1g_raw_type_options_custom)((const void *) (size_t) (s1g_raw_type_options_custom)),
50766 0x0C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50767
50768 {&hf_ieee80211_s1g_raw_start_time_indication,
50769 {"Start Time Indication", "wlan.s1g.rps.raw_control.start_time_indication",
50770 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) }},
50771
50772 {&hf_ieee80211_s1g_raw_raw_group_indication,
50773 {"RAW Group Indication", "wlan.s1g.rps.raw_control.raw_group_indication",
50774 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) }},
50775
50776 {&hf_ieee80211_s1g_raw_channel_indication_preference,
50777 {"Channel Indication Preference",
50778 "wlan.s1g.rps.raw_control.channel_indication_preference",
50779 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) }},
50780
50781 {&hf_ieee80211_s1g_raw_periodic_raw_indication,
50782 {"Periodic RAW Indication",
50783 "wlan.s1g.rps.raw_control.periodic_raw_indication",
50784 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) }},
50785
50786 {&hf_ieee80211_s1g_raw_slot_def,
50787 {"RAW Slot Definition", "wlan.s1g.rps.raw_slot_definition",
50788 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50789
50790 {&hf_ieee80211_s1g_slot_def_format_indication,
50791 {"Slot Definition Format Indication",
50792 "wlan.s1g.rps.raw_slot_definition.slot_definition_format_indication",
50793 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50794
50795 {&hf_ieee80211_s1g_slot_def_cross_slot_boundary,
50796 {"Cross Slot Boundary",
50797 "wlan.s1g.rps.raw_slot_definition.cross_slot_boundary",
50798 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) }},
50799
50800 {&hf_ieee80211_s1g_slot_def_slot_duration_count8,
50801 {"Slot Duration Count",
50802 "wlan.s1g.rps.raw_slot_definition.slot_duration_count",
50803 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) }},
50804
50805 {&hf_ieee80211_s1g_slot_def_num_slots6,
50806 {"Number of Slots",
50807 "wlan.s1g.rps.raw_slot_definition.number_of_slots",
50808 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFC00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50809
50810 {&hf_ieee80211_s1g_slot_def_slot_duration_count11,
50811 {"Slot Duration Count",
50812 "wlan.s1g.rps.raw_slot_definition.slot_duration_count",
50813 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) }},
50814
50815 {&hf_ieee80211_s1g_slot_def_num_slots3,
50816 {"Number of Slots",
50817 "wlan.s1g.rps.raw_slot_definition.number_of_slots",
50818 FT_UINT16, BASE_DEC, NULL((void*)0), 0xE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50819
50820 {&hf_ieee80211_s1g_raw_start_time,
50821 {"RAW Start Time", "wlan.s1g.raw_slot_definition.raw_start_time",
50822 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50823
50824 {&hf_ieee80211_s1g_raw_group_subfield,
50825 {"RAW Group", "wlan.s1g.rps.raw_group",
50826 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50827
50828 {&hf_ieee80211_s1g_raw_group_page_index,
50829 {"Page Index", "wlan.s1g.rps.raw_group.page_index",
50830 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50831
50832 {&hf_ieee80211_s1g_raw_group_start_aid,
50833 {"RAW Start AID", "wlan.s1g.rps.raw_group.raw_start_aid",
50834 FT_UINT24, BASE_DEC, NULL((void*)0), 0x001FFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50835
50836 {&hf_ieee80211_s1g_raw_group_end_aid,
50837 {"RAW End AID", "wlan.s1g.rps.raw_group.raw_end_aid",
50838 FT_UINT24, BASE_DEC, NULL((void*)0), 0xFFE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50839
50840 {&hf_ieee80211_s1g_raw_channel_indication,
50841 {"Channel Indication", "wlan.s1g.rps.channel_indication",
50842 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50843
50844 {&hf_ieee80211_s1g_raw_ci_channel_activity_bitmap,
50845 {"Channel Activity Bitmap",
50846 "wlan.s1g.rps.channel_indication.channel_activity_bitmap",
50847 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50848
50849 {&hf_ieee80211_s1g_raw_ci_max_trans_width,
50850 {"Maximum Transmission Width",
50851 "wlan.s1g.rps.channel_indication.maximum_transmission_width",
50852 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) }},
50853
50854 {&hf_ieee80211_s1g_raw_ci_ul_activity,
50855 {"UL Activity", "wlan.s1g.rps.channel_indication.ul_activity",
50856 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50857
50858 {&hf_ieee80211_s1g_raw_ci_dl_activity,
50859 {"DL Activity", "wlan.s1g.rps.channel_indication.dl_activity",
50860 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50861
50862 {&hf_ieee80211_s1g_raw_ci_reserved,
50863 {"Reserved", "wlan.s1g.rps.channel_indication.reserved",
50864 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50865
50866 {&hf_ieee80211_s1g_raw_praw_periodicity,
50867 {"PRAW Periodicity",
50868 "wlan.s1g.rps.periodic_operation_parameters.praw_periodicity",
50869 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50870
50871 {&hf_ieee80211_s1g_raw_praw_validity,
50872 {"PRAW Validity",
50873 "wlan.s1g.rps.periodic_operation_parameters.praw_validity",
50874 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50875
50876 {&hf_ieee80211_s1g_raw_praw_start_offset,
50877 {"PRAW Start Offset",
50878 "wlan.s1g.rps.periodic_operation_parameters.praw_start_offset",
50879 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50880
50881
50882 {&hf_ieee80211_s1g_page_slice_page_period,
50883 {"Page Period", "wlan.page_slice.page_period",
50884 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50885
50886 {&hf_ieee80211_s1g_page_slice_control,
50887 {"Page Slice Control", "wlan.page_slice.page_slice_control",
50888 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50889
50890 {&hf_ieee80211_s1g_page_slice_page_index,
50891 {"Page Index", "wlan.page_slice.page_slice_control.page_index",
50892 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50893
50894 {&hf_ieee80211_s1g_page_slice_page_slice_length,
50895 {"Page Slice Length", "wlan.page_slice.page_slice_control.page_slice_len",
50896 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00007C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50897
50898 {&hf_ieee80211_s1g_page_slice_page_slice_count,
50899 {"Page Slice Count", "wlan.page_slice.page_slice_control.page_slice_count",
50900 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50901
50902 {&hf_ieee80211_s1g_page_slice_block_offset,
50903 {"Block Offset", "wlan.page_slice.page_slice_control.block_offset",
50904 FT_UINT24, BASE_DEC, NULL((void*)0), 0x01F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50905
50906 {&hf_ieee80211_s1g_page_slice_tim_offset,
50907 {"TIM Offset", "wlan.page_slice.page_slice_control.tim_offset",
50908 FT_UINT24, BASE_DEC, NULL((void*)0), 0x1E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50909
50910 {&hf_ieee80211_s1g_page_slice_reserved,
50911 {"Reserved", "wlan.page_slice.page_slice_control.reserved",
50912 FT_UINT24, BASE_HEX, NULL((void*)0), 0xE00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50913
50914 {&hf_ieee80211_s1g_page_slice_page_bitmap,
50915 {"Page Bitmap", "wlan.page_slice.page_bitmap",
50916 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50917
50918 {&hf_ieee80211_s1g_aid_request_mode,
50919 {"AID Request Mode", "wlan.s1g.aid_request.aid_request_mode",
50920 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50921
50922 {&hf_ieee80211_s1g_aid_request_interval_present,
50923 {"AID Request Interval Present",
50924 "wlan.s1g.aid_request.aid_request_mode.aid_request_interval_present",
50925 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) }},
50926
50927 {&hf_ieee80211_s1g_aid_request_per_sta_address_present,
50928 {"Per STA Address Present",
50929 "wlan.s1g.aid_request.aid_request_mode.per_sta_address_present",
50930 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) }},
50931
50932 {&hf_ieee80211_s1g_aid_request_service_characteristic_present,
50933 {"Service Characteristic Present",
50934 "wlan.s1g.aid_request.aid_request_mode.service_characteristic_present",
50935 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) }},
50936
50937 {&hf_ieee80211_s1g_aid_request_non_tim_mode_switch,
50938 {"Non-TIM Mode Switch",
50939 "wlan.s1g.aid_request.aid_request_mode.non_tim_mode_switch",
50940 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) }},
50941
50942 {&hf_ieee80211_s1g_aid_request_tim_mode_switch,
50943 {"TIM Mode Switch",
50944 "wlan.s1g.aid_request.aid_request_mode.tim_mode_switch",
50945 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) }},
50946
50947 {&hf_ieee80211_s1g_aid_request_group_address_present,
50948 {"Group Address Present",
50949 "wlan.s1g.aid_request.aid_request_mode.group_address_present",
50950 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) }},
50951
50952 {&hf_ieee80211_s1g_aid_request_reserved,
50953 {"Reserved", "wlan.s1g.aid_request.aid_request_mode.reserved",
50954 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50955
50956 {&hf_ieee80211_s1g_aid_request_interval,
50957 {"AID Request Interval", "wlan.s1g.aid_request.aid_request_interval",
50958 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50959
50960 {&hf_ieee80211_s1g_aid_request_characteristic_sensor,
50961 {"Sensor", "wlan.s1g.aid_request.service_characteristic.sensor",
50962 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50963
50964 {&hf_ieee80211_s1g_aid_request_characteristic_offload,
50965 {"Offload", "wlan.s1g.aid_request.service_characteristic.offload",
50966 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50967
50968 {&hf_ieee80211_s1g_aid_request_characteristic_official_service,
50969 {"Critical Service",
50970 "wlan.s1g.aid_request.service_characteristic.critical_service",
50971 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50972
50973 {&hf_ieee80211_s1g_aid_request_characteristic_reserved,
50974 {"Reserved", "wlan.s1g.aid_request.service_characteristic.reserved",
50975 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50976
50977 {&hf_ieee80211_s1g_aid_req_peer_sta_addr,
50978 {"Peer STA Address", "wlan.s1g.aid_request.peer_sta_address",
50979 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50980
50981 {&hf_ieee80211_s1g_aid_request_characteristic,
50982 {"Service Characteristic", "wlan.s1g.aid_request.service_characteristic",
50983 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50984
50985 {&hf_ieee80211_s1g_aid_req_group_addr,
50986 {"Group Mac Address", "wlan.s1g.aid_request.group_mac_address",
50987 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50988
50989 {&hf_ieee80211_s1g_aid_rsp_aid_group_aid,
50990 {"AID/Group AID", "wlan.s1g.aid_response.aid_group_aid",
50991 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50992
50993 {&hf_ieee80211_s1g_aid_rsp_aid_switch_count,
50994 {"AID Switch Count", "wlan.s1g.aid_response.aid_switch_count",
50995 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
50996
50997 {&hf_ieee80211_s1g_aid_rsp_aid_response_interval,
50998 {"AID Response Interval", "wlan.s1g.aid_response.aid_response_interval",
50999 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51000
51001 {&hf_ieee80211_s1g_sector_op_control_16b,
51002 {"Sector Operation Control", "wlan.s1g.sector_operation.control",
51003 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51004
51005 {&hf_ieee80211_s1g_sector_op_sectorization_type_b16,
51006 {"Sectorization Type",
51007 "wlan.s1g.sector_operation.control.sectorization_type",
51008 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) }},
51009
51010 {&hf_ieee80211_s1g_sector_op_periodic_training_indicator,
51011 {"Periodic Training Indicator",
51012 "wlan.s1g.sector_operation.control.periodic_training_indicator",
51013 FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51014
51015 {&hf_ieee80211_s1g_sector_op_training_period,
51016 {"Training Period",
51017 "wlan.s1g.sector_operation.control.training_interval",
51018 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00FC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51019
51020 {&hf_ieee80211_s1g_sector_op_remaining_beacon_interval,
51021 {"Remaining Beacon Interval",
51022 "wlan.s1g.sector_operation.control.remaining_beacon_interval",
51023 FT_UINT16, BASE_DEC, NULL((void*)0), 0x3F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51024
51025 {&hf_ieee80211_s1g_sector_op_reserved_b16,
51026 {"Reserved", "wlan.s1g.sector_operation.reserved",
51027 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51028
51029 {&hf_ieee80211_s1g_sector_op_control,
51030 {"Sector Operation Control", "wlan.s1g.sector_operation.control",
51031 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51032
51033 {&hf_ieee80211_s1g_sector_op_sectorization_type,
51034 {"Sectorization Type",
51035 "wlan.s1g.sector_operation.control.sectorization_type",
51036 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) }},
51037
51038 {&hf_ieee80211_s1g_sector_op_period,
51039 {"Period", "wlan.s1g.sector_operation.control.period",
51040 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51041
51042 {&hf_ieee80211_s1g_sector_op_omni,
51043 {"Omni", "wlan.s1g.sector_operation.control.omni",
51044 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) }},
51045
51046 {&hf_ieee80211_s1g_sector_op_group_info,
51047 {"Group Info", "wlan.s1g.sector_operation.group_info",
51048 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51049
51050 {&hf_ieee80211_s1g_short_beacon_interval,
51051 {"Short Beacon Interval", "wlan.sig.short_beacon_interval",
51052 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51053
51054 {&hf_ieee80211_s1g_change_sequence,
51055 {"Change Sequence", "wlan.s1g.change_sequence",
51056 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51057
51058 /* Need to add a TFS for this and perhaps two versions */
51059 {&hf_ieee80211_s1g_auth_control_control,
51060 {"Control", "wlan.s1g.auth_control.control",
51061 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51062
51063 {&hf_ieee80211_s1g_auth_control_deferral,
51064 {"Deferral", "wlan.s1g.auth_control.deferral",
51065 FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51066
51067 {&hf_ieee80211_s1g_auth_control_reserved,
51068 {"Reserved", "wlan.s1g.auth_control.reserved",
51069 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51070
51071 {&hf_ieee80211_s1g_auth_control_thresh,
51072 {"Authentication Control Threshold", "wlan.s1g.auth_control.threshold",
51073 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51074
51075 {&hf_ieee80211_s1g_auth_control_thresh_tus,
51076 {"Authentication Control Threshold", "wlan.s1g.auth_control.threshold",
51077 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
,
51078 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51079
51080 {&hf_ieee80211_s1g_auth_slot_duration,
51081 {"Authentication Slot Duration", "wlan.s1g.auth_control.slot_duration",
51082 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_di_dis)((0 ? (const struct unit_name_string*)0 : ((&units_di_dis
))))
, 0x0000FE,
51083 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51084
51085 {&hf_ieee80211_s1g_auth_max_trans_int,
51086 {"Maximum Transmission Interval",
51087 "wlan.s1g.distributed_auth_control.max_xmit_int",
51088 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
, 0x00FF00,
51089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51090
51091 {&hf_ieee80211_s1g_auth_min_trans_int,
51092 {"Minimum Transmission Interval",
51093 "wlan.s1g.distributed_auth_control.min_xmit_int",
51094 FT_UINT24, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
, 0xFF0000,
51095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51096
51097 {&hf_ieee80211_s1g_tsf_timer_accuracy,
51098 {"TSF Timer Accuracy", "wlan.s1g.tsf_timer_accuracy",
51099 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) }},
51100
51101 {&hf_ieee80211_s1g_relay_control,
51102 {"Relay Control", "wlan.s1g.relay_control",
51103 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51104
51105 {&hf_ieee80211_s1g_relay_control_rootap_bssid,
51106 {"RootAP BSSID", "wlan.s1g.relay_control.rootap_bssid",
51107 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51108
51109 {&hf_ieee80211_s1g_relay_function_activation_mode,
51110 {"Relay Activation Mode",
51111 "wlan.s1g.relay_activation.relay_activation_mode",
51112 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) }},
51113
51114 {&hf_ieee80211_s1g_relay_function_direction,
51115 {"Direction", "wlan.s1g.relay_activation.direction",
51116 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) }},
51117
51118 {&hf_ieee80211_s1g_relay_function_enable_relay_function,
51119 {"Enable Relay Function",
51120 "wlan.s1g.relay_activation.enable_relay_function",
51121 FT_UINT8, BASE_CUSTOM, CF_FUNC(enable_relay_function_custom)((const void *) (size_t) (enable_relay_function_custom)), 0x04,
51122 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51123
51124 {&hf_ieee80211_s1g_relay_function_stas_present_indic,
51125 {"Number of STAs Presence Indicator",
51126 "wlan.s1g.relay_activation.number_of_stas_presence_indicator",
51127 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51128
51129 {&hf_ieee80211_s1g_relay_function_reserved,
51130 {"Reserved", "wlan.s1g.relay_activation.reserved",
51131 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51132
51133 {&hf_ieee80211_s1g_number_of_stas,
51134 {"Number of STAs", "wlan.s1g.relay_activation.number_of_stas",
51135 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51136
51137 {&hf_ieee80211_s1g_initiator_mac_address,
51138 {"Initiator MAC Address",
51139 "wlan.s1g.reachable_address.initiator_mac_address",
51140 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51141
51142 {&hf_ieee80211_s1g_address_count,
51143 {"Address Count", "wlan.s1g.reachable_address.address_count",
51144 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51145
51146 {&hf_ieee80211_s1g_reachable_add_remove,
51147 {"Add/Remove", "wlan.s1g.reachable_address.add_remove",
51148 FT_BOOLEAN, 8, TFS(&reachable_address_add_remove_tfs)((0 ? (const struct true_false_string*)0 : ((&reachable_address_add_remove_tfs
))))
,
51149 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51150
51151 {&hf_ieee80211_s1g_reachable_relay_capable,
51152 {"Relay Capable", "wlan.s1g.reachable_address.relay_capable",
51153 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51154
51155 {&hf_ieee80211_s1g_reachable_reserved,
51156 {"Reserved", "wlan.s1g.reachable_address.reserved",
51157 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51158
51159 {&hf_ieee80211_s1g_reachable_mac_address,
51160 {"MAC Address", "wlan.s1g.reachable_address.mac_address",
51161 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51162
51163 {&hf_ieee80211_s1g_relay_discovery_control,
51164 {"Relay Discovery Control", "wlan.s1g.relay_discovery_control",
51165 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51166
51167 {&hf_ieee80211_s1g_min_data_rate_included,
51168 {"Min Data Rate Included",
51169 "wlan.s1g.relay_discovery_control.min_data_rate_included",
51170 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) }},
51171
51172 {&hf_ieee80211_s1g_mean_data_rate_included,
51173 {"Mean Data Rate Included",
51174 "wlan.s1g.relay_discovery_control.mean_data_rate_included",
51175 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) }},
51176
51177 {&hf_ieee80211_s1g_max_data_rate_included,
51178 {"Max Data Rate Included",
51179 "wlan.s1g.relay_discovery_control.max_data_rate_included",
51180 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) }},
51181
51182 {&hf_ieee80211_s1g_delay_and_min_phy_rate,
51183 {"Delay and Min Phy Rate Included",
51184 "wlan.s1g.relay_discovery_control.delay_and_min_phy_rate_included",
51185 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) }},
51186
51187 {&hf_ieee80211_s1g_information_not_available,
51188 {"Information Not Available",
51189 "wlan.s1g.relay_discovery_control.information_not_available",
51190 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51191
51192 {&hf_ieee80211_s1g_relay_control_ul_min,
51193 {"UL Min Data Rate (100kbps)", "wlan.s1g.relay_discovery.ul_min_data_rate",
51194 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51195
51196 {&hf_ieee80211_s1g_relay_control_ul_mean,
51197 {"UL Mean Data Rate (100kbps)",
51198 "wlan.s1g.relay_discovery.ul_mean_data_rate",
51199 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51200
51201 {&hf_ieee80211_s1g_relay_control_ul_max,
51202 {"UL Max Data Rate (100kbps)", "wlan.s1g.relay_discovery.ul_max_data_rate",
51203 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51204
51205 {&hf_ieee80211_s1g_relay_control_dl_min,
51206 {"DL Min Data Rate (100kbps)", "wlan.s1g.relay_discovery.dl_min_data_rate",
51207 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51208
51209 {&hf_ieee80211_s1g_relay_control_dl_mean,
51210 {"DL Mean Data Rate (100kbps)",
51211 "wlan.s1g.relay_discovery.dl_mean_data_rate",
51212 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51213
51214 {&hf_ieee80211_s1g_relay_control_dl_max,
51215 {"DL Max Data Rate (100kbps)", "wlan.s1g.relay_discovery.dl_max_data_rate",
51216 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51217
51218 {&hf_ieee80211_s1g_relay_discovery_reserved,
51219 {"Reserved", "wlan.s1g.relay_discovery_control.reserved",
51220 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51221
51222 {&hf_ieee80211_s1g_relay_hierarchy_identifier,
51223 {"Relay Hierarchy Identifier",
51224 "wlan.s1g.relay_control.relay_hierarchy_identifier",
51225 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(relay_hierarchy_rstrs)((0 ? (const struct _range_string*)0 : ((relay_hierarchy_rstrs
))))
,
51226 0x7F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51227
51228 {&hf_ieee80211_s1g_relay_no_more_relay_flag,
51229 {"No More Relay Flag", "wlan.s1g.relay_control.no_more_relay_flag",
51230 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) }},
51231
51232 {&hf_ieee80211_s1g_aid_entry_mac_addr,
51233 {"STA MAC Address", "wlan.s1g.aid_entry.sta_mac_address",
51234 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51235
51236 {&hf_ieee80211_s1g_aid_entry_assoc_id,
51237 {"Association ID", "wlan.s1g.aid_entry.association_id",
51238 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51239
51240 {&hf_ieee80211_s1g_beacon_compatibility_info,
51241 {"Compatibility Information", "wlan.s1g.beacon_compatibility_info",
51242 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51243
51244 {&hf_ieee80211_s1g_beacon_interval,
51245 {"Beacon Interval", "wlan.s1g.beacon_interval",
51246 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51247
51248 {&hf_ieee80211_s1g_tsf_completion,
51249 {"TSF Completion", "wlan.s1g.tsf_completion",
51250 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51251
51252 {&hf_ieee80211_s1g_channel_width,
51253 {"Channel Width", "wlan.s1g.channel_width",
51254 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51255
51256 {&hf_ieee80211_s1g_primary_channel_width,
51257 {"Primary Channel Width", "wlan.s1g.channel_width.primary_channel_width",
51258 FT_UINT8, BASE_DEC, VALS(primary_channel_width_vals)((0 ? (const struct _value_string*)0 : ((primary_channel_width_vals
))))
,
51259 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51260
51261 {&hf_ieee80211_s1g_bss_operating_channel_width,
51262 {"BSS Operating Channel Width",
51263 "wlan.s1g.channel_width.bss_operating_channel_width",
51264 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1e, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51265
51266 {&hf_ieee80211_s1g_primary_channel_location,
51267 {"1MHz Primary Channel Location",
51268 "wlan.s1g.channel_width.1mhz_primary_channel_location",
51269 FT_UINT8, BASE_DEC,
51270 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) }},
51271
51272 {&hf_ieee80211_s1g_reserved_b6,
51273 {"Reserved", "wlan.s1g.channel_width.reserved_b6",
51274 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51275
51276 {&hf_ieee80211_s1g_mcs10_use,
51277 {"MCS10 Use", "wlan.s1g.channel_width.mcs10_use",
51278 FT_UINT8, BASE_DEC, VALS(mcs10_use_vals)((0 ? (const struct _value_string*)0 : ((mcs10_use_vals)))), 0x80,
51279 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51280
51281 {&hf_ieee80211_s1g_operating_class,
51282 {"Operating Class", "wlan.s1g.operating_class",
51283 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51284
51285 {&hf_ieee80211_s1g_primary_channel_number,
51286 {"Primary Channel Number", "wlan.s1g.primary_channel_number",
51287 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51288
51289 {&hf_ieee80211_s1g_channel_center_frequency,
51290 {"Channel Center Frequency", "wlan.s1g.channel_center_frequency",
51291 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51292
51293 {&hf_ieee80211_s1g_basic_mcs_and_nss_set,
51294 {"Basic S1G-MCS and NSS Set", "wlan.s1g.basic_s1g_mcs_and_nss",
51295 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51296
51297 {&hf_ieee80211_s1g_sst_enabled_channel_bitmap,
51298 {"SST Enabled Channel Bitmap", "wlan.s1g.sst_enabled_channel_bitmap",
51299 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51300
51301 {&hf_ieee80211_s1g_sst_primary_channel_offset,
51302 {"Primary Channel Offset", "wlan.s1g.primary_channel_offset",
51303 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51304
51305 {&hf_ieee80211_s1g_sst_channel_unit,
51306 {"SST Channel Unit", "wlan.s1g.sst_channel_unit",
51307 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) }},
51308
51309 {&hf_ieee80211_s1g_sst_reserved,
51310 {"Reserved", "wlan.s1g.sst_reserved",
51311 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51312
51313 {&hf_ieee80211_s1g_max_away_duration,
51314 {"Max Away Duration", "wlan.s1g.max_away_duration",
51315 FT_UINT16, BASE_DEC | BASE_UNIT_STRING0x00001000, UNS(&units_tu_tus)((0 ? (const struct unit_name_string*)0 : ((&units_tu_tus
))))
,
51316 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51317
51318 {&hf_ieee80211_s1g_tim_bmapctrl,
51319 {"Bitmap Control", "wlan.s1g.tim.bitmap_control",
51320 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51321
51322 {&hf_ieee80211_s1g_tim_bmapctl_traffic_indicator,
51323 {"Traffic Indication", "wlan.s1g.tim.traffic_indication",
51324 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51325
51326 {&hf_ieee80211_s1g_tim_page_slice_number,
51327 {"Page Slice Number", "wlan.s1g.tim.page_slice_number",
51328 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51329
51330 {&hf_ieee80211_s1g_tim_page_index,
51331 {"Page Index", "wlan.s1g.tim.page_index",
51332 FT_UINT8, BASE_DEC, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51333
51334 {&hf_ieee80211_s1g_pvb_block_control_byte,
51335 {"Block Control Byte", "wlan.s1g.tim.pvb.block_control",
51336 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51337
51338 {&hf_ieee80211_s1g_pvb_encoding_mode,
51339 {"Encoding Mode", "wlan.s1g.tim.pvb.block_control.encoding_mode",
51340 FT_UINT8, BASE_HEX, VALS(s1g_block_control_encoding_mode_vals)((0 ? (const struct _value_string*)0 : ((s1g_block_control_encoding_mode_vals
))))
,
51341 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51342
51343 {&hf_ieee80211_s1g_pvb_inverse_bitmap,
51344 {"Inverse Bitmap", "wlan.s1g.tim.pvb.block_control.inverse_bitmap",
51345 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51346
51347 {&hf_ieee80211_s1g_pvb_block_offset,
51348 {"Block Offset", "wlan.s1g.tim.pvb.block_offset",
51349 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51350
51351 {&hf_ieee80211_s1g_block_bitmap,
51352 {"Block Bitmap", "wlan.s1g.tim.pvb.block_bitmap.bitmap",
51353 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51354
51355 {&hf_ieee80211_s1g_block_bitmap_sta_aid13,
51356 {"STA AID13", "wlan.s1g.tim.pvb.block_bitmap.subblock.aid13",
51357 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51358
51359 {&hf_ieee80211_s1g_block_bitmap_ade,
51360 {"ADE Control", "wlan.s1g.tim.pvb.block_bitmap.ade.control",
51361 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51362
51363 {&hf_ieee80211_s1g_block_bitmap_ewl,
51364 {"EWL", "wlan.s1g.tim.pvb.block_bitmap.ade.ewl",
51365 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51366
51367 {&hf_ieee80211_s1g_block_bitmap_len,
51368 {"Length", "wlan.s1g.tim.pvb.block_bitmap.ade.length",
51369 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51370
51371 {&hf_ieee80211_s1g_block_bitmap_ade_bytes,
51372 {"Bitmap", "wlan.s1g.tim.pvb.block_bitmap.ade.bitmap",
51373 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51374
51375 {&hf_ieee80211_s1g_block_bitmap_single_aid,
51376 {"Single AID13", "wlan.s1g.tim.pvb.single_aid",
51377 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51378
51379 {&hf_ieee80211_s1g_block_bitmap_olb_length,
51380 {"Length", "wlan.s1g.tim.pvb.olb.length",
51381 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51382
51383 {&hf_ieee80211_s1g_probe_response_group_bitmap,
51384 {"Probe Response Group Bitmap", "wlan.s1g.probe_response_group_bitmap",
51385 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51386
51387 {&hf_ieee80211_s1g_probe_resp_subfield_0,
51388 {"Probe Response Option Default Bitmap",
51389 "wlan.s1g.probe_response_option_default_bitmap",
51390 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51391
51392 {&hf_ieee80211_pv1_probe_response_req_full_ssid,
51393 {"Request Full SSID", "wlan.s1g.probe_response_option_request_full_ssid",
51394 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) }},
51395
51396 {&hf_ieee80211_pv1_probe_response_req_next_tbtt,
51397 {"Request Next TBTT", "wlan.s1g.probe_response_option_request_next_tbtt",
51398 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) }},
51399
51400 {&hf_ieee80211_pv1_probe_response_req_access_network_option,
51401 {"Request Access Network Options",
51402 "wlan.s1g.probe_response_option_request_access_network_options",
51403 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) }},
51404
51405 {&hf_ieee80211_pv1_probe_response_req_s1g_beacon_compatibility,
51406 {"Request S1G Beacon Compatibility",
51407 "wlan.s1g.probe_response_option_request_s1g_beacon_compatibility",
51408 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) }},
51409
51410 {&hf_ieee80211_pv1_probe_response_req_supported_rates,
51411 {"Request Supported Rates",
51412 "wlan.s1g.probe_response_option_request_supported_rates",
51413 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) }},
51414
51415 {&hf_ieee80211_pv1_probe_response_req_s1g_capability,
51416 {"Request S1G Capability",
51417 "wlan.s1g.probe_response_option_request_s1g_capability",
51418 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) }},
51419
51420 {&hf_ieee80211_pv1_probe_response_req_s1g_operation,
51421 {"Request S1G Operation",
51422 "wlan.s1g.probe_response_option_request_s1g_operation",
51423 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) }},
51424
51425 {&hf_ieee80211_pv1_probe_response_req_rsn,
51426 {"Request RSN", "wlan.s1g.probe_response_option_request_rsn",
51427 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) }},
51428
51429 {&hf_ieee80211_s1g_el_op_max_awake_duration,
51430 {"Max Awake Duration", "wlan.s1g.el_operation.max_awake_duration",
51431 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_max_awake_duration_custom)((const void *) (size_t) (s1g_max_awake_duration_custom)),
51432 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51433
51434 {&hf_ieee80211_s1g_el_op_recovery_time_duration,
51435 {"Recovery Time Duration", "wlan.s1g.el_operation.recovery_time_duration",
51436 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_recovery_time_duration_custom)((const void *) (size_t) (s1g_recovery_time_duration_custom)),
51437 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51438
51439 {&hf_ieee80211_s1g_sectorized_group_id_list,
51440 {"Sectorized Group List", "wlan.s1g.sectorized_group_list",
51441 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51442
51443 {&hf_ieee80211_s1g_header_comp_control,
51444 {"Header Compression Control",
51445 "wlan.s1g.header_compression.header_compression_control",
51446 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51447
51448 {&hf_ieee80211_s1g_header_comp_req_resp,
51449 {"Request/Response",
51450 "wlan.s1g.header_compression.header_compression_control.request_response",
51451 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) }},
51452
51453 {&hf_ieee80211_s1g_header_comp_store_a3,
51454 {"Store A3",
51455 "wlan.s1g.header_compression.header_compression_control.store_a3",
51456 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51457
51458 {&hf_ieee80211_s1g_header_comp_store_a4,
51459 {"Store A4",
51460 "wlan.s1g.header_compression.header_compression_control.store_a4",
51461 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51462
51463 {&hf_ieee80211_s1g_header_comp_ccmp_update_present,
51464 {"CCMP Update Present",
51465 "wlan.s1g.header_compression.header_compression_control.ccmp_update_present",
51466 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51467
51468 {&hf_ieee80211_s1g_header_comp_pv1_data_type_3_supported,
51469 {"PV1 Data Type 3 Supported",
51470 "wlan.s1g.header_compression.header_compression_control.pv1_data_type_3_supported",
51471 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51472
51473 {&hf_ieee80211_s1g_header_comp_reserved,
51474 {"Reserved",
51475 "wlan.s1g.header_compression.header_compression_control.reserved",
51476 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51477
51478 {&hf_ieee80211_s1g_header_comp_a3,
51479 {"A3", "wlan.s1g.header_compression.a3",
51480 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51481
51482 {&hf_ieee80211_s1g_header_comp_a4,
51483 {"A4", "wlan.s1g.header_compression.a4",
51484 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51485
51486 {&hf_ieee80211_s1g_header_comp_ccmp_update,
51487 {"CCMP Update", "wlan.s1g.header_compression.ccmp_update",
51488 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51489
51490 {&hf_ieee80211_ampduparam,
51491 {"A-MPDU Parameters", "wlan.ht.ampduparam",
51492 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51493 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51494
51495 {&hf_ieee80211_ampduparam_vs,
51496 {"A-MPDU Parameters (VS)", "wlan.vs.ht.ampduparam",
51497 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
51498 "Vendor Specific A-MPDU Parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51499
51500 {&hf_ieee80211_ampduparam_mpdu,
51501 {"Maximum Rx A-MPDU Length Exponent", "wlan.ht.ampduparam.maxlength",
51502 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03,
51503 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51504
51505 {&hf_ieee80211_ampduparam_mpdu_start_spacing,
51506 {"Minimum MPDU Start Spacing", "wlan.ht.ampduparam.mpdu_start_spacing",
51507 FT_UINT8, BASE_HEX, VALS(ampduparam_mpdu_start_spacing_flags)((0 ? (const struct _value_string*)0 : ((ampduparam_mpdu_start_spacing_flags
))))
, 0x1c,
51508 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51509
51510 {&hf_ieee80211_ampduparam_reserved,
51511 {"Reserved", "wlan.ht.ampduparam.reserved",
51512 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
51513 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51514
51515 {&hf_ieee80211_mcsset,
51516 {"Rx Supported Modulation and Coding Scheme Set", "wlan.ht.mcsset",
51517 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51518 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51519
51520 {&hf_ieee80211_mcsset_vs,
51521 {"Rx Supported Modulation and Coding Scheme Set (VS)", "wlan.vs.ht.mcsset",
51522 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51523 "Vendor Specific Rx Supported Modulation and Coding Scheme Set", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51524
51525 {&hf_ieee80211_mcsset_rx_bitmask,
51526 {"Rx Modulation and Coding Scheme (One bit per modulation)", "wlan.ht.mcsset.rxbitmask",
51527 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51528 "One bit per modulation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51529
51530 {&hf_ieee80211_mcsset_rx_bitmask_0to7,
51531 {"Rx Bitmask Bits 0-7", "wlan.ht.mcsset.rxbitmask.0to7",
51532 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000ff,
51533 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51534
51535 {&hf_ieee80211_mcsset_rx_bitmask_8to15,
51536 {"Rx Bitmask Bits 8-15", "wlan.ht.mcsset.rxbitmask.8to15",
51537 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000ff00,
51538 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51539
51540 {&hf_ieee80211_mcsset_rx_bitmask_16to23,
51541 {"Rx Bitmask Bits 16-23", "wlan.ht.mcsset.rxbitmask.16to23",
51542 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00ff0000,
51543 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51544
51545 {&hf_ieee80211_mcsset_rx_bitmask_24to31,
51546 {"Rx Bitmask Bits 24-31", "wlan.ht.mcsset.rxbitmask.24to31",
51547 FT_UINT32, BASE_HEX, NULL((void*)0), 0xff000000,
51548 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51549
51550 {&hf_ieee80211_mcsset_rx_bitmask_32,
51551 {"Rx Bitmask Bit 32", "wlan.ht.mcsset.rxbitmask.32",
51552 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001,
51553 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51554
51555 {&hf_ieee80211_mcsset_rx_bitmask_33to38,
51556 {"Rx Bitmask Bits 33-38", "wlan.ht.mcsset.rxbitmask.33to38",
51557 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00007e,
51558 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51559
51560 {&hf_ieee80211_mcsset_rx_bitmask_39to52,
51561 {"Rx Bitmask Bits 39-52", "wlan.ht.mcsset.rxbitmask.39to52",
51562 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1fff80,
51563 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51564
51565 {&hf_ieee80211_mcsset_rx_bitmask_53to76,
51566 {"Rx Bitmask Bits 53-76", "wlan.ht.mcsset.rxbitmask.53to76",
51567 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1fffffe0,
51568 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51569
51570 {&hf_ieee80211_mcsset_highest_data_rate,
51571 {"Highest Supported Data Rate", "wlan.ht.mcsset.highestdatarate",
51572 FT_UINT16, BASE_HEX, NULL((void*)0), 0x03ff,
51573 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51574
51575 {&hf_ieee80211_mcsset_tx_mcs_set_defined,
51576 {"Tx Supported MCS Set", "wlan.ht.mcsset.txsetdefined",
51577 FT_BOOLEAN, 16, TFS(&tfs_defined_not_defined)((0 ? (const struct true_false_string*)0 : ((&tfs_defined_not_defined
))))
, 0x0001,
51578 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51579
51580 {&hf_ieee80211_mcsset_tx_rx_mcs_set_not_equal,
51581 {"Tx and Rx MCS Set", "wlan.ht.mcsset.txrxmcsnotequal",
51582 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,
51583 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51584
51585 {&hf_ieee80211_mcsset_tx_max_spatial_streams,
51586 {"Maximum Number of Tx Spatial Streams Supported", "wlan.ht.mcsset.txmaxss",
51587 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000c,
51588 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51589
51590 {&hf_ieee80211_mcsset_tx_unequal_modulation,
51591 {"Unequal Modulation", "wlan.ht.mcsset.txunequalmod",
51592 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0010,
51593 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51594
51595 {&hf_ieee80211_htex_cap,
51596 {"HT Extended Capabilities", "wlan.htex.capabilities",
51597 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51598 "HT Extended Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51599
51600 {&hf_ieee80211_htex_vs_cap,
51601 {"HT Extended Capabilities (VS)", "wlan.vs.htex.capabilities",
51602 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51603 "Vendor Specific HT Extended Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51604
51605 {&hf_ieee80211_htex_reserved_b0_b7,
51606 {"Reserved", "wlan.htex.capabilities.reserved_b0_b7",
51607 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00ff,
51608 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51609
51610 {&hf_ieee80211_htex_mcs,
51611 {"MCS Feedback capability", "wlan.htex.capabilities.mcs",
51612 FT_UINT16, BASE_HEX, VALS(htex_mcs_flags)((0 ? (const struct _value_string*)0 : ((htex_mcs_flags)))), 0x0300,
51613 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51614
51615 {&hf_ieee80211_htex_htc_support,
51616 {"HT variant HT Control field", "wlan.htex.capabilities.htc",
51617 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0400,
51618 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51619
51620 {&hf_ieee80211_htex_rd_responder,
51621 {"Reverse Direction Responder", "wlan.htex.capabilities.rdresponder",
51622 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0800,
51623 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51624
51625 {&hf_ieee80211_htex_reserved_b12_b15,
51626 {"Reserved", "wlan.htex.capabilities.reserved_b12_b15",
51627 FT_UINT16, BASE_HEX, NULL((void*)0), 0xf000,
51628 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51629
51630 {&hf_ieee80211_txbf,
51631 {"Transmit Beam Forming (TxBF) Capabilities", "wlan.txbf",
51632 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51633 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51634
51635 {&hf_ieee80211_txbf_vs,
51636 {"Transmit Beam Forming (TxBF) Capabilities (VS)", "wlan.vs.txbf",
51637 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51638 "Vendor Specific Transmit Beam Forming (TxBF) Capabilities", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51639
51640 {&hf_ieee80211_txbf_cap,
51641 {"Implicit Transmit Beamforming Receiving", "wlan.txbf.txbf",
51642 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000001,
51643 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51644
51645 {&hf_ieee80211_txbf_rcv_ssc,
51646 {"Receive Staggered Sounding", "wlan.txbf.rxss",
51647 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000002,
51648 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51649
51650 {&hf_ieee80211_txbf_tx_ssc,
51651 {"Transmit Staggered Sounding", "wlan.txbf.txss",
51652 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000004,
51653 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51654
51655 {&hf_ieee80211_txbf_rcv_ndp,
51656 {"Receive Null Data packet (NDP)", "wlan.txbf.rxndp",
51657 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000008,
51658 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51659
51660 {&hf_ieee80211_txbf_tx_ndp,
51661 {"Transmit Null Data packet (NDP)", "wlan.txbf.txndp",
51662 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000010,
51663 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51664
51665 {&hf_ieee80211_txbf_impl_txbf,
51666 {"Implicit Transmit Beamforming", "wlan.txbf.impltxbf",
51667 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000020,
51668 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51669
51670 {&hf_ieee80211_txbf_calib,
51671 {"Calibration", "wlan.txbf.calibration",
51672 FT_UINT32, BASE_HEX, VALS(txbf_calib_flag)((0 ? (const struct _value_string*)0 : ((txbf_calib_flag)))), 0x000000c0,
51673 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51674
51675 {&hf_ieee80211_txbf_expl_csi,
51676 {"Explicit CSI Transmit Beamforming", "wlan.txbf.csi",
51677 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000100,
51678 "Station can apply TxBF using CSI explicit feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51679
51680 {&hf_ieee80211_txbf_expl_uncomp_fm,
51681 {"Explicit Noncompressed Steering", "wlan.txbf.fm.uncompressed.tbf",
51682 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000200,
51683 "Station can apply TxBF using uncompressed beamforming feedback matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51684
51685 {&hf_ieee80211_txbf_expl_comp_fm,
51686 {"Explicit Compressed Steering", "wlan.txbf.fm.compressed.tbf",
51687 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000400,
51688 "Station can apply TxBF using compressed beamforming feedback matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51689
51690 {&hf_ieee80211_txbf_expl_bf_csi,
51691 {"Explicit Transmit Beamforming CSI Feedback", "wlan.txbf.rcsi",
51692 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00001800,
51693 "Receiver can return explicit CSI feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51694
51695 {&hf_ieee80211_txbf_expl_uncomp_fm_feed,
51696 {"Explicit Noncompressed Beamforming Feedback", "wlan.txbf.fm.uncompressed.rbf",
51697 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00006000,
51698 "Receiver can return explicit uncompressed Beamforming Feedback Matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51699
51700 {&hf_ieee80211_txbf_expl_comp_fm_feed,
51701 {"Explicit Noncompressed Beamforming Feedback", "wlan.txbf.fm.compressed.bf",
51702 FT_UINT32, BASE_HEX, VALS(txbf_feedback_flags)((0 ? (const struct _value_string*)0 : ((txbf_feedback_flags)
)))
, 0x00018000,
51703 "Station can compress and use compressed Beamforming Feedback Matrix", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51704
51705 {&hf_ieee80211_txbf_min_group,
51706 {"Minimal Grouping", "wlan.txbf.mingroup",
51707 FT_UINT32, BASE_HEX, VALS(txbf_min_group_flags)((0 ? (const struct _value_string*)0 : ((txbf_min_group_flags
))))
, 0x00060000,
51708 "Minimal grouping used for explicit feedback reports", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51709
51710 {&hf_ieee80211_vht_cap,
51711 {"VHT Capabilities Info", "wlan.vht.capabilities",
51712 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
51713 "VHT Capabilities information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51714
51715 {&hf_ieee80211_vht_max_mpdu_length,
51716 {"Maximum MPDU Length", "wlan.vht.capabilities.maxmpdulength",
51717 FT_UINT32, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x00000003,
51718 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51719
51720 {&hf_ieee80211_vht_supported_chan_width_set,
51721 {"Supported Channel Width Set", "wlan.vht.capabilities.supportedchanwidthset",
51722 FT_UINT32, BASE_HEX, VALS(vht_supported_chan_width_set_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_chan_width_set_flag
))))
, 0x0000000c,
51723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51724
51725 {&hf_ieee80211_vht_rx_ldpc,
51726 {"Rx LDPC", "wlan.vht.capabilities.rxldpc",
51727 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000010,
51728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51729
51730 {&hf_ieee80211_vht_short_gi_for_80,
51731 {"Short GI for 80MHz/TVHT_MODE_4C", "wlan.vht.capabilities.short80",
51732 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000020,
51733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51734
51735 {&hf_ieee80211_vht_short_gi_for_160,
51736 {"Short GI for 160MHz and 80+80MHz", "wlan.vht.capabilities.short160",
51737 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000040,
51738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51739
51740 {&hf_ieee80211_vht_tx_stbc,
51741 {"Tx STBC", "wlan.vht.capabilities.txstbc",
51742 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000080,
51743 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51744
51745 {&hf_ieee80211_vht_rx_stbc,
51746 {"Rx STBC", "wlan.vht.capabilities.rxstbc",
51747 FT_UINT32, BASE_HEX, VALS(vht_rx_stbc_flag)((0 ? (const struct _value_string*)0 : ((vht_rx_stbc_flag)))), 0x00000700,
51748 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51749
51750 {&hf_ieee80211_vht_su_beamformer_cap,
51751 {"SU Beamformer Capable", "wlan.vht.capabilities.subeamformer",
51752 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00000800,
51753 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51754
51755 {&hf_ieee80211_vht_su_beamformee_cap,
51756 {"SU Beamformee Capable", "wlan.vht.capabilities.subeamformee",
51757 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00001000,
51758 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51759
51760 {&hf_ieee80211_vht_beamformer_antennas,
51761 {"Beamformee STS Capability", "wlan.vht.capabilities.beamformee_sts_cap",
51762 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0x0000e000,
51763 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51764
51765 {&hf_ieee80211_vht_sounding_dimensions,
51766 {"Number of Sounding Dimensions", "wlan.vht.capabilities.soundingdimensions",
51767 FT_UINT32, BASE_HEX, VALS(num_plus_one_3bit_flag)((0 ? (const struct _value_string*)0 : ((num_plus_one_3bit_flag
))))
, 0x00070000,
51768 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51769
51770 {&hf_ieee80211_vht_mu_beamformer_cap,
51771 {"MU Beamformer Capable", "wlan.vht.capabilities.mubeamformer",
51772 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00080000,
51773 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51774
51775 {&hf_ieee80211_vht_mu_beamformee_cap,
51776 {"MU Beamformee Capable", "wlan.vht.capabilities.mubeamformee",
51777 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00100000,
51778 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51779
51780 {&hf_ieee80211_vht_txop_ps,
51781 {"TXOP PS", "wlan.vht.capabilities.vhttxopps",
51782 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00200000,
51783 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51784
51785 {&hf_ieee80211_vht_var_htc_field,
51786 {"+HTC-VHT Capable", "wlan.vht.capabilities.vhthtc",
51787 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x00400000,
51788 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51789
51790 {&hf_ieee80211_vht_max_ampdu,
51791 {"Max A-MPDU Length Exponent", "wlan.vht.capabilities.maxampdu",
51792 FT_UINT32, BASE_HEX, VALS(vht_max_ampdu_flag)((0 ? (const struct _value_string*)0 : ((vht_max_ampdu_flag))
))
, 0x03800000,
51793 "Octets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51794
51795 {&hf_ieee80211_vht_link_adaptation_cap,
51796 {"VHT Link Adaptation", "wlan.vht.capabilities.linkadapt",
51797 FT_UINT32, BASE_HEX, VALS(vht_link_adapt_flag)((0 ? (const struct _value_string*)0 : ((vht_link_adapt_flag)
)))
, 0x0c000000,
51798 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51799
51800 {&hf_ieee80211_vht_rx_pattern,
51801 {"Rx Antenna Pattern Consistency", "wlan.vht.capabilities.rxpatconsist",
51802 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10000000,
51803 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51804
51805 {&hf_ieee80211_vht_tx_pattern,
51806 {"Tx Antenna Pattern Consistency", "wlan.vht.capabilities.txpatconsist",
51807 FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20000000,
51808 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51809
51810 {&hf_ieee80211_vht_ext_nss_bw_support,
51811 {"Extended NSS BW Support", "wlan.vht.capabilities.ext_nss_bw_support",
51812 FT_UINT32, BASE_HEX, NULL((void*)0), 0xc0000000,
51813 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51814
51815 {&hf_ieee80211_vht_mcsset,
51816 {"VHT Supported MCS Set", "wlan.vht.mcsset",
51817 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51818 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51819
51820 {&hf_ieee80211_vht_mcsset_rx_mcs_map,
51821 {"Rx MCS Map", "wlan.vht.mcsset.rxmcsmap",
51822 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51823 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51824
51825 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_1_ss,
51826 {"Rx 1 SS", "wlan.vht.mcsset.rxmcsmap.ss1",
51827 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51828 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51829
51830 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_2_ss,
51831 {"Rx 2 SS", "wlan.vht.mcsset.rxmcsmap.ss2",
51832 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51833 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51834
51835 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_3_ss,
51836 {"Rx 3 SS", "wlan.vht.mcsset.rxmcsmap.ss3",
51837 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51838 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51839
51840 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_4_ss,
51841 {"Rx 4 SS", "wlan.vht.mcsset.rxmcsmap.ss4",
51842 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51843 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51844
51845 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_5_ss,
51846 {"Rx 5 SS", "wlan.vht.mcsset.rxmcsmap.ss5",
51847 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51848 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51849
51850 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_6_ss,
51851 {"Rx 6 SS", "wlan.vht.mcsset.rxmcsmap.ss6",
51852 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51853 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51854
51855 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_7_ss,
51856 {"Rx 7 SS", "wlan.vht.mcsset.rxmcsmap.ss7",
51857 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51858 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51859
51860 {&hf_ieee80211_vht_mcsset_rx_max_mcs_for_8_ss,
51861 {"Rx 8 SS", "wlan.vht.mcsset.rxmcsmap.ss8",
51862 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51863 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51864
51865 {&hf_ieee80211_vht_mcsset_max_nsts_total,
51866 {"MaX NSTS Total", "wlan.vht.mcsset.max_nsts_total",
51867 FT_UINT16, BASE_DEC, NULL((void*)0), 0xe000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51868
51869 {&hf_ieee80211_vht_mcsset_rx_highest_long_gi,
51870 {"Rx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.rxhighestlonggirate",
51871 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1fff,
51872 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51873
51874 {&hf_ieee80211_vht_mcsset_tx_mcs_map,
51875 {"Tx MCS Map", "wlan.vht.mcsset.txmcsmap",
51876 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51877 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51878
51879 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_1_ss,
51880 {"Tx 1 SS", "wlan.vht.mcsset.txmcsmap.ss1",
51881 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51883
51884 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_2_ss,
51885 {"Tx 2 SS", "wlan.vht.mcsset.txmcsmap.ss2",
51886 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51887 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51888
51889 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_3_ss,
51890 {"Tx 3 SS", "wlan.vht.mcsset.txmcsmap.ss3",
51891 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51892 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51893
51894 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_4_ss,
51895 {"Tx 4 SS", "wlan.vht.mcsset.txmcsmap.ss4",
51896 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51897 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51898
51899 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_5_ss,
51900 {"Tx 5 SS", "wlan.vht.mcsset.txmcsmap.ss5",
51901 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51902 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51903
51904 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_6_ss,
51905 {"Tx 6 SS", "wlan.vht.mcsset.txmcsmap.ss6",
51906 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51907 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51908
51909 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_7_ss,
51910 {"Tx 7 SS", "wlan.vht.mcsset.txmcsmap.ss7",
51911 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51913
51914 {&hf_ieee80211_vht_mcsset_tx_max_mcs_for_8_ss,
51915 {"Tx 8 SS", "wlan.vht.mcsset.txmcsmap.ss8",
51916 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51918
51919 {&hf_ieee80211_vht_mcsset_tx_highest_long_gi,
51920 {"Tx Highest Long GI Data Rate (in Mb/s, 0 = subfield not in use)", "wlan.vht.mcsset.txhighestlonggirate",
51921 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1fff,
51922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51923
51924 {&hf_ieee80211_vht_mcsset_extended_nss_bw_capable,
51925 {"VHT Extended NSS BW Capable", "wlan.vht.mcsset.vht_ext_nss_bw_capable",
51926 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) }},
51927
51928 {&hf_ieee80211_vht_mcsset_reserved,
51929 {"Reserved", "wlan.vht.mcsset.reserved",
51930 FT_UINT16, BASE_HEX, NULL((void*)0), 0xc000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51931
51932 {&hf_ieee80211_vht_op,
51933 {"VHT Operation Info", "wlan.vht.op",
51934 FT_NONE, BASE_NONE, NULL((void*)0), 0,
51935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51936
51937 {&hf_ieee80211_vht_op_channel_width,
51938 {"Channel Width", "wlan.vht.op.channelwidth",
51939 FT_UINT8, BASE_DEC, VALS(channel_width_vals)((0 ? (const struct _value_string*)0 : ((channel_width_vals))
))
, 0,
51940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51941
51942 {&hf_ieee80211_vht_op_channel_center0,
51943 {"Channel Center Segment 0", "wlan.vht.op.channelcenter0",
51944 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51946
51947 {&hf_ieee80211_vht_op_channel_center1,
51948 {"Channel Center Segment 1", "wlan.vht.op.channelcenter1",
51949 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
51950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51951
51952 {&hf_ieee80211_vht_op_basic_mcs_map,
51953 {"Basic MCS Map", "wlan.vht.op.basicmcsmap",
51954 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
51955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51956
51957 {&hf_ieee80211_vht_op_max_basic_mcs_for_1_ss,
51958 {"Basic 1 SS", "wlan.vht.op.basicmcsmap.ss1",
51959 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0003,
51960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51961
51962 {&hf_ieee80211_vht_op_max_basic_mcs_for_2_ss,
51963 {"Basic 2 SS", "wlan.vht.op.basicmcsmap.ss2",
51964 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x000c,
51965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51966
51967 {&hf_ieee80211_vht_op_max_basic_mcs_for_3_ss,
51968 {"Basic 3 SS", "wlan.vht.op.basicmcsmap.ss3",
51969 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0030,
51970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51971
51972 {&hf_ieee80211_vht_op_max_basic_mcs_for_4_ss,
51973 {"Basic 4 SS", "wlan.vht.op.basicmcsmap.ss4",
51974 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x00c0,
51975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51976
51977 {&hf_ieee80211_vht_op_max_basic_mcs_for_5_ss,
51978 {"Basic 5 SS", "wlan.vht.op.basicmcsmap.ss5",
51979 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0300,
51980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51981
51982 {&hf_ieee80211_vht_op_max_basic_mcs_for_6_ss,
51983 {"Basic 6 SS", "wlan.vht.op.basicmcsmap.ss6",
51984 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x0c00,
51985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51986
51987 {&hf_ieee80211_vht_op_max_basic_mcs_for_7_ss,
51988 {"Basic 7 SS", "wlan.vht.op.basicmcsmap.ss7",
51989 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0x3000,
51990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51991
51992 {&hf_ieee80211_vht_op_max_basic_mcs_for_8_ss,
51993 {"Basic 8 SS", "wlan.vht.op.basicmcsmap.ss8",
51994 FT_UINT16, BASE_HEX, VALS(vht_supported_mcs_flag)((0 ? (const struct _value_string*)0 : ((vht_supported_mcs_flag
))))
, 0xc000,
51995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
51996
51997 {&hf_ieee80211_vht_tpe_pwr_info,
51998 {"Tx Pwr Info", "wlan.vht.tpe.pwr_info",
51999 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52001
52002 {&hf_ieee80211_vht_tpe_pwr_info_count,
52003 {"Max Tx Pwr Count", "wlan.vht.tpe.pwr_info.count",
52004 FT_UINT8, BASE_DEC, NULL((void*)0) , 0x07,
52005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52006
52007 {&hf_ieee80211_vht_tpe_pwr_info_unit,
52008 {"Max Tx Pwr Unit Interpretation", "wlan.vht.tpe.pwr_info.unit",
52009 FT_UINT8, BASE_DEC, VALS(vht_tpe_pwr_units)((0 ? (const struct _value_string*)0 : ((vht_tpe_pwr_units)))
)
, 0x38,
52010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52011
52012 {&hf_ieee80211_vht_tpe_pwr_info_category,
52013 {"Max Tx Pwr Category", "wlan.vht.tpe.pwr_info.category",
52014 FT_UINT8, BASE_DEC, NULL((void*)0) , 0xC0,
52015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52016
52017 {&hf_ieee80211_vht_tpe_pwr_constr_20,
52018 {"Local Max Tx Pwr Constraint 20MHz", "wlan.vht.tpe.pwr_constr_20",
52019 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
52020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52021
52022 {&hf_ieee80211_vht_tpe_pwr_constr_40,
52023 {"Local Max Tx Pwr Constraint 40MHz", "wlan.vht.tpe.pwr_constr_40",
52024 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
52025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52026
52027 {&hf_ieee80211_vht_tpe_pwr_constr_80,
52028 {"Local Max Tx Pwr Constraint 80MHz", "wlan.vht.tpe.pwr_constr_80",
52029 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
52030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52031
52032 {&hf_ieee80211_vht_tpe_pwr_constr_160,
52033 {"Local Max Tx Pwr Constraint 160MHz/80+80 MHz", "wlan.vht.tpe.pwr_constr_160",
52034 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
52035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52036
52037 {&hf_ieee80211_vht_tpe_pwr_constr_320,
52038 {"Local Max Tx Pwr Constraint 320 MHz", "wlan.vht.tpe.pwr_constr_320",
52039 FT_INT8, BASE_CUSTOM, CF_FUNC(vht_tpe_custom)((const void *) (size_t) (vht_tpe_custom)), 0,
52040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52041
52042 {&hf_ieee80211_vht_tpe_any_bw_psd,
52043 {"Max Tx Power Spectral Density", "wlan.vht.tpe.max_tx_psd",
52044 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) }},
52045
52046 {&hf_ieee80211_vht_tpe_psd,
52047 {"Power Spectral Density", "wlan.vht.tpe.psd",
52048 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) }},
52049
52050 {&hf_ieee80211_vht_tpe_ext_count,
52051 {"Extension Count", "wlan.vht.tpe.extension_count",
52052 FT_UINT8, BASE_DEC, NULL((void*)0) , 0x0f,
52053 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52054
52055 {&hf_ieee80211_vht_tpe_ext_reserved,
52056 {"Reserved", "wlan.vht.tpe.extension_reserved",
52057 FT_UINT8, BASE_HEX, NULL((void*)0) , 0xf0,
52058 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52059
52060 {&hf_ieee80211_txbf_csi_num_bf_ant,
52061 {"CSI Number of Beamformer Antennas", "wlan.txbf.csinumant",
52062 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x00180000,
52063 "Max antennae station can support when CSI feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52064
52065 {&hf_ieee80211_txbf_uncomp_sm_bf_ant,
52066 {"Noncompressed Steering Number of Beamformer Antennas", "wlan.txbf.fm.uncompressed.maxant",
52067 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x00600000,
52068 "Max antennae station can support when uncompressed Beamforming feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52069
52070 {&hf_ieee80211_txbf_comp_sm_bf_ant,
52071 {"Compressed Steering Number of Beamformer Antennas", "wlan.txbf.fm.compressed.maxant",
52072 FT_UINT32, BASE_HEX, VALS(txbf_antenna_flags)((0 ? (const struct _value_string*)0 : ((txbf_antenna_flags))
))
, 0x01800000,
52073 "Max antennae station can support when compressed Beamforming feedback required", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52074
52075 {&hf_ieee80211_txbf_csi_max_rows_bf,
52076 {"CSI Max Number of Rows Beamformer", "wlan.txbf.csi.maxrows",
52077 FT_UINT32, BASE_HEX, VALS(txbf_csi_max_rows_bf_flags)((0 ? (const struct _value_string*)0 : ((txbf_csi_max_rows_bf_flags
))))
, 0x06000000,
52078 "Maximum number of rows of CSI explicit feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52079
52080 {&hf_ieee80211_txbf_chan_est,
52081 {"Channel Estimation", "wlan.txbf.channelest",
52082 FT_UINT32, BASE_HEX, VALS(txbf_chan_est_flags)((0 ? (const struct _value_string*)0 : ((txbf_chan_est_flags)
)))
, 0x18000000,
52083 "Maximum number of space time streams for which channel dimensions can be simultaneously estimated", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52084
52085 {&hf_ieee80211_txbf_resrv,
52086 {"Reserved", "wlan.txbf.reserved",
52087 FT_UINT32, BASE_HEX, NULL((void*)0), 0xe0000000,
52088 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52089
52090 {&hf_ieee80211_hta_cc,
52091 {"HT Control Channel", "wlan.hta.control_channel",
52092 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52094
52095 {&hf_ieee80211_hta_cap1,
52096 {"HT Additional Capabilities", "wlan.hta.capabilities",
52097 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52098 "HT Additional Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52099
52100 {&hf_ieee80211_hta_cap2,
52101 {"HT Additional Capabilities", "wlan.hta.capabilities",
52102 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52103 "HT Additional Capability information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52104
52105 {&hf_ieee80211_hta_ext_chan_offset,
52106 {"Extension Channel Offset", "wlan.hta.capabilities.ext_chan_offset",
52107 FT_UINT16, BASE_HEX, VALS(hta_ext_chan_offset_flag)((0 ? (const struct _value_string*)0 : ((hta_ext_chan_offset_flag
))))
, 0x0003,
52108 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52109
52110 {&hf_ieee80211_hta_rec_tx_width,
52111 {"Recommended Tx Channel Width", "wlan.hta.capabilities.rec_tx_width",
52112 FT_BOOLEAN, 16, TFS(&hta_rec_tx_width_flag)((0 ? (const struct true_false_string*)0 : ((&hta_rec_tx_width_flag
))))
, 0x0004,
52113 "Recommended Transmit Channel Width", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52114
52115 {&hf_ieee80211_hta_rifs_mode,
52116 {"Reduced Interframe Spacing (RIFS) Mode", "wlan.hta.capabilities.rifs_mode",
52117 FT_BOOLEAN, 16, TFS(&hta_rifs_mode_flag)((0 ? (const struct true_false_string*)0 : ((&hta_rifs_mode_flag
))))
, 0x0008,
52118 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52119
52120 {&hf_ieee80211_hta_controlled_access,
52121 {"Controlled Access Only", "wlan.hta.capabilities.controlled_access",
52122 FT_BOOLEAN, 16, TFS(&hta_controlled_access_flag)((0 ? (const struct true_false_string*)0 : ((&hta_controlled_access_flag
))))
, 0x0010,
52123 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52124
52125 {&hf_ieee80211_hta_service_interval,
52126 {"Service Interval Granularity", "wlan.hta.capabilities.service_interval",
52127 FT_UINT16, BASE_HEX, VALS(hta_service_interval_flag)((0 ? (const struct _value_string*)0 : ((hta_service_interval_flag
))))
, 0x00E0,
52128 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52129
52130 {&hf_ieee80211_hta_operating_mode,
52131 {"Operating Mode", "wlan.hta.capabilities.operating_mode",
52132 FT_UINT16, BASE_HEX, VALS(hta_operating_mode_flag)((0 ? (const struct _value_string*)0 : ((hta_operating_mode_flag
))))
, 0x0003,
52133 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52134
52135 {&hf_ieee80211_hta_non_gf_devices,
52136 {"Non Greenfield (GF) devices Present", "wlan.hta.capabilities.non_gf_devices",
52137 FT_BOOLEAN, 16, TFS(&hta_non_gf_devices_flag)((0 ? (const struct true_false_string*)0 : ((&hta_non_gf_devices_flag
))))
, 0x0004,
52138 "on Greenfield (GF) devices Present", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52139
52140 {&hf_ieee80211_hta_basic_stbc_mcs,
52141 {"Basic STB Modulation and Coding Scheme (MCS)", "wlan.hta.capabilities.basic_stbc_mcs",
52142 FT_UINT16, BASE_HEX, NULL((void*)0) , 0x007f,
52143 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52144
52145 {&hf_ieee80211_hta_dual_stbc_protection,
52146 {"Dual Clear To Send (CTS) Protection", "wlan.hta.capabilities.dual_stbc_protection",
52147 FT_BOOLEAN, 16, TFS(&hta_dual_stbc_protection_flag)((0 ? (const struct true_false_string*)0 : ((&hta_dual_stbc_protection_flag
))))
, 0x0080,
52148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52149
52150 {&hf_ieee80211_hta_secondary_beacon,
52151 {"Secondary Beacon", "wlan.hta.capabilities.secondary_beacon",
52152 FT_BOOLEAN, 16, TFS(&hta_secondary_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&hta_secondary_beacon_flag
))))
, 0x0100,
52153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52154
52155 {&hf_ieee80211_hta_lsig_txop_protection,
52156 {"L-SIG TXOP Protection Support", "wlan.hta.capabilities.lsig_txop_protection",
52157 FT_BOOLEAN, 16, TFS(&hta_lsig_txop_protection_flag)((0 ? (const struct true_false_string*)0 : ((&hta_lsig_txop_protection_flag
))))
, 0x0200,
52158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52159
52160 {&hf_ieee80211_hta_pco_active,
52161 {"Phased Coexistence Operation (PCO) Active", "wlan.hta.capabilities.pco_active",
52162 FT_BOOLEAN, 16, TFS(&hta_pco_active_flag)((0 ? (const struct true_false_string*)0 : ((&hta_pco_active_flag
))))
, 0x0400,
52163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52164
52165 {&hf_ieee80211_hta_pco_phase,
52166 {"Phased Coexistence Operation (PCO) Phase", "wlan.hta.capabilities.pco_phase",
52167 FT_BOOLEAN, 16, TFS(&hta_pco_phase_flag)((0 ? (const struct true_false_string*)0 : ((&hta_pco_phase_flag
))))
, 0x0800,
52168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52169
52170 {&hf_ieee80211_antsel,
52171 {"Antenna Selection (ASEL) Capabilities", "wlan.asel",
52172 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52173 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52174
52175 {&hf_ieee80211_antsel_vs,
52176 {"Antenna Selection (ASEL) Capabilities (VS)", "wlan.vs.asel",
52177 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52178 "Vendor Specific Antenna Selection (ASEL) Capabilities", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52179
52180 {&hf_ieee80211_antsel_b0,
52181 {"Antenna Selection Capable", "wlan.asel.capable",
52182 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
52183 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52184
52185 {&hf_ieee80211_antsel_b1,
52186 {"Explicit CSI Feedback Based Tx ASEL", "wlan.asel.txcsi",
52187 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
52188 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52189
52190 {&hf_ieee80211_antsel_b2,
52191 {"Antenna Indices Feedback Based Tx ASEL", "wlan.asel.txif",
52192 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
52193 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52194
52195 {&hf_ieee80211_antsel_b3,
52196 {"Explicit CSI Feedback", "wlan.asel.csi",
52197 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
52198 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52199
52200 {&hf_ieee80211_antsel_b4,
52201 {"Antenna Indices Feedback", "wlan.asel.if",
52202 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
52203 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52204
52205 {&hf_ieee80211_antsel_b5,
52206 {"Rx ASEL", "wlan.asel.rx",
52207 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
52208 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52209
52210 {&hf_ieee80211_antsel_b6,
52211 {"Tx Sounding PPDUs", "wlan.asel.sppdu",
52212 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52214
52215 {&hf_ieee80211_antsel_b7,
52216 {"Reserved", "wlan.asel.reserved",
52217 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
52218 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52219
52220 {&hf_ieee80211_ht_operation_info_delimiter1,
52221 {"HT Operation Information Subset (1 of 3)", "wlan.ht.info.delim1",
52222 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52223 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52224
52225 {&hf_ieee80211_ht_operation_primary_channel,
52226 {"Primary Channel", "wlan.ht.info.primarychannel",
52227 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52228 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52229
52230 {&hf_ieee80211_ht_operation_info_secondary_channel_offset,
52231 {"Secondary channel offset", "wlan.ht.info.secchanoffset",
52232 FT_UINT8, BASE_HEX, VALS(ht_info_secondary_channel_offset_flags)((0 ? (const struct _value_string*)0 : ((ht_info_secondary_channel_offset_flags
))))
, 0x03,
52233 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52234
52235 {&hf_ieee80211_ht_operation_info_sta_channel_width,
52236 {"Supported channel width", "wlan.ht.info.chanwidth",
52237 FT_BOOLEAN, 8, TFS(&ht_info_channel_sta_width_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_channel_sta_width_flag
))))
, 0x04,
52238 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52239
52240 {&hf_ieee80211_ht_operation_info_rifs_mode,
52241 {"Reduced Interframe Spacing (RIFS)", "wlan.ht.info.rifs",
52242 FT_BOOLEAN, 8, TFS(&ht_info_rifs_mode_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_rifs_mode_flag
))))
, 0x08,
52243 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52244
52245 {&hf_ieee80211_ht_operation_info_reserved_b4_b7,
52246 {"Reserved", "wlan.ht.info.reserved_b4_b7",
52247 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52248
52249 {&hf_ieee80211_ht_operation_info_delimiter2,
52250 {"HT Operation Information Subset (2 of 3)", "wlan.ht.info.delim2",
52251 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52253
52254 {&hf_ieee80211_ht_operation_info_protection,
52255 {"HT Protection", "wlan.ht.info.ht_protection",
52256 FT_UINT16, BASE_HEX, VALS(ht_info_operating_protection_mode_flags)((0 ? (const struct _value_string*)0 : ((ht_info_operating_protection_mode_flags
))))
, 0x0003,
52257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52258
52259 {&hf_ieee80211_ht_operation_info_non_greenfield_sta_present,
52260 {"Non-greenfield STAs present", "wlan.ht.info.greenfield",
52261 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,
52262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52263
52264 {&hf_ieee80211_ht_operation_info_reserved_b11,
52265 {"Reserved", "wlan.ht.info.reserved_b11",
52266 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52267
52268 {&hf_ieee80211_ht_operation_info_obss_non_ht_stas_present,
52269 {"OBSS non-HT STAs present", "wlan.ht.info.obssnonht",
52270 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,
52271 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52272
52273 {&hf_ieee80211_ht_operation_info_channel_center_freq_seg_2,
52274 {"Channel Center Frequency Segment 2", "wlan.ht.info.chan_center_freq_seg_2",
52275 FT_UINT16, BASE_DEC, NULL((void*)0), 0x1fe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52276
52277 {&hf_ieee80211_ht_operation_info_reserved_b21_b23,
52278 {"Reserved", "wlan.ht.info.reserved_b21_b23",
52279 FT_UINT16, BASE_HEX, NULL((void*)0), 0xe000,
52280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52281
52282 {&hf_ieee80211_ht_operation_info_delimiter3,
52283 {"HT Operation Information Subset (3 of 3)", "wlan.ht.info.delim3",
52284 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52286
52287 {&hf_ieee80211_ht_operation_info_reserved_b24_b29,
52288 {"Reserved", "wlan.ht.info.reserved_b24_b29",
52289 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52290
52291 {&hf_ieee80211_ht_operation_info_dual_beacon,
52292 {"Dual beacon", "wlan.ht.info.dualbeacon",
52293 FT_BOOLEAN, 16, TFS(&ht_info_dual_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_dual_beacon_flag
))))
, 0x0040,
52294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52295
52296 {&hf_ieee80211_ht_operation_info_dual_cts_protection,
52297 {"Dual Clear To Send (CTS) protection", "wlan.ht.info.dualcts",
52298 FT_BOOLEAN, 16, TFS(&tfs_required_not_required)((0 ? (const struct true_false_string*)0 : ((&tfs_required_not_required
))))
, 0x0080,
52299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52300
52301 {&hf_ieee80211_ht_operation_info_stbc_beacon,
52302 {"STBC Beacon", "wlan.ht.info.stbcbeacon",
52303 FT_BOOLEAN, 16, TFS(&ht_info_stbc_beacon_flag)((0 ? (const struct true_false_string*)0 : ((&ht_info_stbc_beacon_flag
))))
, 0x0100,
52304 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52305
52306 {&hf_ieee80211_ht_operation_info_reserved_b33_b39,
52307 {"Reserved", "wlan.ht.info.reserved_b33_b39",
52308 FT_UINT16, BASE_HEX, NULL((void*)0), 0xfe00,
52309 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52310
52311 {&hf_ieee80211_ht_operation_mcsset_reserved,
52312 {"Basic HT-MCS Set: Reserved", "wlan.ht.info.mcsset_reserved",
52313 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
52314 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52315
52316 {&hf_ieee80211_tag_ap_channel_report_operating_class,
52317 {"Operating Class", "wlan.ap_channel_report.operating_class",
52318 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52319 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52320
52321 {&hf_ieee80211_tag_ap_channel_report_channel_list,
52322 {"Channel List", "wlan.ap_channel_report.channel_list",
52323 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52324 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52325
52326 {&hf_ieee80211_tag_secondary_channel_offset,
52327 {"Secondary Channel Offset", "wlan.secchanoffset",
52328 FT_UINT8, BASE_HEX, VALS(ieee80211_tag_secondary_channel_offset_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_secondary_channel_offset_flags
))))
, 0,
52329 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52330
52331 {&hf_ieee80211_tag_bss_ap_avg_access_delay,
52332 {"AP Average Access Delay", "wlan.bss_ap_avg_access_delay",
52333 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52334 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52335
52336 {&hf_ieee80211_tag_antenna_id,
52337 {"Antenna ID", "wlan.antenna.id",
52338 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52339 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52340
52341 {&hf_ieee80211_tag_rsni,
52342 {"RSNI", "wlan.rsni",
52343 FT_UINT8, BASE_CUSTOM, CF_FUNC(rsni_base_custom)((const void *) (size_t) (rsni_base_custom)), 0x0,
52344 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52345
52346 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask,
52347 {"Available Admission Capacity Bitmask", "wlan.bss_avb_adm_cap.bitmask",
52348 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52350
52351 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up0,
52352 {"UP0 (bit0)", "wlan.bss_avb_adm_cap.bitmask.up0",
52353 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP00x0001,
52354 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52355
52356 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up1,
52357 {"UP1 (bit1)", "wlan.bss_avb_adm_cap.bitmask.up1",
52358 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP10x0002,
52359 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52360
52361 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up2,
52362 {"UP2 (bit2)", "wlan.bss_avb_adm_cap.bitmask.up2",
52363 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP20x0004,
52364 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52365
52366 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up3,
52367 {"UP3 (bit3)", "wlan.bss_avb_adm_cap.bitmask.up3",
52368 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP30x0008,
52369 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52370
52371 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up4,
52372 {"UP4 (bit4)", "wlan.bss_avb_adm_cap.bitmask.up4",
52373 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP40x0010,
52374 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52375
52376 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up5,
52377 {"UP5 (bit5)", "wlan.bss_avb_adm_cap.bitmask.up5",
52378 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP50x0020,
52379 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52380
52381 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up6,
52382 {"UP6 (bit6)", "wlan.bss_avb_adm_cap.bitmask.up6",
52383 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP60x0040,
52384 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52385
52386 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_up7,
52387 {"UP7 (bit7)", "wlan.bss_avb_adm_cap.bitmask.up7",
52388 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_UP70x0080,
52389 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52390
52391 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac0,
52392 {"AC0 (bit8)", "wlan.bss_avb_adm_cap.bitmask.ac0",
52393 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC00x0100,
52394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52395
52396 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac1,
52397 {"AC1 (bit9)", "wlan.bss_avb_adm_cap.bitmask.AC1",
52398 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC10x0200,
52399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52400
52401 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac2,
52402 {"AC2 (bit10)", "wlan.bss_avb_adm_cap.bitmask.ac2",
52403 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC20x0400,
52404 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52405
52406 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_ac3,
52407 {"AC3 (bit11)", "wlan.bss_avb_adm_cap.bitmask.ac3",
52408 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, BSS_BITMASK_AC30x0800,
52409 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52410
52411 {&hf_ieee80211_tag_bss_avb_adm_cap_bitmask_rsv,
52412 {"Reserved", "wlan.bss_avb_adm_cap.bitmask.rsv",
52413 FT_UINT16, BASE_HEX, NULL((void*)0), BSS_BITMASK_RSV0xF000,
52414 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52415
52416 {&hf_ieee80211_tag_bss_avb_adm_cap_up0,
52417 {"UP0", "wlan.bss_avb_adm_cap.up0",
52418 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52419 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52420
52421 {&hf_ieee80211_tag_bss_avb_adm_cap_up1,
52422 {"UP1", "wlan.bss_avb_adm_cap.up1",
52423 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52424 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52425
52426 {&hf_ieee80211_tag_bss_avb_adm_cap_up2,
52427 {"UP2", "wlan.bss_avb_adm_cap.up2",
52428 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52429 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52430
52431 {&hf_ieee80211_tag_bss_avb_adm_cap_up3,
52432 {"UP3", "wlan.bss_avb_adm_cap.up3",
52433 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52434 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52435
52436 {&hf_ieee80211_tag_bss_avb_adm_cap_up4,
52437 {"UP4", "wlan.bss_avb_adm_cap.up4",
52438 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52439 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52440
52441 {&hf_ieee80211_tag_bss_avb_adm_cap_up5,
52442 {"UP5", "wlan.bss_avb_adm_cap.up5",
52443 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52444 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52445
52446 {&hf_ieee80211_tag_bss_avb_adm_cap_up6,
52447 {"UP6", "wlan.bss_avb_adm_cap.up6",
52448 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52449 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52450
52451 {&hf_ieee80211_tag_bss_avb_adm_cap_up7,
52452 {"UP7", "wlan.bss_avb_adm_cap.up7",
52453 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52454 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52455
52456 {&hf_ieee80211_tag_bss_avb_adm_cap_ac0,
52457 {"AC0", "wlan.bss_avb_adm_cap.ac0",
52458 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52459 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52460
52461 {&hf_ieee80211_tag_bss_avb_adm_cap_ac1,
52462 {"AC1", "wlan.bss_avb_adm_cap.ac1",
52463 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52465
52466 {&hf_ieee80211_tag_bss_avb_adm_cap_ac2,
52467 {"AC2", "wlan.bss_avb_adm_cap.ac2",
52468 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52469 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52470
52471 {&hf_ieee80211_tag_bss_avb_adm_cap_ac3,
52472 {"AC3", "wlan.bss_avb_adm_cap.ac3",
52473 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
52474 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52475
52476 {&hf_ieee80211_tag_bss_avg_ac_access_delay_be,
52477 {"AC Average Access Delay for Best Effort", "wlan.bss_avg_ac_access_delay.be",
52478 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52479 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52480
52481 {&hf_ieee80211_tag_bss_avg_ac_access_delay_bk,
52482 {"AC Average Access Delay for Best Background", "wlan.bss_avg_ac_access_delay.bk",
52483 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52485
52486 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vi,
52487 {"AC Average Access Delay for Video", "wlan.bss_avg_ac_access_delay_vi",
52488 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52489 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52490
52491 {&hf_ieee80211_tag_bss_avg_ac_access_delay_vo,
52492 {"AC Average Access Delay for Voice", "wlan.bss_avg_ac_access_delay_vo",
52493 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52494 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52495
52496
52497 /* 802.11-2012 Table 8-119-RM Enabled Capabilities definition */
52498 {&hf_ieee80211_tag_rm_enabled_capabilities,
52499 {"RM Capabilities", "wlan.rmcap",
52500 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52501 "Signals support for radio measurements in a device", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52502
52503 /* RM Enabled Capability octet 1 */
52504 {&hf_ieee80211_tag_rm_enabled_capabilities_b0,
52505 {"Link Measurement", "wlan.rmcap.b0",
52506 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52508
52509 {&hf_ieee80211_tag_rm_enabled_capabilities_b1,
52510 {"Neighbor Report", "wlan.rmcap.b1",
52511 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52513
52514 {&hf_ieee80211_tag_rm_enabled_capabilities_b2,
52515 {"Parallel Measurements", "wlan.rmcap.b2",
52516 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52518
52519 {&hf_ieee80211_tag_rm_enabled_capabilities_b3,
52520 {"Repeated Measurements", "wlan.rmcap.b3",
52521 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52523
52524 {&hf_ieee80211_tag_rm_enabled_capabilities_b4,
52525 {"Beacon Passive Measurement", "wlan.rmcap.b4",
52526 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52528
52529 {&hf_ieee80211_tag_rm_enabled_capabilities_b5,
52530 {"Beacon Active Measurement", "wlan.rmcap.b5",
52531 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52533
52534 {&hf_ieee80211_tag_rm_enabled_capabilities_b6,
52535 {"Beacon Table Measurement", "wlan.rmcap.b6",
52536 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52538
52539 {&hf_ieee80211_tag_rm_enabled_capabilities_b7,
52540 {"Beacon Measurement Reporting Conditions", "wlan.rmcap.b7",
52541 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52543
52544 /* RM Enabled Capability octet 2 */
52545 {&hf_ieee80211_tag_rm_enabled_capabilities_b8,
52546 {"Frame Measurement", "wlan.rmcap.b8",
52547 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52548 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52549
52550 {&hf_ieee80211_tag_rm_enabled_capabilities_b9,
52551 {"Channel Load Measurement", "wlan.rmcap.b9",
52552 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52553 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52554
52555 {&hf_ieee80211_tag_rm_enabled_capabilities_b10,
52556 {"Noise Histogram Measurement", "wlan.rmcap.b10",
52557 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52558 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52559
52560 {&hf_ieee80211_tag_rm_enabled_capabilities_b11,
52561 {"Statistics Measurement", "wlan.rmcap.b11",
52562 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52563 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52564
52565 {&hf_ieee80211_tag_rm_enabled_capabilities_b12,
52566 {"LCI Measurement", "wlan.rmcap.b12",
52567 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52568 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52569
52570 {&hf_ieee80211_tag_rm_enabled_capabilities_b13,
52571 {"LCI Azimuth capability", "wlan.rmcap.b13",
52572 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52573 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52574
52575 {&hf_ieee80211_tag_rm_enabled_capabilities_b14,
52576 {"Transmit Stream/Category Measurement", "wlan.rmcap.b14",
52577 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52578 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52579
52580 {&hf_ieee80211_tag_rm_enabled_capabilities_b15,
52581 {"Triggered Transmit Stream/Category Measurement", "wlan.rmcap.b15",
52582 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52583 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52584
52585 /* RM Enabled Capability octet 3 */
52586 {&hf_ieee80211_tag_rm_enabled_capabilities_b16,
52587 {"AP Channel Report capability", "wlan.rmcap.b16",
52588 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52590
52591 {&hf_ieee80211_tag_rm_enabled_capabilities_b17,
52592 {"RM MIB capability", "wlan.rmcap.b17",
52593 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52595
52596 {&hf_ieee80211_tag_rm_enabled_capabilities_b18to20,
52597 {"Operating Channel Max Measurement Duration", "wlan.rmcap.b18to20",
52598 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C,
52599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52600
52601 {&hf_ieee80211_tag_rm_enabled_capabilities_b21to23,
52602 {"Nonoperating Channel Max Measurement Duration", "wlan.rmcap.b21to23",
52603 FT_UINT8, BASE_DEC, NULL((void*)0), 0xE0,
52604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52605
52606 /* RM Enabled Capability octet 4 */
52607 {&hf_ieee80211_tag_rm_enabled_capabilities_b24to26,
52608 {"Measurement Pilotcapability", "wlan.rmcap.b24to26",
52609 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07,
52610 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52611
52612 {&hf_ieee80211_tag_rm_enabled_capabilities_b27,
52613 {"Measurement Pilot Transmission Information", "wlan.rmcap.b27",
52614 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52616
52617 {&hf_ieee80211_tag_rm_enabled_capabilities_b28,
52618 {"Neighbor Report TSF Offset", "wlan.rmcap.b28",
52619 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x10,
52620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52621
52622 {&hf_ieee80211_tag_rm_enabled_capabilities_b29,
52623 {"RCPI Measurement capability", "wlan.rmcap.b29",
52624 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x20,
52625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52626
52627 {&hf_ieee80211_tag_rm_enabled_capabilities_b30,
52628 {"RSNI Measurement capability", "wlan.rmcap.b30",
52629 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
52630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52631
52632 {&hf_ieee80211_tag_rm_enabled_capabilities_b31,
52633 {"BSS Average Access Delay capability", "wlan.rmcap.b31",
52634 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
52635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52636
52637 /* RM Enabled Capability octet 5 */
52638 {&hf_ieee80211_tag_rm_enabled_capabilities_b32,
52639 {"BSS Available Admission Capacity capability", "wlan.rmcap.b32",
52640 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
52641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52642
52643 {&hf_ieee80211_tag_rm_enabled_capabilities_b33,
52644 {"Antenna capability", "wlan.rmcap.b33",
52645 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52647
52648 {&hf_ieee80211_tag_rm_enabled_capabilities_b34,
52649 {"FTM Range Report Capability", "wlan.rmcap.b34",
52650 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x04,
52651 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52652
52653 {&hf_ieee80211_tag_rm_enabled_capabilities_b35,
52654 {"Civic Location Measurement Capability", "wlan.rmcap.b35",
52655 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x08,
52656 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52657
52658 {&hf_ieee80211_tag_rm_enabled_capabilities_o5,
52659 {"Reserved", "wlan.rmcap.o5",
52660 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0,
52661 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52662
52663 {&hf_ieee80211_tag_rcpi,
52664 {"RCPI", "wlan.rcpi",
52665 FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_and_power_level_custom)((const void *) (size_t) (rcpi_and_power_level_custom)), 0,
52666 "Received channel power indicator", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52667
52668 /* Multiple BSSID */
52669 {&hf_ieee80211_tag_multiple_bssid,
52670 {"Max BSSID Indicator", "wlan.multiple_bssid",
52671 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52672 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52673
52674 {&hf_ieee80211_tag_multiple_bssid_subelem_id,
52675 {"Subelement ID", "wlan.multiple_bssid.subelem.id",
52676 FT_UINT8, BASE_DEC, VALS(multiple_bssid_subelem_ids)((0 ? (const struct _value_string*)0 : ((multiple_bssid_subelem_ids
))))
, 0x0,
52677 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52678
52679 {&hf_ieee80211_tag_multiple_bssid_subelem_len,
52680 {"Length", "wlan.multiple_bssid.subelem.len",
52681 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
52682 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52683
52684 {&hf_ieee80211_tag_multiple_bssid_subelem_reserved,
52685 {"Reserved", "wlan.multiple_bssid.subelem.reserved",
52686 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52687 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52688
52689 {&hf_ieee80211_tag_multiple_bssid_subelem_nontrans_profile,
52690 {"Nontransmitted Profile", "wlan.multiple_bssid.subelem.nontrans_profile",
52691 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52692 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52693
52694 /* 20/40 BSS Coexistence */
52695 {&hf_ieee80211_tag_20_40_bc,
52696 {"20/40 BSS Coexistence Flags", "wlan.20_40_bc",
52697 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
52698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52699
52700 {&hf_ieee80211_tag_20_40_bc_information_request,
52701 {"Information Request", "wlan.20_40_bc.information_request",
52702 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
52703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52704
52705 {&hf_ieee80211_tag_20_40_bc_forty_mhz_intolerant,
52706 {"Forty MHz Intolerant", "wlan.20_40_bc.forty_mhz_intolerant",
52707 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
52708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52709
52710 {&hf_ieee80211_tag_20_40_bc_20_mhz_bss_width_request,
52711 {"20 MHz BSS Width Request", "wlan.20_40_bc.20_mhz_bss_width_request",
52712 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
52713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52714
52715 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_request,
52716 {"OBSS Scanning Exemption Request", "wlan.20_40_bc.obss_scanning_exemption_request",
52717 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
52718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52719
52720 {&hf_ieee80211_tag_20_40_bc_obss_scanning_exemption_grant,
52721 {"OBSS Scanning Exemption Grant", "wlan.20_40_bc.obss_scanning_exemption_grant",
52722 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
52723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52724
52725 {&hf_ieee80211_tag_20_40_bc_reserved,
52726 {"Reserved", "wlan.20_40_bc.reserved",
52727 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
52728 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52729
52730 {&hf_ieee80211_tag_intolerant_operating_class,
52731 {"Intolerant Operating Class", "wlan.tag.intolerant.operating_class",
52732 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52733
52734 {&hf_ieee80211_tag_intolerant_channel_list,
52735 {"Intolerant Channel List", "wlan.tag.intolerant.channel_list",
52736 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52737
52738 {&hf_ieee80211_tag_intolerant_channel,
52739 {"Intolerant Channel", "wlan.tag.intolerant.channel",
52740 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52741
52742 {&hf_ieee80211_tag_power_constraint_local,
52743 {"Local Power Constraint", "wlan.powercon.local",
52744 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52745 "Value that allows the mitigation requirements to be satisfied in the current channel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52746
52747 {&hf_ieee80211_tag_power_capability_min,
52748 {"Minimum Transmit Power", "wlan.powercap.min",
52749 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52750 "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) }},
52751
52752 {&hf_ieee80211_tag_power_capability_max,
52753 {"Maximum Transmit Power", "wlan.powercap.max",
52754 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52755 "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) }},
52756
52757 {&hf_ieee80211_tag_tpc_report_trsmt_pow,
52758 {"Transmit Power", "wlan.tpcrep.trsmt_pow",
52759 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
52760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52761
52762 {&hf_ieee80211_tag_tpc_report_link_mrg,
52763 {"Link Margin", "wlan.tpcrep.link_mrg",
52764 FT_INT8, BASE_DEC, NULL((void*)0), 0,
52765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52766
52767 {&hf_ieee80211_tag_tpc_report_reserved,
52768 {"Reserved", "wlan.tpcrep.reserved",
52769 FT_INT8, BASE_DEC, NULL((void*)0), 0,
52770 "TPC Link Margin field is reserved in a Beacon or Probe Response frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52771
52772 {&hf_ieee80211_tag_supported_channels,
52773 {"Supported Channels Set", "wlan.supchan",
52774 FT_NONE, BASE_NONE, NULL((void*)0), 0,
52775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52776
52777 {&hf_ieee80211_tag_supported_channels_first,
52778 {"First Supported Channel", "wlan.supchan.first",
52779 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52781
52782 {&hf_ieee80211_tag_supported_channels_range,
52783 {"Supported Channel Range", "wlan.supchan.range",
52784 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52786
52787 {&hf_ieee80211_csa_channel_switch_mode,
52788 {"Channel Switch Mode", "wlan.csa.channel_switch_mode",
52789 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52790 "Indicates any restrictions on transmission until a channel switch", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52791
52792 {&hf_ieee80211_csa_new_channel_number,
52793 {"New Channel Number", "wlan.csa.new_channel_number",
52794 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52795 "Set to the number of the channel to which the STA is moving", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52796
52797 {&hf_ieee80211_csa_channel_switch_count,
52798 {"Channel Switch Count", "wlan.csa.channel_switch.count",
52799 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52800 "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) }},
52801
52802 {&hf_ieee80211_mesh_channel_switch_ttl,
52803 {"Mesh Channel Switch TTL", "wlan.csa.mesh_channel_switch.ttl",
52804 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52805 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52806
52807 {&hf_ieee80211_mesh_channel_switch_flag,
52808 {"Mesh Channel Switch Flag", "wlan.csa.mesh_channel_switch.flag",
52809 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52811
52812 {&hf_ieee80211_mesh_chswitch_flag_txrestrict,
52813 {"CSA Tx Restrict", "wlan.csa.mesh_channel_switch.flag.txrestrict",
52814 FT_BOOLEAN, 16, TFS(&csa_txrestrict_flags)((0 ? (const struct true_false_string*)0 : ((&csa_txrestrict_flags
))))
, 0x0001,
52815 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52816
52817 {&hf_ieee80211_mesh_chswitch_flag_initiator,
52818 {"CSA Initiator", "wlan.csa.mesh_channel_switch.flag.initiator",
52819 FT_BOOLEAN, 16, TFS(&csa_initiator_flags)((0 ? (const struct true_false_string*)0 : ((&csa_initiator_flags
))))
, 0x0002,
52820 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52821
52822 {&hf_ieee80211_mesh_channel_switch_reason_code,
52823 {"Mesh Channel Switch Reason Code", "wlan.csa.mesh_channel_switch.reason_code",
52824 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_reason_code_ext, 0,
52825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52826
52827 {&hf_ieee80211_mesh_channel_switch_precedence_value,
52828 {"Mesh Channel Switch Precedence Value", "wlan.csa.mesh_channel_switch.pre_value",
52829 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
52830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52831
52832 {&hf_ieee80211_mesh_awake_window,
52833 {"Mesh Awake Window", "wlan.mesh.mesh_awake_window",
52834 FT_UINT16, BASE_CUSTOM, CF_FUNC(mesh_active_window_base_custom)((const void *) (size_t) (mesh_active_window_base_custom)), 0,
52835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52836
52837 {&hf_ieee80211_tag_measure_request_token,
52838 {"Measurement Token", "wlan.measure.req.token",
52839 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52841
52842 {&hf_ieee80211_tag_measure_request_mode,
52843 {"Measurement Request Mode", "wlan.measure.req.mode",
52844 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52846
52847 {&hf_ieee80211_tag_measure_request_mode_parallel,
52848 {"Parallel", "wlan.measure.req.reqmode.parallel",
52849 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
52850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52851
52852 {&hf_ieee80211_tag_measure_request_mode_enable,
52853 {"Measurement Request Mode Field", "wlan.measure.req.reqmode.enable",
52854 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x02,
52855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52856
52857 {&hf_ieee80211_tag_measure_request_mode_request,
52858 {"Measurement Reports", "wlan.measure.req.reqmode.request",
52859 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x04,
52860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52861
52862 {&hf_ieee80211_tag_measure_request_mode_report,
52863 {"Autonomous Measurement Reports", "wlan.measure.req.reqmode.report",
52864 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x08,
52865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52866
52867 {&hf_ieee80211_tag_measure_request_mode_duration_mandatory,
52868 {"Duration Mandatory", "wlan.measure.req.reqmode.duration_mandatory",
52869 FT_BOOLEAN, 8, TFS(&tfs_accepted_not_accepted)((0 ? (const struct true_false_string*)0 : ((&tfs_accepted_not_accepted
))))
, 0x10,
52870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52871
52872 {&hf_ieee80211_tag_measure_request_mode_reserved,
52873 {"Reserved", "wlan.measure.req.reqmode.reserved",
52874 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0,
52875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52876
52877 {&hf_ieee80211_tag_measure_request_type,
52878 {"Measurement Request Type", "wlan.measure.req.reqtype",
52879 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_request_type_flags_ext, 0x00,
52880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52881
52882 {&hf_ieee80211_tag_measure_request_channel_number,
52883 {"Measurement Channel Number", "wlan.measure.req.channelnumber",
52884 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom)((const void *) (size_t) (channel_number_custom)), 0,
52885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52886
52887 {&hf_ieee80211_tag_measure_request_start_time,
52888 {"Measurement Start Time", "wlan.measure.req.starttime",
52889 FT_UINT64, 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_request_duration,
52893 {"Measurement Duration", "wlan.measure.req.duration",
52894 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52895 "in TU (1 TU = 1024 us)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52896
52897 {&hf_ieee80211_tag_measure_request_operating_class,
52898 {"Operating Class", "wlan.measure.req.operatingclass",
52899 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52901
52902 {&hf_ieee80211_tag_measure_request_randomization_interval,
52903 {"Randomization Interval", "wlan.measure.req.randint",
52904 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
52905 "in TU (1 TU = 1024 us)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52906
52907 {&hf_ieee80211_tag_measure_request_measurement_mode,
52908 {"Measurement Mode", "wlan.measure.req.measurementmode",
52909 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,
52910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52911
52912 {&hf_ieee80211_tag_measure_request_bssid,
52913 {"BSSID", "wlan.measure.req.bssid",
52914 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
52915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52916
52917 {&hf_ieee80211_tag_measure_request_subelement_length,
52918 {"Length", "wlan.measure.req.sub.length",
52919 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
52920 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52921
52922 {&hf_ieee80211_tag_measure_request_beacon_sub_id,
52923 {"SubElement ID", "wlan.measure.req.beacon.sub.id",
52924 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,
52925 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52926
52927 {&hf_ieee80211_tag_measure_request_beacon_sub_ssid,
52928 {"SSID", "wlan.measure.req.beacon.sub.ssid",
52929 FT_STRING, BASE_NONE, NULL((void*)0), 0,
52930 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52931
52932 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_reporting_condition,
52933 {"Reporting Condition", "wlan.measure.req.beacon.sub.bri.repcond",
52934 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,
52935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52936
52937 {&hf_ieee80211_tag_measure_request_beacon_sub_bri_threshold_offset,
52938 {"Threshold/Offset", "wlan.measure.req.beacon.sub.bri.threshold_offset",
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_request_beacon_sub_reporting_detail,
52943 {"Reporting Detail", "wlan.measure.req.beacon.sub.bri.reporting_detail",
52944 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,
52945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52946
52947 {&hf_ieee80211_tag_measure_request_beacon_sub_last_report_indication_request,
52948 {"Request Indication", "wlan.measure.req.beacon.sub.last_report_ind_req",
52949 FT_BOOLEAN, BASE_NONE, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0,
52950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52951
52952 {&hf_ieee80211_tag_measure_request_beacon_unknown,
52953 {"Unknown Data", "wlan.measure.req.beacon.unknown",
52954 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52955 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52956
52957 {&hf_ieee80211_tag_measure_request_channel_load_sub_id,
52958 {"SubElement ID", "wlan.measure.req.channel_load.sub.id",
52959 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,
52960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52961
52962 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_condition,
52963 {"Reporting Condition", "wlan.measure.req.channel_load.sub.repcond",
52964 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,
52965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52966
52967 {&hf_ieee80211_tag_measure_request_channel_load_sub_reporting_ref,
52968 {"Reference Value", "wlan.measure.req.channel_load.sub.ref",
52969 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52971
52972
52973 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_id,
52974 {"SubElement ID", "wlan.measure.req.noise_histogram.sub.id",
52975 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,
52976 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52977
52978 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_condition,
52979 {"Reporting Condition", "wlan.measure.reqnoise_histogram.sub.repcond",
52980 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,
52981 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52982
52983 {&hf_ieee80211_tag_measure_request_noise_histogram_sub_reporting_anpi_ref,
52984 {"ANPI Reference Value", "wlan.measure.req.noise_histogram.sub.anpiref",
52985 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52986 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52987
52988
52989 {&hf_ieee80211_tag_measure_request_frame_request_type,
52990 {"Frame Request Type", "wlan.measure.req.frame_request_type",
52991 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
52992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52993
52994 {&hf_ieee80211_tag_measure_request_mac_address,
52995 {"MAC Address", "wlan.measure.req.mac_address",
52996 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
52997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
52998
52999 {&hf_ieee80211_tag_measure_request_peer_mac_address,
53000 {"Peer MAC Address", "wlan.measure.req.peer_mac_address",
53001 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53002 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53003
53004 {&hf_ieee80211_tag_measure_request_group_id,
53005 {"Group ID", "wlan.measure.req.groupid",
53006 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_request_group_id_flags_ext, 0,
53007 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53008
53009 {&hf_ieee80211_tag_measure_request_location_subject,
53010 {"Location Subject", "wlan.measure.req.location_subject",
53011 FT_UINT8, BASE_DEC, VALS(ieee80211_tag_measure_request_location_subject)((0 ? (const struct _value_string*)0 : ((ieee80211_tag_measure_request_location_subject
))))
, 0,
53012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53013
53014 {&hf_ieee80211_tag_measure_request_civic_location_type,
53015 {"Civic Location Type", "wlan.measure.req.location_type",
53016 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,
53017 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53018
53019 {&hf_ieee80211_tag_measure_request_location_service_interval_units,
53020 {"Location Service Interval Units", "wlan.measure.req.location_service_interval_units",
53021 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53023
53024 {&hf_ieee80211_tag_measure_request_location_service_interval,
53025 {"Location Service Interval", "wlan.measure.req.location_service_interval",
53026 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53028
53029 {&hf_ieee80211_tag_measure_request_unknown,
53030 {"Unknown Data", "wlan.measure.req.unknown",
53031 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53032 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53033
53034 {&hf_ieee80211_tag_measure_report_measurement_token,
53035 {"Measurement Token", "wlan.measure.rep.token",
53036 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53038
53039 {&hf_ieee80211_tag_measure_report_mode,
53040 {"Measurement Report Mode", "wlan.measure.rep.mode",
53041 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53043
53044 {&hf_ieee80211_tag_measure_report_mode_late,
53045 {"Late", "wlan.measure.rep.repmode.late",
53046 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x01,
53047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53048
53049 {&hf_ieee80211_tag_measure_report_mode_incapable,
53050 {"Incapable", "wlan.measure.rep.repmode.incapable",
53051 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x02,
53052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53053
53054 {&hf_ieee80211_tag_measure_report_mode_refused,
53055 {"Refused", "wlan.measure.rep.repmode.refused",
53056 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x04,
53057 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53058
53059 {&hf_ieee80211_tag_measure_report_mode_reserved,
53060 {"Reserved", "wlan.measure.rep.repmode.reserved",
53061 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf8,
53062 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53063
53064 {&hf_ieee80211_tag_measure_report_type,
53065 {"Measurement Report Type", "wlan.measure.rep.reptype",
53066 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_tag_measure_report_type_flags_ext, 0x00,
53067 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53068
53069 {&hf_ieee80211_tag_measure_report_channel_number,
53070 {"Measurement Channel Number", "wlan.measure.rep.channelnumber",
53071 FT_UINT8, BASE_CUSTOM, CF_FUNC(channel_number_custom)((const void *) (size_t) (channel_number_custom)), 0,
53072 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53073
53074 {&hf_ieee80211_tag_measure_report_start_time,
53075 {"Measurement Start Time", "wlan.measure.rep.starttime",
53076 FT_UINT64, BASE_HEX, NULL((void*)0), 0,
53077 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53078
53079 {&hf_ieee80211_tag_measure_report_duration,
53080 {"Measurement Duration", "wlan.measure.rep.duration",
53081 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
53082 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53083
53084 {&hf_ieee80211_tag_measure_report_beacon_unknown,
53085 {"Unknown Data", "wlan.measure.rep.beacon.unknown",
53086 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53087 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53088
53089 {&hf_ieee80211_tag_measure_reported_frame_frag_id,
53090 {"Fragment ID", "wlan.measure.rep.beacon.frag_id",
53091 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
53092 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
53093
53094 {&hf_ieee80211_tag_measure_reported_frame_frag_rep_id,
53095 {"Beacon Report ID", "wlan.measure.rep.beacon.frag_id.report_id",
53096 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00ff,
53097 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
53098
53099 {&hf_ieee80211_tag_measure_reported_frame_frag_number,
53100 {"Fragment ID Number", "wlan.measure.rep.beacon.frag_id.number",
53101 FT_UINT16, BASE_HEX, NULL((void*)0), 0x7f00,
53102 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
53103
53104 {&hf_ieee80211_tag_measure_reported_frame_frag_more,
53105 {"More Frame Body Fragments", "wlan.measure.rep.beacon.frag_id.more",
53106 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000,
53107 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
53108
53109 {&hf_ieee80211_tag_measure_cca_busy_fraction,
53110 {"CCA Busy Fraction", "wlan.measure.rep.ccabusy",
53111 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53112 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53113
53114 {&hf_ieee80211_tag_measure_basic_map_field,
53115 {"Map Field", "wlan.measure.rep.mapfield",
53116 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53117 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53118
53119 {&hf_ieee80211_tag_measure_map_field_bss,
53120 {"BSS", "wlan.measure.rep.repmode.mapfield.bss",
53121 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,
53122 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53123
53124 {&hf_ieee80211_tag_measure_map_field_ofdm,
53125 {"Orthogonal Frequency Division Multiplexing (OFDM) Preamble", "wlan.measure.rep.repmode.mapfield.ofdm_preamble",
53126 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x02,
53127 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53128
53129 {&hf_ieee80211_tag_measure_map_field_unident_signal,
53130 {"Unidentified Signal", "wlan.measure.rep.repmode.mapfield.unidentsig",
53131 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x04,
53132 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53133
53134 {&hf_ieee80211_tag_measure_map_field_radar,
53135 {"Radar", "wlan.measure.rep.repmode.mapfield.radar",
53136 FT_BOOLEAN, 8, TFS(&tfs_detected_not_detected)((0 ? (const struct true_false_string*)0 : ((&tfs_detected_not_detected
))))
, 0x08,
53137 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53138
53139 {&hf_ieee80211_tag_measure_map_field_unmeasured,
53140 {"Unmeasured", "wlan.measure.rep.repmode.mapfield.unmeasured",
53141 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53142 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53143
53144 {&hf_ieee80211_tag_measure_map_field_reserved,
53145 {"Reserved", "wlan.measure.rep.repmode.mapfield.reserved",
53146 FT_UINT8, BASE_HEX, NULL((void*)0), 0xe0,
53147 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53148
53149 {&hf_ieee80211_tag_measure_rpi_histogram_report,
53150 {"Receive Power Indicator (RPI) Histogram Report", "wlan.measure.rep.rpi.histogram_report",
53151 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53152 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53153
53154 {&hf_ieee80211_tag_measure_rpi_histogram_report_0,
53155 {"RPI 0 Density", "wlan.measure.rep.rpi.rpi0density",
53156 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53157 "Receive Power Indicator (RPI) 0 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53158
53159 {&hf_ieee80211_tag_measure_rpi_histogram_report_1,
53160 {"RPI 1 Density", "wlan.measure.rep.rpi.rpi1density",
53161 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53162 "Receive Power Indicator (RPI) 1 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53163
53164 {&hf_ieee80211_tag_measure_rpi_histogram_report_2,
53165 {"RPI 2 Density", "wlan.measure.rep.rpi.rpi2density",
53166 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53167 "Receive Power Indicator (RPI) 2 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53168
53169 {&hf_ieee80211_tag_measure_rpi_histogram_report_3,
53170 {"RPI 3 Density", "wlan.measure.rep.rpi.rpi3density",
53171 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53172 "Receive Power Indicator (RPI) 3 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53173
53174 {&hf_ieee80211_tag_measure_rpi_histogram_report_4,
53175 {"RPI 4 Density", "wlan.measure.rep.rpi.rpi4density",
53176 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53177 "Receive Power Indicator (RPI) 4 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53178
53179 {&hf_ieee80211_tag_measure_rpi_histogram_report_5,
53180 {"RPI 5 Density", "wlan.measure.rep.rpi.rpi5density",
53181 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53182 "Receive Power Indicator (RPI) 5 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53183
53184 {&hf_ieee80211_tag_measure_rpi_histogram_report_6,
53185 {"RPI 6 Density", "wlan.measure.rep.rpi.rpi6density",
53186 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53187 "Receive Power Indicator (RPI) 6 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53188
53189 {&hf_ieee80211_tag_measure_rpi_histogram_report_7,
53190 {"RPI 7 Density", "wlan.measure.rep.rpi.rpi7density",
53191 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53192 "Receive Power Indicator (RPI) 7 Density", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53193
53194 {&hf_ieee80211_tag_measure_report_operating_class,
53195 {"Operating Class", "wlan.measure.rep.operatingclass",
53196 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53197 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53198
53199 {&hf_ieee80211_tag_measure_report_channel_load,
53200 {"Channel Load", "wlan.measure.rep.chanload",
53201 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53202 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53203
53204 {&hf_ieee80211_tag_measure_report_frame_info,
53205 {"Reported Frame Information", "wlan.measure.rep.frameinfo",
53206 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53207 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53208
53209 {&hf_ieee80211_tag_measure_report_frame_info_phy_type,
53210 {"Condensed PHY", "wlan.measure.rep.frameinfo.phytype",
53211 FT_UINT8, BASE_HEX, NULL((void*)0), 0x7F,
53212 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53213
53214 {&hf_ieee80211_tag_measure_report_frame_info_frame_type,
53215 {"Reported Frame Type", "wlan.measure.rep.frameinfo.frametype",
53216 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,
53217 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53218
53219 {&hf_ieee80211_tag_measure_report_rcpi,
53220 {"Received Channel Power Indicator (RCPI)", "wlan.measure.rep.rcpi",
53221 FT_UINT8, BASE_CUSTOM, CF_FUNC(rcpi_and_power_level_custom)((const void *) (size_t) (rcpi_and_power_level_custom)), 0,
53222 "in dBm", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53223
53224 {&hf_ieee80211_tag_measure_report_rsni,
53225 {"Received Signal to Noise Indicator (RSNI)", "wlan.measure.rep.rsni",
53226 FT_UINT8, BASE_CUSTOM, CF_FUNC(rsni_base_custom)((const void *) (size_t) (rsni_base_custom)), 0,
53227 "in dB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53228
53229 {&hf_ieee80211_tag_measure_report_bssid,
53230 {"BSSID Being Reported", "wlan.measure.rep.bssid",
53231 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
53232 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53233
53234 {&hf_ieee80211_tag_measure_report_ant_id,
53235 {"Antenna ID", "wlan.measure.rep.antid",
53236 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53237 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53238
53239 {&hf_ieee80211_tag_measure_report_anpi,
53240 {"ANPI", "wlan.measure.rep.anpi",
53241 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53243
53244 {&hf_ieee80211_tag_measure_report_ipi_density_0,
53245 {"IPI Density 0", "wlan.measure.rep.ipi_density0",
53246 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53247 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53248
53249 {&hf_ieee80211_tag_measure_report_ipi_density_1,
53250 {"IPI Density 1", "wlan.measure.rep.ipi_density1",
53251 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53252 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53253
53254 {&hf_ieee80211_tag_measure_report_ipi_density_2,
53255 {"IPI Density 2", "wlan.measure.rep.ipi_density2",
53256 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53258
53259 {&hf_ieee80211_tag_measure_report_ipi_density_3,
53260 {"IPI Density 3", "wlan.measure.rep.ipi_density3",
53261 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53263
53264 {&hf_ieee80211_tag_measure_report_ipi_density_4,
53265 {"IPI Density 4", "wlan.measure.rep.ipi_density4",
53266 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53268
53269 {&hf_ieee80211_tag_measure_report_ipi_density_5,
53270 {"IPI Density 5", "wlan.measure.rep.ipi_density5",
53271 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53273
53274 {&hf_ieee80211_tag_measure_report_ipi_density_6,
53275 {"IPI Density 6", "wlan.measure.rep.ipi_density6",
53276 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53278
53279 {&hf_ieee80211_tag_measure_report_ipi_density_7,
53280 {"IPI Density 7", "wlan.measure.rep.ipi_density7",
53281 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53282 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53283
53284 {&hf_ieee80211_tag_measure_report_ipi_density_8,
53285 {"IPI Density 8", "wlan.measure.rep.ipi_density8",
53286 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53287 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53288
53289 {&hf_ieee80211_tag_measure_report_ipi_density_9,
53290 {"IPI Density 9", "wlan.measure.rep.ipi_density9",
53291 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53292 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53293
53294 {&hf_ieee80211_tag_measure_report_ipi_density_10,
53295 {"IPI Density 10", "wlan.measure.rep.ipi_density10",
53296 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53297 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53298
53299 {&hf_ieee80211_tag_measure_report_parent_tsf,
53300 {"Parent Timing Synchronization Function (TSF)", "wlan.measure.rep.parenttsf",
53301 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
53302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53303
53304 {&hf_ieee80211_tag_measure_report_subelement_length,
53305 {"Length", "wlan.measure.rep.sub.length",
53306 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53308
53309 {&hf_ieee80211_tag_measure_report_beacon_sub_id,
53310 {"SubElement ID", "wlan.measure.rep.beacon.sub.id",
53311 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,
53312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53313
53314 {&hf_ieee80211_tag_measure_report_unknown,
53315 {"Unknown Data", "wlan.measure.rep.unknown",
53316 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53317 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53318
53319 {&hf_ieee80211_tag_measure_report_beacon_sub_last_report_indication,
53320 {"Last Report", "wlan.measure.rep.beacon.sub.last_report",
53321 FT_BOOLEAN, BASE_NONE, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0,
53322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53323
53324 {&hf_ieee80211_tag_measure_report_lci_sub_id,
53325 {"SubElement ID", "wlan.measure.rep.lci.sub.id",
53326 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,
53327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53328
53329 {&hf_ieee80211_tag_measure_report_lci_lci,
53330 {"LCI", "wlan.measure.rep.lci.lci",
53331 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53332 "Location Configuration Information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53333
53334 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info,
53335 {"STA Floor Info", "wlan.measure.rep.lci.z.sta_floor_info",
53336 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
53337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53338
53339 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_expected_to_move,
53340 {"Expected To Move", "wlan.measure.rep.lci.z.sta_floor_info.expected_to_move",
53341 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
53342 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53343
53344 {&hf_ieee80211_tag_measure_report_lci_z_sta_floor_info_sta_floor_number,
53345 {"STA Floor Number", "wlan.measure.rep.lci.z.sta_floor_info.sta_floor_number",
53346 FT_UINT16, BASE_DEC, NULL((void*)0), 0xFFFC,
53347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53348
53349 {&hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor,
53350 {"STA Height Above Floor", "wlan.measure.rep.lci.z.sta_height_above_floor",
53351 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
53352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53353
53354 {&hf_ieee80211_tag_measure_report_lci_z_sta_height_above_floor_uncertainty,
53355 {"STA Height Above Floor Uncertainty", "wlan.measure.rep.lci.z.sta_height_above_floor_uncertainty",
53356 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
53357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53358
53359 {&hf_ieee80211_tag_measure_report_lci_urp,
53360 {"Usage Rules/Policy Parameters", "wlan.measure.rep.lci.urp",
53361 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
53362 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53363
53364 {&hf_ieee80211_tag_measure_report_lci_urp_retransmission_allowed,
53365 {"Retransmission Allowed", "wlan.measure.rep.lci.urp.retransmission_allowed",
53366 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53367 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53368
53369 {&hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative_present,
53370 {"Retention Expires Relative Present", "wlan.measure.rep.lci.urp.retention_expires_relative_present",
53371 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53373
53374 {&hf_ieee80211_tag_measure_report_lci_urp_sta_location_policy,
53375 {"STA Location Policy", "wlan.measure.rep.lci.urp.sta_location_policy",
53376 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53377 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53378
53379 {&hf_ieee80211_tag_measure_report_lci_urp_reserved,
53380 {"Reserved", "wlan.measure.rep.lci.urp.reserved",
53381 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
53382 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53383
53384 {&hf_ieee80211_tag_measure_report_lci_urp_retention_expires_relative,
53385 {"Retention Expires Relative", "wlan.measure.rep.lci.urp.retention_expires_relative",
53386 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
53387 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53388
53389 {&hf_ieee80211_tag_measure_report_lci_unknown,
53390 {"Unknown Data", "wlan.measure.rep.lci.unknown",
53391 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
53392 "(not interpreted)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53393
53394 {&hf_ieee80211_tag_measure_report_civic_location_type,
53395 {"Civic Location Type", "wlan.measure.rep.location_subject",
53396 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,
53397 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53398
53399 {&hf_ieee80211_tag_measure_report_civic_sub_id,
53400 {"SubElement ID", "wlan.measure.rep.civic.sub.id",
53401 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,
53402 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53403
53404 {&hf_ieee80211_tag_measure_report_location_civic_country,
53405 {"Country", "wlan.measure.rep.civic.sub.country",
53406 FT_STRING, BASE_NONE, NULL((void*)0), 0,
53407 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53408
53409 {&hf_ieee80211_tag_measure_report_location_civic_type,
53410 {"Type", "wlan.measure.rep.civic.sub.type",
53411 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53412 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53413
53414 {&hf_ieee80211_tag_measure_report_location_civic_length,
53415 {"Length", "wlan.measure.rep.civic.sub.length",
53416 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53417 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53418
53419 {&hf_ieee80211_tag_measure_report_location_civic,
53420 {"Location Civic", "wlan.measure.rep.civic.sub.location_civic",
53421 FT_STRING, BASE_NONE, NULL((void*)0), 0,
53422 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53423
53424 {&hf_ieee80211_tag_quiet_count,
53425 {"Count", "wlan.quiet.count",
53426 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53427 "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) }},
53428
53429 {&hf_ieee80211_tag_quiet_period,
53430 {"Period", "wlan.quiet.period",
53431 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53432 "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) }},
53433
53434 {&hf_ieee80211_tag_quiet_duration,
53435 {"Duration", "wlan.quiet.duration",
53436 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53437 "Set to the duration of the quiet interval", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53438
53439 {&hf_ieee80211_tag_quiet_offset,
53440 {"Offset", "wlan.quiet.offset",
53441 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
53442 "Set to the offset of the start of the quiet interval from the TBTT", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53443
53444 {&hf_ieee80211_tag_dfs_owner,
53445 {"Owner", "wlan.dfs.owner",
53446 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
53447 "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) }},
53448
53449 {&hf_ieee80211_tag_dfs_recovery_interval,
53450 {"Recovery Interval", "wlan.dfs.recovery_interval",
53451 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53452 "Indicates the time interval that shall be used for DFS owner recovery", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53453
53454 {&hf_ieee80211_tag_dfs_channel_map,
53455 {"Channel Map", "wlan.dfs.channel_map",
53456 FT_NONE, BASE_NONE, NULL((void*)0), 0,
53457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53458
53459 {&hf_ieee80211_tag_dfs_channel_number,
53460 {"Channel Number", "wlan.dfs.channel_number",
53461 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
53462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53463
53464 {&hf_ieee80211_tag_dfs_map,
53465 {"Map", "wlan.dfs.map",
53466 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53468
53469 {&hf_ieee80211_tag_erp_info,
53470 {"ERP Information", "wlan.erp_info",
53471 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53473
53474 {&hf_ieee80211_tag_erp_info_erp_present,
53475 {"Non ERP Present", "wlan.erp_info.erp_present",
53476 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x01,
53477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53478
53479 {&hf_ieee80211_tag_erp_info_use_protection,
53480 {"Use Protection", "wlan.erp_info.use_protection",
53481 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x02,
53482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53483
53484 {&hf_ieee80211_tag_erp_info_barker_preamble_mode,
53485 {"Barker Preamble Mode", "wlan.erp_info.barker_preamble_mode",
53486 FT_BOOLEAN, 8, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, 0x04,
53487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53488
53489 {&hf_ieee80211_tag_erp_info_reserved,
53490 {"Reserved", "wlan.erp_info.reserved",
53491 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8,
53492 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53493
53494 /* IEEE Std 802.11 2016 */
53495 /* Table 9-135-Extended Capabilities field */
53496 {&hf_ieee80211_tag_extended_capabilities,
53497 {"Extended Capabilities", "wlan.extcap",
53498 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
53499 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53500
53501 /* Extended Capability octet 1 */
53502 {&hf_ieee80211_tag_extended_capabilities_b0,
53503 {"20/40 BSS Coexistence Management Support", "wlan.extcap.b0",
53504 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53505 "HT Information Exchange Support", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53506
53507 {&hf_ieee80211_tag_extended_capabilities_b1,
53508 {"General Link (GLK)", "wlan.extcap.b1",
53509 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
53510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53511
53512 {&hf_ieee80211_tag_extended_capabilities_b2,
53513 {"Extended Channel Switching", "wlan.extcap.b2",
53514 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53516
53517 {&hf_ieee80211_tag_extended_capabilities_b3,
53518 {"GLK-GCR", "wlan.extcap.b3",
53519 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53521
53522 {&hf_ieee80211_tag_extended_capabilities_b4,
53523 {"PSMP Capability", "wlan.extcap.b4",
53524 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53526
53527 {&hf_ieee80211_tag_extended_capabilities_b5,
53528 {"Reserved", "wlan.extcap.b5",
53529 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20,
53530 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53531
53532 {&hf_ieee80211_tag_extended_capabilities_b6,
53533 {"S-PSMP Support", "wlan.extcap.b6",
53534 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53536
53537 {&hf_ieee80211_tag_extended_capabilities_b7,
53538 {"Event", "wlan.extcap.b7",
53539 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53541
53542
53543 /* Extended Capability octet 2 */
53544 {&hf_ieee80211_tag_extended_capabilities_b8,
53545 {"Diagnostics", "wlan.extcap.b8",
53546 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53548
53549 {&hf_ieee80211_tag_extended_capabilities_b9,
53550 {"Multicast Diagnostics", "wlan.extcap.b9",
53551 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53552 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53553
53554 {&hf_ieee80211_tag_extended_capabilities_b10,
53555 {"Location Tracking", "wlan.extcap.b10",
53556 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53557 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53558
53559 {&hf_ieee80211_tag_extended_capabilities_b11,
53560 {"FMS", "wlan.extcap.b11",
53561 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53562 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53563
53564 {&hf_ieee80211_tag_extended_capabilities_b12,
53565 {"Proxy ARP Service", "wlan.extcap.b12",
53566 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53567 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53568
53569 {&hf_ieee80211_tag_extended_capabilities_b13,
53570 {"Colocated Interference Reporting", "wlan.extcap.b13",
53571 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53573
53574 {&hf_ieee80211_tag_extended_capabilities_b14,
53575 {"Civic Location", "wlan.extcap.b14",
53576 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53578
53579 {&hf_ieee80211_tag_extended_capabilities_b15,
53580 {"Geospatial Location", "wlan.extcap.b15",
53581 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53583
53584
53585 /* Extended Capability octet 3 */
53586 {&hf_ieee80211_tag_extended_capabilities_b16,
53587 {"TFS", "wlan.extcap.b16",
53588 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53590
53591 {&hf_ieee80211_tag_extended_capabilities_b17,
53592 {"WNM Sleep Mode", "wlan.extcap.b17",
53593 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53595
53596 {&hf_ieee80211_tag_extended_capabilities_b18,
53597 {"TIM Broadcast", "wlan.extcap.b18",
53598 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53600
53601 {&hf_ieee80211_tag_extended_capabilities_b19,
53602 {"BSS Transition", "wlan.extcap.b19",
53603 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53605
53606 {&hf_ieee80211_tag_extended_capabilities_b20,
53607 {"QoS Traffic Capability", "wlan.extcap.b20",
53608 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53610
53611 {&hf_ieee80211_tag_extended_capabilities_b21,
53612 {"AC Station Count", "wlan.extcap.b21",
53613 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53615
53616 {&hf_ieee80211_tag_extended_capabilities_b22,
53617 {"Multiple BSSID", "wlan.extcap.b22",
53618 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53620
53621 {&hf_ieee80211_tag_extended_capabilities_b23,
53622 {"Timing Measurement", "wlan.extcap.b23",
53623 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53625
53626
53627 /* Extended Capability octet 4 */
53628 {&hf_ieee80211_tag_extended_capabilities_b24,
53629 {"Channel Usage", "wlan.extcap.b24",
53630 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53632
53633 {&hf_ieee80211_tag_extended_capabilities_b25,
53634 {"SSID List", "wlan.extcap.b25",
53635 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53637
53638 {&hf_ieee80211_tag_extended_capabilities_b26,
53639 {"DMS", "wlan.extcap.b26",
53640 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53642
53643 {&hf_ieee80211_tag_extended_capabilities_b27,
53644 {"UTC TSF Offset", "wlan.extcap.b27",
53645 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
53646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53647
53648 {&hf_ieee80211_tag_extended_capabilities_b28,
53649 {"TPU Buffer STA Support", "wlan.extcap.b28",
53650 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53651 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53652
53653 {&hf_ieee80211_tag_extended_capabilities_b29,
53654 {"TDLS Peer PSM Support", "wlan.extcap.b29",
53655 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53656 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53657
53658 {&hf_ieee80211_tag_extended_capabilities_b30,
53659 {"TDLS Channel Switching", "wlan.extcap.b30",
53660 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53661 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53662
53663 {&hf_ieee80211_tag_extended_capabilities_b31,
53664 {"Interworking", "wlan.extcap.b31",
53665 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53666 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53667
53668
53669 /* Extended Capability octet 5 */
53670 {&hf_ieee80211_tag_extended_capabilities_b32,
53671 {"QoS Map", "wlan.extcap.b32",
53672 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53673 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53674
53675 {&hf_ieee80211_tag_extended_capabilities_b33,
53676 {"EBR", "wlan.extcap.b33",
53677 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
53678 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53679
53680 {&hf_ieee80211_tag_extended_capabilities_b34,
53681 {"SSPN Interface", "wlan.extcap.b34",
53682 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
53683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53684
53685 {&hf_ieee80211_tag_extended_capabilities_b35,
53686 {"Reserved", "wlan.extcap.b35",
53687 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53688 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53689
53690 {&hf_ieee80211_tag_extended_capabilities_b36,
53691 {"MSGCF Capability", "wlan.extcap.b36",
53692 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53694
53695 {&hf_ieee80211_tag_extended_capabilities_b37,
53696 {"TDLS Support", "wlan.extcap.b37",
53697 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53699
53700 {&hf_ieee80211_tag_extended_capabilities_b38,
53701 {"TDLS Prohibited", "wlan.extcap.b38",
53702 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53704
53705 {&hf_ieee80211_tag_extended_capabilities_b39,
53706 {"TDLS Channel Switching Prohibited", "wlan.extcap.b39",
53707 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
53708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53709
53710 /* Extended Capability octet 6 */
53711 {&hf_ieee80211_tag_extended_capabilities_b40,
53712 {"Reject Unadmitted Frame", "wlan.extcap.b40",
53713 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53714 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53715
53716 {&hf_ieee80211_tag_extended_capabilities_serv_int_granularity,
53717 {"Service Interval Granularity",
53718 "wlan.extcap.serv_int_granularity",
53719 FT_UINT8, BASE_DEC, VALS(service_interval_granularity_vals)((0 ? (const struct _value_string*)0 : ((service_interval_granularity_vals
))))
, 0x0e,
53720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53721
53722 {&hf_ieee80211_tag_extended_capabilities_b44,
53723 {"Identifier Location", "wlan.extcap.b44",
53724 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
53725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53726
53727 {&hf_ieee80211_tag_extended_capabilities_b45,
53728 {"U-APSD Coexistence", "wlan.extcap.b45",
53729 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53731
53732 {&hf_ieee80211_tag_extended_capabilities_b46,
53733 {"WNM Notification", "wlan.extcap.b46",
53734 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53736
53737 {&hf_ieee80211_tag_extended_capabilities_b47,
53738 {"QAB Capability", "wlan.extcap.b47",
53739 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80,
53740 "AP supports QAB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53741
53742 /* Extended Capability octet 7 */
53743 {&hf_ieee80211_tag_extended_capabilities_b48,
53744 {"UTF-8 SSID", "wlan.extcap.b48",
53745 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
53746 "The SSID in this BSS is interpreted using UTF-8 encoding", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53747
53748 {&hf_ieee80211_tag_extended_capabilities_b49,
53749 {"QMF Activated", "wlan.extcap.b49",
53750 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53751 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53752
53753 {&hf_ieee80211_tag_extended_capabilities_b50,
53754 {"QMF Reconfiguration Activated", "wlan.extcap.b50",
53755 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53756 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53757
53758 {&hf_ieee80211_tag_extended_capabilities_b51,
53759 {"Robust AV Streaming", "wlan.extcap.b51",
53760 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
53761 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53762
53763 {&hf_ieee80211_tag_extended_capabilities_b52,
53764 {"Advanced GCR", "wlan.extcap.b52",
53765 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53766 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53767
53768 {&hf_ieee80211_tag_extended_capabilities_b53,
53769 {"Mesh GCR", "wlan.extcap.b53",
53770 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53771 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53772
53773 {&hf_ieee80211_tag_extended_capabilities_b54,
53774 {"SCS", "wlan.extcap.b54",
53775 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53776 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53777
53778 {&hf_ieee80211_tag_extended_capabilities_b55,
53779 {"QLoad Report", "wlan.extcap.b55",
53780 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53781 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53782
53783 /* Extended Capability octet 8 */
53784 {&hf_ieee80211_tag_extended_capabilities_b56,
53785 {"Alternate EDCA", "wlan.extcap.b56",
53786 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53787 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53788
53789 {&hf_ieee80211_tag_extended_capabilities_b57,
53790 {"Unprotected TXOP Negotiation", "wlan.extcap.b57",
53791 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53793
53794 {&hf_ieee80211_tag_extended_capabilities_b58,
53795 {"Protected TXOP Negotiation", "wlan.extcap.b58",
53796 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53798
53799 {&hf_ieee80211_tag_extended_capabilities_b59,
53800 {"Reserved", "wlan.extcap.b59",
53801 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53802 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53803
53804 {&hf_ieee80211_tag_extended_capabilities_b60,
53805 {"Protected QLoad Report", "wlan.extcap.b60",
53806 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53807 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53808
53809 {&hf_ieee80211_tag_extended_capabilities_b61,
53810 {"TDLS Wider Bandwidth", "wlan.extcap.b61",
53811 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
53812 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53813
53814 {&hf_ieee80211_tag_extended_capabilities_b62,
53815 {"Operating Mode Notification", "wlan.extcap.b62",
53816 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
53817 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53818
53819 {&hf_ieee80211_tag_extended_capabilities_b63,
53820 {"Max Number Of MSDUs In A-MSDU", "wlan.extcap.b63",
53821 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
53822 "Part 1 (bit63)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53823
53824 /* Extended Capability octets 8 & 9 */
53825 {&hf_ieee80211_tag_extended_capabilities_2,
53826 {"Extended Capabilities", "wlan.extcap",
53827 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
53828 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53829
53830 {&hf_ieee80211_tag_extended_capabilities_b56_2,
53831 {"Alternate EDCA", "wlan.extcap.b56",
53832 FT_BOOLEAN, 16, NULL((void*)0), 0x0001,
53833 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53834
53835 {&hf_ieee80211_tag_extended_capabilities_b57_2,
53836 {"Unprotected TXOP Negotiation", "wlan.extcap.b57",
53837 FT_BOOLEAN, 16, NULL((void*)0), 0x0002,
53838 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53839
53840 {&hf_ieee80211_tag_extended_capabilities_b58_2,
53841 {"Protected TXOP Negotiation", "wlan.extcap.b58",
53842 FT_BOOLEAN, 16, NULL((void*)0), 0x0004,
53843 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53844
53845 {&hf_ieee80211_tag_extended_capabilities_b59_2,
53846 {"Reserved", "wlan.extcap.b59",
53847 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008,
53848 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53849
53850 {&hf_ieee80211_tag_extended_capabilities_b60_2,
53851 {"Protected QLoad Report", "wlan.extcap.b60",
53852 FT_BOOLEAN, 16, NULL((void*)0), 0x0010,
53853 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53854
53855 {&hf_ieee80211_tag_extended_capabilities_b61_2,
53856 {"TDLS Wider Bandwidth", "wlan.extcap.b61",
53857 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0020,
53858 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53859
53860 {&hf_ieee80211_tag_extended_capabilities_b62_2,
53861 {"Operating Mode Notification", "wlan.extcap.b62",
53862 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040,
53863 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53864
53865 {&hf_ieee80211_tag_extended_capabilities_max_num_msdus,
53866 {"Max Number Of MSDUs In A-MSDU", "wlan.extcap.b63",
53867 FT_UINT16, BASE_DEC, VALS(vht_max_mpdu_in_amsdu)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_in_amsdu
))))
, 0x0180,
53868 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53869
53870 {&hf_ieee80211_tag_extended_capabilities_b65_2,
53871 {"Channel Schedule Management", "wlan.extcap.b65",
53872 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
53873 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53874
53875 {&hf_ieee80211_tag_extended_capabilities_b66_2,
53876 {"Geodatabase Inband Enabling Signal", "wlan.extcap.b66",
53877 FT_BOOLEAN, 16, NULL((void*)0), 0x0400,
53878 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53879
53880 {&hf_ieee80211_tag_extended_capabilities_b67_2,
53881 {"Network Channel Control", "wlan.extcap.b67",
53882 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
53883 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53884
53885 {&hf_ieee80211_tag_extended_capabilities_b68_2,
53886 {"White Space Map", "wlan.extcap.b68",
53887 FT_BOOLEAN, 16, NULL((void*)0), 0x1000,
53888 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53889
53890 {&hf_ieee80211_tag_extended_capabilities_b69_2,
53891 {"Channel Availability Query", "wlan.extcap.b69",
53892 FT_BOOLEAN, 16, NULL((void*)0), 0x2000,
53893 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53894
53895 {&hf_ieee80211_tag_extended_capabilities_b70_2,
53896 {"Fine Timing Measurement Responder", "wlan.extcap.b70",
53897 FT_BOOLEAN, 16, NULL((void*)0), 0x4000,
53898 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53899
53900 {&hf_ieee80211_tag_extended_capabilities_b71_2,
53901 {"Fine Timing Measurement Initiator", "wlan.extcap.b71",
53902 FT_BOOLEAN, 16, NULL((void*)0), 0x8000,
53903 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53904
53905 /* Extended Capability Octet 10 */
53906 {&hf_ieee80211_tag_extended_capabilities_b72,
53907 {"FILS Capability", "wlan.extcap.b72",
53908 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53910
53911 {&hf_ieee80211_tag_extended_capabilities_b73,
53912 {"Extended Spectrum Management Capable", "wlan.extcap.b73",
53913 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53915
53916 {&hf_ieee80211_tag_extended_capabilities_b74,
53917 {"Future Channel Guidance", "wlan.extcap.b74",
53918 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53920
53921 {&hf_ieee80211_tag_extended_capabilities_b75,
53922 {"Preassociation discovery (PAD)", "wlan.extcap.b75",
53923 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08,
53924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53925
53926 {&hf_ieee80211_tag_extended_capabilities_b76,
53927 {"Reserved", "wlan.extcap.b76",
53928 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10,
53929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53930
53931 {&hf_ieee80211_tag_extended_capabilities_b77,
53932 {"TWT Requester Support", "wlan.extcap.b77",
53933 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53935
53936 {&hf_ieee80211_tag_extended_capabilities_b78,
53937 {"TWT Responder Support", "wlan.extcap.b78",
53938 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53940
53941 {&hf_ieee80211_tag_extended_capabilities_b79,
53942 {"OBSS Narrow Bandwidth RU in OFDMA Tolerance Support", "wlan.extcap.b79",
53943 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53945
53946 {&hf_ieee80211_tag_extended_capabilities_b80,
53947 {"Complete List of NonTxBSSID Profiles", "wlan.extcap.b80",
53948 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53950
53951 {&hf_ieee80211_tag_extended_capabilities_b81,
53952 {"SAE Password Identifiers In Use", "wlan.extcap.b81",
53953 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
53954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53955
53956 {&hf_ieee80211_tag_extended_capabilities_b82,
53957 {"SAE Passwords Used Exclusively", "wlan.extcap.b82",
53958 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
53959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53960
53961 {&hf_ieee80211_tag_extended_capabilities_b83,
53962 {"Enhanced Multi-BSSID Advertisement Support", "wlan.extcap.b83",
53963 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
53964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53965
53966 {&hf_ieee80211_tag_extended_capabilities_b84,
53967 {"Beacon Protection Enabled", "wlan.extcap.b84",
53968 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
53969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53970
53971 {&hf_ieee80211_tag_extended_capabilities_b85,
53972 {"Mirrored SCS", "wlan.extcap.b85",
53973 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
53974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53975
53976 {&hf_ieee80211_tag_extended_capabilities_b86,
53977 {"OCT", "wlan.extcap.b86",
53978 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
53979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53980
53981 {&hf_ieee80211_tag_extended_capabilities_b87,
53982 {"Local MAC Address Policy", "wlan.extcap.b87",
53983 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
53984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53985
53986 {&hf_ieee80211_tag_extended_capabilities_b88,
53987 {"SAE-PK Passwords Used Exclusively", "wlan.extcap.b88",
53988 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
53989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53990
53991 {&hf_ieee80211_tag_extended_capabilities_b89,
53992 {"TWT Parameters Range Support", "wlan.extcap.b89",
53993 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53994
53995 {&hf_ieee80211_tag_extended_capabilities_b90,
53996 {"non-TB Ranging Responder", "wlan.extcap.b90",
53997 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
53998
53999 {&hf_ieee80211_tag_extended_capabilities_b91,
54000 {"TB Ranging Responder", "wlan.extcap.b91",
54001 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54002
54003 {&hf_ieee80211_tag_extended_capabilities_b92,
54004 {"TB Ranging Responder Measurement Support", "wlan.extcap.b92",
54005 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54006
54007 {&hf_ieee80211_tag_extended_capabilities_b93,
54008 {"TB Ranging Initiator Measurement Support", "wlan.extcap.b93",
54009 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54010
54011 {&hf_ieee80211_tag_extended_capabilities_b94,
54012 {"AOA Measurement Available", "wlan.extcap.b94",
54013 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54014
54015 {&hf_ieee80211_tag_extended_capabilities_b95,
54016 {"Phase Shift Feedback Support", "wlan.extcap.b95",
54017 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54018
54019 {&hf_ieee80211_tag_extended_capabilities_b96,
54020 {"DMG/location supporting APs in the area", "wlan.extcap.dmg_location",
54021 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54022
54023 {&hf_ieee80211_tag_extended_capabilities_b97,
54024 {"I2R LMR Feedback Policy", "wlan.extcap.i2r_lmr_feedback_policy",
54025 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54026
54027 {&hf_ieee80211_tag_extended_capabilities_b98,
54028 {"EBCS Support", "wlan.extcap.b98",
54029 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54030
54031 {&hf_ieee80211_tag_extended_capabilities_b99,
54032 {"EBCS Relaying Support", "wlan.extcap.b99",
54033 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54034
54035 {&hf_ieee80211_tag_extended_capabilities_b100,
54036 {"Peer-to-peer TWT Support", "wlan.extcap.b100",
54037 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54038
54039 {&hf_ieee80211_tag_extended_capabilities_b101,
54040 {"Multiple BSSID Role Switch Support", "wlan.extcap.b101",
54041 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54042
54043 {&hf_ieee80211_tag_extended_capabilities_b102,
54044 {"Known STA Identification Enabled", "wlan.extcap.b102",
54045 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54046
54047 {&hf_ieee80211_tag_extended_capabilities_b103,
54048 {"Reserved", "wlan.extcap.b103",
54049 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54050
54051 {&hf_ieee80211_tag_extended_capabilities_b104,
54052 {"Capability Notification Support", "wlan.extcap.b104",
54053 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54054
54055 {&hf_ieee80211_tag_extended_capabilities_b105,
54056 {"GAS Query Request Fragmentation", "wlan.extcap.b105",
54057 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54058
54059 {&hf_ieee80211_tag_extended_capabilities_reserved2,
54060 {"Reserved", "wlan.extcap.reserved2",
54061 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54062
54063 {&hf_ieee80211_tag_cisco_ccx1_unknown,
54064 {"Unknown", "wlan.cisco.ccx1.unknown",
54065 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54066 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54067
54068 {&hf_ieee80211_tag_cisco_ccx1_name,
54069 {"Name", "wlan.cisco.ccx1.name",
54070 FT_STRING, BASE_NONE, NULL((void*)0), 0,
54071 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54072
54073 {&hf_ieee80211_tag_cisco_ccx1_clients,
54074 {"Clients", "wlan.cisco.ccx1.clients",
54075 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54077
54078 {&hf_ieee80211_tag_cisco_ccx1_unknown2,
54079 {"Unknown2", "wlan.cisco.ccx1.unknown2",
54080 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54081 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54082
54083 {&hf_ieee80211_tag_neighbor_report_bssid,
54084 {"BSSID", "wlan.nreport.bssid",
54085 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54086 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54087
54088 {&hf_ieee80211_tag_neighbor_report_bssid_info,
54089 {"BSSID Information", "wlan.nreport.bssid.info",
54090 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
54091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54092
54093 {&hf_ieee80211_tag_neighbor_report_bssid_info_reachability,
54094 {"AP Reachability", "wlan.nreport.bssid.info.reachability",
54095 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,
54096 "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) }},
54097
54098 {&hf_ieee80211_tag_neighbor_report_bssid_info_security,
54099 {"Security", "wlan.nreport.bssid.info.security",
54100 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004,
54101 "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) }},
54102
54103 {&hf_ieee80211_tag_neighbor_report_bssid_info_key_scope,
54104 {"Key Scope", "wlan.nreport.bssid.info.keyscope",
54105 FT_BOOLEAN, 32, NULL((void*)0), 0x00000008,
54106 "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) }},
54107
54108 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability,
54109 {"Capability", "wlan.nreport.bssid.info.capability",
54110 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000003F0,
54111 "Contains selected capability information for the AP indicated by this BSSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54112
54113 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_spec_mng,
54114 {"Spectrum Management", "wlan.nreport.bssid.info.capability.specmngt",
54115 FT_BOOLEAN, 32, NULL((void*)0), 0x00000010,
54116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54117
54118 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_qos,
54119 {"QoS", "wlan.nreport.bssid.info.capability.qos",
54120 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
54121 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54122
54123 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_apsd,
54124 {"APSD", "wlan.nreport.bssid.info.capability.apsd",
54125 FT_BOOLEAN, 32, NULL((void*)0), 0x00000040,
54126 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54127
54128 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_radio_msnt,
54129 {"Radio Measurement", "wlan.nreport.bssid.info.capability.radiomsnt",
54130 FT_BOOLEAN, 32, NULL((void*)0), 0x00000080,
54131 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54132
54133 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b4,
54134 {"Reserved", "wlan.nreport.bssid.info.capability.reserved_b4",
54135 FT_BOOLEAN, 32, NULL((void*)0), 0x00000100,
54136 "Was Delayed Block Ack until 802.11-2016", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54137
54138 {&hf_ieee80211_tag_neighbor_report_bssid_info_capability_reserved_b5,
54139 {"Reserved", "wlan.nreport.bssid.info.capability.reserved_b5",
54140 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200,
54141 "Was Immediate Block Ack until 802.11-2016", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54142
54143 {&hf_ieee80211_tag_neighbor_report_bssid_info_mobility_domain,
54144 {"Mobility Domain", "wlan.nreport.bssid.info.mobilitydomain",
54145 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400,
54146 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54147
54148 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_throughput,
54149 {"High Throughput (HT AP)", "wlan.nreport.bssid.info.hthroughput",
54150 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800,
54151 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54152
54153 {&hf_ieee80211_tag_neighbor_report_bssid_info_very_high_throughput,
54154 {"Very High Throughput (VHT AP)", "wlan.nreport.bssid.info.vht",
54155 FT_BOOLEAN, 32, NULL((void*)0), 0x00001000,
54156 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54157
54158 {&hf_ieee80211_tag_neighbor_report_bssid_info_ftm,
54159 {"Fine Timing Measurement (FTM)", "wlan.nreport.bssid.info.ftm",
54160 FT_BOOLEAN, 32, NULL((void*)0), 0x00002000,
54161 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54162
54163 {&hf_ieee80211_tag_neighbor_report_bssid_info_high_efficiency,
54164 {"High Efficiency (HE AP)", "wlan.nreport.bssid.info.he",
54165 FT_BOOLEAN, 32, NULL((void*)0), 0x00004000,
54166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54167
54168 {&hf_ieee80211_tag_neighbor_report_bssid_info_er_bss,
54169 {"Extended Range BSS", "wlan.nreport.bssid.info.er_bss",
54170 FT_BOOLEAN, 32, NULL((void*)0), 0x00008000,
54171 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54172
54173 {&hf_ieee80211_tag_neighbor_report_bssid_info_colocated_ap,
54174 {"Co-Located AP", "wlan.nreport.bssid.info.colocated_ap",
54175 FT_BOOLEAN, 32, NULL((void*)0), 0x00010000,
54176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54177
54178 {&hf_ieee80211_tag_neighbor_report_bssid_info_unsolicited_probe_responses_active,
54179 {"Unsolicited Probe Responses Active", "wlan.nreport.bssid.info.unsolicited_probe_responses",
54180 FT_BOOLEAN, 32, NULL((void*)0), 0x00020000,
54181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54182
54183 {&hf_ieee80211_tag_neighbor_report_bssid_info_ess_with_colocated_ap,
54184 {"Members Of ESS With 2.4/5 GHz Co-Located AP", "wlan.nreport.bssid.info.member_of_ess_with_2p4_5_ghz_colocated_ap",
54185 FT_BOOLEAN, 32, NULL((void*)0), 0x00040000,
54186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54187
54188 {&hf_ieee80211_tag_neighbor_report_bssid_info_oct_supported_with_reporting_ap,
54189 {"OCT Supported With Reporting AP", "wlan.nreport.bssid.info.oct_supported_with_reporting_ap",
54190 FT_BOOLEAN, 32, NULL((void*)0), 0x00080000,
54191 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54192
54193 {&hf_ieee80211_tag_neighbor_report_bssid_info_colocated_6ghz_ap,
54194 {"Co-Located With 6 GHz AP", "wlan.nreport.bssid.info.colocated_6ghz_ap",
54195 FT_BOOLEAN, 32, NULL((void*)0), 0x00100000,
54196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54197
54198 {&hf_ieee80211_tag_neighbor_report_bssid_info_eht,
54199 {"Extremely High Throughput (EHT AP)", "wlan.nreport.bssid.info.eht",
54200 FT_BOOLEAN, 32, NULL((void*)0), 0x00200000,
54201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54202
54203 {&hf_ieee80211_tag_neighbor_report_bssid_info_dmg_positioning,
54204 {"DMG Positioning", "wlan.nreport.bssid.info.dmg_positioning",
54205 FT_BOOLEAN, 32, NULL((void*)0), 0x00400000,
54206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54207
54208 {&hf_ieee80211_tag_neighbor_report_bssid_info_reserved,
54209 {"Reserved", "wlan.nreport.bssid.info.reserved",
54210 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFF800000,
54211 "Must be zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54212
54213 {&hf_ieee80211_tag_neighbor_report_ope_class,
54214 {"Operating Class", "wlan.nreport.opeclass",
54215 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))), 0,
54216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54217
54218 {&hf_ieee80211_tag_neighbor_report_channel_number,
54219 {"Channel Number", "wlan.nreport.channumber",
54220 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54222
54223 {&hf_ieee80211_tag_neighbor_report_phy_type,
54224 {"PHY Type", "wlan.nreport.phytype",
54225 FT_UINT8, BASE_DEC, VALS(phy_type_vals)((0 ? (const struct _value_string*)0 : ((phy_type_vals)))), 0,
54226 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54227
54228 {&hf_ieee80211_tag_neighbor_report_subelement_id,
54229 {"ID", "wlan.nreport.subelem.id",
54230 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54231 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54232
54233 {&hf_ieee80211_tag_neighbor_report_subelement_length,
54234 {"Length", "wlan.nreport.subelem.len",
54235 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54236 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54237
54238 {&hf_ieee80211_tag_neighbor_report_subelement_data,
54239 {"Data", "wlan.nreport.subelem.data",
54240 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54241 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54242
54243 {&hf_ieee80211_tag_neighbor_report_subelement_bss_trn_can_pref,
54244 {"Preference", "wlan.nreport.subelem.bss_trn_can_pref",
54245 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54246 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54247
54248 {&hf_ieee80211_tag_neighbor_report_subelement_bss_ter_tsf,
54249 {"BSS Termination TSF", "wlan.nreport.subelem.bss_ter_tsf",
54250 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
54251 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54252
54253 {&hf_ieee80211_tag_neighbor_report_subelement_bss_dur,
54254 {"Duration", "wlan.nreport.subelem.bss_dur",
54255 FT_UINT16, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_minutes)((0 ? (const struct unit_name_string*)0 : ((&units_minutes
))))
, 0,
54256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54257
54258 {&hf_ieee80211_tag_neighbor_report_subelement_tsf_offset,
54259 {"TSF Offset", "wlan.nreport.subelem.tsf_offset",
54260 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54261 "TSF Offset in TU units", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
54262
54263 {&hf_ieee80211_tag_neighbor_report_subelement_beacon_interval,
54264 {"Beacon Interval", "wlan.nreport.subelem.beacon_interval",
54265 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54266 "Beacon Interval in TUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
54267
54268 {&hf_ieee80211_tag_neighbor_report_subelement_country_code,
54269 {"Country Code", "wlan.nreport.subelem.country_code",
54270 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
54271 "ISO 3166-1 Alpha-2 Country Code", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54272
54273 {&hf_ieee80211_tag_supported_ope_classes_current,
54274 {"Current Operating Class", "wlan.supopeclass.current",
54275 FT_UINT8, BASE_DEC | BASE_RANGE_STRING0x00000100, RVALS(oper_class_rvals)((0 ? (const struct _range_string*)0 : ((oper_class_rvals)))), 0,
54276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54277
54278 {&hf_ieee80211_tag_supported_ope_classes_alternate,
54279 {"Alternate Operating Classes", "wlan.supopeclass.alt",
54280 FT_NONE, BASE_NONE, NULL((void*)0), 0,
54281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54282
54283 {&hf_ieee80211_wfa_ie_type,
54284 {"Type", "wlan.wfa.ie.type",
54285 FT_UINT8, BASE_HEX, VALS(ieee802111_wfa_ie_type_vals)((0 ? (const struct _value_string*)0 : ((ieee802111_wfa_ie_type_vals
))))
, 0,
54286 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54287
54288 {&hf_ieee80211_wfa_ie_wpa_version,
54289 {"WPA Version", "wlan.wfa.ie.wpa.version",
54290 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54291 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54292
54293 {&hf_ieee80211_wfa_ie_wpa_mcs,
54294 {"Multicast Cipher Suite", "wlan.wfa.ie.wpa.mcs",
54295 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_mcs_base_custom)((const void *) (size_t) (wpa_mcs_base_custom)), 0,
54296 "Contains the cipher suite selector used by the BSS to protect broadcast/multicasttraffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54297
54298 {&hf_ieee80211_wfa_ie_wpa_mcs_oui,
54299 {"Multicast Cipher Suite OUI", "wlan.wfa.ie.wpa.mcs.oui",
54300 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
54301 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54302
54303 {&hf_ieee80211_wfa_ie_wpa_mcs_type,
54304 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
54305 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54306 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54307
54308 {&hf_ieee80211_wfa_ie_wpa_mcs_wfa_type,
54309 {"Multicast Cipher Suite type", "wlan.wfa.ie.wpa.mcs.type",
54310 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_cipher_vals
))))
, 0,
54311 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54312
54313 {&hf_ieee80211_wfa_ie_wpa_ucs_count,
54314 {"Unicast Cipher Suite Count", "wlan.wfa.ie.wpa.ucs.count",
54315 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54316 "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) }},
54317
54318 {&hf_ieee80211_wfa_ie_wpa_ucs_list,
54319 {"Unicast Cipher Suite List", "wlan.wfa.ie.wpa.ucs.list",
54320 FT_NONE, BASE_NONE, NULL((void*)0), 0,
54321 "Contains a series of cipher suite selectors that indicate the Unicast cipher suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54322
54323 {&hf_ieee80211_wfa_ie_wpa_ucs,
54324 {"Unicast Cipher Suite", "wlan.wfa.ie.wpa.ucs",
54325 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_ucs_base_custom)((const void *) (size_t) (wpa_ucs_base_custom)), 0,
54326 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54327
54328 {&hf_ieee80211_wfa_ie_wpa_ucs_oui,
54329 {"Unicast Cipher Suite OUI", "wlan.wfa.ie.wpa.ucs.oui",
54330 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
54331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54332
54333 {&hf_ieee80211_wfa_ie_wpa_ucs_type,
54334 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
54335 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54336 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54337
54338 {&hf_ieee80211_wfa_ie_wpa_ucs_wfa_type,
54339 {"Unicast Cipher Suite type", "wlan.wfa.ie.wpa.ucs.type",
54340 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_cipher_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_cipher_vals
))))
, 0,
54341 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54342
54343 {&hf_ieee80211_wfa_ie_wpa_akms_count,
54344 {"Auth Key Management (AKM) Suite Count", "wlan.wfa.ie.wpa.akms.count",
54345 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54346 "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) }},
54347
54348 {&hf_ieee80211_wfa_ie_wpa_akms_list,
54349 {"Auth Key Management (AKM) List", "wlan.wfa.ie.wpa.akms.list",
54350 FT_NONE, BASE_NONE, NULL((void*)0), 0,
54351 "Contains a series of cipher suite selectors that indicate the AKM suites", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54352
54353 {&hf_ieee80211_wfa_ie_wpa_akms,
54354 {"Auth Key Management (AKM) Suite", "wlan.wfa.ie.wpa.akms",
54355 FT_UINT32, BASE_CUSTOM, CF_FUNC(wpa_akms_base_custom)((const void *) (size_t) (wpa_akms_base_custom)), 0,
54356 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54357
54358 {&hf_ieee80211_wfa_ie_wpa_akms_oui,
54359 {"Auth Key Management (AKM) OUI", "wlan.wfa.ie.wpa.akms.oui",
54360 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
54361 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54362
54363 {&hf_ieee80211_wfa_ie_wpa_akms_type,
54364 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.akms.type",
54365 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54366 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54367
54368 {&hf_ieee80211_wfa_ie_wpa_akms_wfa_type,
54369 {"Auth Key Management (AKM) type", "wlan.wfa.ie.wpa.akms.type",
54370 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wpa_keymgmt_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wpa_keymgmt_vals
))))
, 0,
54371 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54372
54373 {&hf_ieee80211_wfa_ie_wme_subtype,
54374 {"WME Subtype", "wlan.wfa.ie.wme.subtype",
54375 FT_UINT8, BASE_DEC, VALS(ieee802111_wfa_ie_wme_type)((0 ? (const struct _value_string*)0 : ((ieee802111_wfa_ie_wme_type
))))
, 0,
54376 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54377
54378 {&hf_ieee80211_wfa_ie_wme_version,
54379 {"WME Version", "wlan.wfa.ie.wme.version",
54380 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54381 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54382
54383 {&hf_ieee80211_wfa_ie_wme_qos_info,
54384 {"WME QoS Info", "wlan.wfa.ie.wme.qos_info",
54385 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54386 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54387
54388 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_max_sp_length,
54389 {"Max SP Length", "wlan.wfa.ie.wme.qos_info.sta.max_sp_length",
54390 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,
54391 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54392
54393 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_be,
54394 {"AC_BE", "wlan.wfa.ie.wme.qos_info.sta.ac_be",
54395 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,
54396 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54397
54398 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_bk,
54399 {"AC_BK", "wlan.wfa.ie.wme.qos_info.sta.ac_bk",
54400 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,
54401 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54402
54403 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vi,
54404 {"AC_VI", "wlan.wfa.ie.wme.qos_info.sta.ac_vi",
54405 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,
54406 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54407
54408 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_ac_vo,
54409 {"AC_VO", "wlan.wfa.ie.wme.qos_info.sta.ac_vo",
54410 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,
54411 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54412
54413 {&hf_ieee80211_wfa_ie_wme_qos_info_sta_reserved,
54414 {"Reserved", "wlan.wfa.ie.wme.qos_info.sta.reserved",
54415 FT_UINT8, BASE_HEX, NULL((void*)0), 0x90,
54416 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54417
54418 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_u_apsd,
54419 {"U-APSD", "wlan.wfa.ie.wme.qos_info.ap.u_apsd",
54420 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x80,
54421 "Indicates the WMM AP is currently supporting unscheduled automatic power save delivery", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54422
54423 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_parameter_set_count,
54424 {"Parameter Set Count", "wlan.wfa.ie.wme.qos_info.ap.parameter_set_count",
54425 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F,
54426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54427
54428 {&hf_ieee80211_wfa_ie_wme_qos_info_ap_reserved,
54429 {"Reserved", "wlan.wfa.ie.wme.qos_info.ap.reserved",
54430 FT_UINT8, BASE_HEX, NULL((void*)0), 0x70,
54431 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54432
54433 {&hf_ieee80211_wfa_ie_wme_reserved,
54434 {"Reserved", "wlan.wfa.ie.wme.reserved",
54435 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54436 "Must Be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54437
54438 {&hf_ieee80211_wfa_ie_wme_ac_parameters,
54439 {"Ac Parameters", "wlan.wfa.ie.wme.acp",
54440 FT_NONE, BASE_NONE, NULL((void*)0), 0,
54441 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54442
54443 {&hf_ieee80211_wfa_ie_wme_acp_aci_aifsn,
54444 {"ACI / AIFSN Field", "wlan.wfa.ie.wme.acp.aci_aifsn",
54445 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54447
54448 {&hf_ieee80211_wfa_ie_wme_acp_aci_be,
54449 {"ACI", "wlan.wfa.ie.wme.acp.aci_be",
54450 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54451 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54452
54453 {&hf_ieee80211_wfa_ie_wme_acp_aci_bk,
54454 {"ACI", "wlan.wfa.ie.wme.acp.aci_bk",
54455 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54456 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54457
54458 {&hf_ieee80211_wfa_ie_wme_acp_aci_vi,
54459 {"ACI", "wlan.wfa.ie.wme.acp.aci_vi",
54460 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54461 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54462
54463 {&hf_ieee80211_wfa_ie_wme_acp_aci_vo,
54464 {"ACI", "wlan.wfa.ie.wme.acp.aci_vo",
54465 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
54466 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54467
54468 {&hf_ieee80211_wfa_ie_wme_acp_acm_be,
54469 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_be",
54470 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54471 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54472
54473 {&hf_ieee80211_wfa_ie_wme_acp_acm_bk,
54474 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_bk",
54475 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54476 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54477
54478 {&hf_ieee80211_wfa_ie_wme_acp_acm_vi,
54479 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_vi",
54480 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54481 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54482
54483 {&hf_ieee80211_wfa_ie_wme_acp_acm_vo,
54484 {"Admission Control Mandatory", "wlan.wfa.ie.wme.acp.acm_vo",
54485 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
54486 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54487
54488 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_be,
54489 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_be",
54490 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54491 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54492
54493 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_bk,
54494 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_bk",
54495 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54496 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54497
54498 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_vi,
54499 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_vi",
54500 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54501 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54502
54503 {&hf_ieee80211_wfa_ie_wme_acp_aifsn_vo,
54504 {"AIFSN", "wlan.wfa.ie.wme.acp.aifsn_vo",
54505 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54506 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54507
54508 {&hf_ieee80211_wfa_ie_wme_acp_reserved_be,
54509 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_be",
54510 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54511 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54512
54513 {&hf_ieee80211_wfa_ie_wme_acp_reserved_bk,
54514 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_bk",
54515 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54516 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54517
54518 {&hf_ieee80211_wfa_ie_wme_acp_reserved_vi,
54519 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_vi",
54520 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54521 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54522
54523 {&hf_ieee80211_wfa_ie_wme_acp_reserved_vo,
54524 {"Reserved", "wlan.wfa.ie.wme.acp.reserved_vo",
54525 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
54526 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54527
54528 {&hf_ieee80211_wfa_ie_wme_acp_ecw,
54529 {"ECW", "wlan.wfa.ie.wme.acp.ecw",
54530 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00,
54531 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54532
54533 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_be,
54534 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_be",
54535 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54537
54538 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_bk,
54539 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_bk",
54540 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54542
54543 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_vo,
54544 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_vo",
54545 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54546 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54547
54548 {&hf_ieee80211_wfa_ie_wme_acp_ecw_max_vi,
54549 {"ECW Max", "wlan.wfa.ie.wme.acp.ecw.max_vi",
54550 FT_UINT8, BASE_DEC, NULL((void*)0), 0xF0,
54551 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54552
54553 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_be,
54554 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_be",
54555 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54556 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54557
54558 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_bk,
54559 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_bk",
54560 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54561 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54562
54563 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_vo,
54564 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_vo",
54565 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54566 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54567
54568 {&hf_ieee80211_wfa_ie_wme_acp_ecw_min_vi,
54569 {"ECW Min", "wlan.wfa.ie.wme.acp.ecw.min_vi",
54570 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
54571 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54572
54573 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_be,
54574 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_be",
54575 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54577
54578 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_bk,
54579 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_bk",
54580 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54582
54583 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_vo,
54584 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_vo",
54585 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54587
54588 {&hf_ieee80211_wfa_ie_wme_acp_txop_limit_vi,
54589 {"TXOP Limit", "wlan.wfa.ie.wme.acp.txop_limit_vi",
54590 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00,
54591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54592
54593 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo,
54594 {"TS Info", "wlan.wfa.ie.wme.tspec.ts_info",
54595 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
54596 "Traffic Stream (TS) Info", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54597
54598 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_tid,
54599 {"TID", "wlan.wfa.ie.wme.tspec.ts_info.tid",
54600 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00001E,
54601 "Traffic Stream Info ID (TID)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54602
54603 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_direction,
54604 {"Direction", "wlan.wfa.ie.wme.tspec.ts_info.dir",
54605 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,
54606 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54607
54608 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_psb,
54609 {"PSB", "wlan.wfa.ie.wme.tspec.ts_info.psb",
54610 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,
54611 "Traffic Stream (TS) Info Power Save Behavior (PSB)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54612
54613 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_up,
54614 {"UP", "wlan.wfa.ie.wme.tspec.ts_info.up",
54615 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,
54616 "Traffic Stream (TS) Info User Priority (UP)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54617
54618 {&hf_ieee80211_wfa_ie_wme_tspec_tsinfo_reserved,
54619 {"Reserved", "wlan.wfa.ie.wme.tspec.ts_info.reserved",
54620 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFFC381,
54621 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54622
54623 {&hf_ieee80211_wfa_ie_wme_tspec_nor_msdu,
54624 {"Normal MSDU Size", "wlan.wfa.ie.wme.tspec.nor_msdu",
54625 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54626 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54627
54628 {&hf_ieee80211_wfa_ie_wme_tspec_max_msdu,
54629 {"Maximum MSDU Size", "wlan.wfa.ie.wme.tspec.max_msdu",
54630 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54632
54633 {&hf_ieee80211_wfa_ie_wme_tspec_min_srv,
54634 {"Minimum Service Interval", "wlan.wfa.ie.wme.tspec.min_srv",
54635 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54637
54638 {&hf_ieee80211_wfa_ie_wme_tspec_max_srv,
54639 {"Maximum Service Interval", "wlan.wfa.ie.wme.tspec.max_srv",
54640 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54642
54643 {&hf_ieee80211_wfa_ie_wme_tspec_inact_int,
54644 {"Inactivity Interval", "wlan.wfa.ie.wme.tspec.inact_int",
54645 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54647
54648 {&hf_ieee80211_wfa_ie_wme_tspec_susp_int,
54649 {"Suspension Interval", "wlan.wfa.ie.wme.tspec.susp_int",
54650 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54651 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54652
54653 {&hf_ieee80211_wfa_ie_wme_tspec_srv_start,
54654 {"Service Start Time", "wlan.wfa.ie.wme.tspec.srv_start",
54655 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54656 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54657
54658 {&hf_ieee80211_wfa_ie_wme_tspec_min_data,
54659 {"Minimum Data Rate", "wlan.wfa.ie.wme.tspec.min_data",
54660 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54661 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54662
54663 {&hf_ieee80211_wfa_ie_wme_tspec_mean_data,
54664 {"Mean Data Rate", "wlan.wfa.ie.wme.tspec.mean_data",
54665 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54666 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54667
54668 {&hf_ieee80211_wfa_ie_wme_tspec_peak_data,
54669 {"Peak Data Rate", "wlan.wfa.ie.wme.tspec.peak_data",
54670 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54671 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54672
54673 {&hf_ieee80211_wfa_ie_wme_tspec_burst_size,
54674 {"Burst Size", "wlan.wfa.ie.wme.tspec.burst_size",
54675 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54676 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54677
54678 {&hf_ieee80211_wfa_ie_wme_tspec_delay_bound,
54679 {"Delay Bound", "wlan.wfa.ie.wme.tspec.delay_bound",
54680 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54681 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54682
54683 {&hf_ieee80211_wfa_ie_wme_tspec_min_phy,
54684 {"Minimum PHY Rate", "wlan.wfa.ie.wme.tspec.min_phy",
54685 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
54686 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54687
54688 {&hf_ieee80211_wfa_ie_wme_tspec_surplus,
54689 {"Surplus Bandwidth Allowance", "wlan.wfa.ie.wme.tspec.surplus",
54690 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54691 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54692
54693 {&hf_ieee80211_wfa_ie_wme_tspec_medium,
54694 {"Medium Time", "wlan.wfa.ie.wme.tspec.medium",
54695 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54696 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54697
54698 {&hf_ieee80211_wfa_ie_nc_cost_level,
54699 {"Cost Level", "wlan.wfa.ie.nc.cost_level",
54700 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,
54701 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54702
54703 {&hf_ieee80211_wfa_ie_nc_reserved,
54704 {"Reserved", "wlan.wfa.ie.nc.reserved",
54705 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
54706 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54707
54708 {&hf_ieee80211_wfa_ie_nc_cost_flags,
54709 {"Cost Flags", "wlan.wfa.ie.nc.cost_flags",
54710 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,
54711 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54712
54713 {&hf_ieee80211_wfa_ie_tethering_type,
54714 {"Type", "wlan.wfa.ie.tethering.type",
54715 FT_UINT16, BASE_DEC, VALS(ieee80211_wfa_ie_tethering_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_tethering_type_vals
))))
, 0,
54716 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54717
54718 {&hf_ieee80211_wfa_ie_tethering_mac_length,
54719 {"MAC Length", "wlan.wfa.ie.tethering.mac_length",
54720 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54721 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54722
54723 {&hf_ieee80211_wfa_ie_tethering_mac,
54724 {"MAC Address", "wlan.wfa.ie.tethering.mac",
54725 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54726 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54727
54728 {&hf_ieee80211_wfa_ie_owe_bssid,
54729 {"BSSID", "wlan.wfa.ie.owe.bssid",
54730 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
54731 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54732
54733 {&hf_ieee80211_wfa_ie_owe_ssid_length,
54734 {"SSID length", "wlan.wfa.ie.owe.ssid_length",
54735 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54736 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54737
54738 {&hf_ieee80211_wfa_ie_owe_ssid,
54739 {"SSID", "wlan.wfa.ie.owe.ssid",
54740 FT_STRING, BASE_NONE, NULL((void*)0), 0,
54741 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54742
54743 {&hf_ieee80211_wfa_ie_owe_band_info,
54744 {"Band info", "wlan.wfa.ie.owe.band_info",
54745 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54746 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54747
54748 {&hf_ieee80211_wfa_ie_owe_channel_info,
54749 {"Channel info", "wlan.wfa.ie.owe.channel_info",
54750 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
54751 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54752
54753 {&hf_ieee80211_wfa_ie_mbo_oce_attr,
54754 {"MBO/OCE attribute", "wlan.wfa.ie.mbo_oce.attr",
54755 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54756
54757 {&hf_ieee80211_wfa_ie_mbo_oce_attr_id,
54758 {"ID", "wlan.wfa.ie.mbo_oce.attr_id",
54759 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) }},
54760
54761 {&hf_ieee80211_wfa_ie_mbo_oce_attr_len,
54762 {"Length", "wlan.wfa.ie.mbo_oce.attr_len",
54763 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54764
54765 {&hf_ieee80211_wfa_ie_mbo_ap_cap,
54766 {"MBO Capability Indication", "wlan.wfa.ie.mbo_oce.ap_cap",
54767 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54768
54769 {&hf_ieee80211_wfa_ie_mbo_ap_cap_cell,
54770 {"AP is cellular data aware", "wlan.wfa.ie.mbo.ap_cap.cell",
54771 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) }},
54772
54773 {&hf_ieee80211_wfa_ie_mbo_ap_cap_reserved,
54774 {"Reserved", "wlan.wfa.ie.mbo.ap_cap.reserved",
54775 FT_UINT8, BASE_HEX, NULL((void*)0), 0xBF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54776
54777 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_op_class,
54778 {"Operating Class", "wlan.wfa.ie.mbo.non_pref_chan.op_class",
54779 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54780
54781 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_chan,
54782 {"Channel", "wlan.wfa.ie.mbo.non_pref_chan.chan",
54783 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54784
54785 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_pref,
54786 {"Preference", "wlan.wfa.ie.mbo.non_pref_chan.pref",
54787 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) }},
54788
54789 {&hf_ieee80211_wfa_ie_mbo_non_pref_chan_reason,
54790 {"Reason Code", "wlan.wfa.ie.mbo.non_pref_chan.reason",
54791 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) }},
54792
54793 {&hf_ieee80211_wfa_ie_mbo_cellular_cap,
54794 {"Cellular Data Connectivity", "wlan.wfa.ie.mbo.cellular_cap",
54795 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) }},
54796
54797 {&hf_ieee80211_wfa_ie_mbo_assoc_disallow_reason,
54798 {"Reason Code", "wlan.wfa.ie.mbo.assoc_disallow.reason",
54799 FT_UINT8, BASE_DEC, VALS(wfa_mbo_assoc_disallow_reason_vals)((0 ? (const struct _value_string*)0 : ((wfa_mbo_assoc_disallow_reason_vals
))))
,
54800 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54801
54802 {&hf_ieee80211_wfa_ie_mbo_cellular_pref,
54803 {"Cellular Data Preference", "wlan.wfa.ie.mbo.cellular_pref",
54804 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) }},
54805
54806 {&hf_ieee80211_wfa_ie_mbo_transition_reason,
54807 {"Transition Reason Code", "wlan.wfa.ie.mbo.transition.reason",
54808 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) }},
54809
54810 {&hf_ieee80211_wfa_ie_mbo_transition_rej_reason,
54811 {"Transition Rejection Reason Code", "wlan.wfa.ie.mbo.transition_rej.reason",
54812 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) }},
54813
54814 {&hf_ieee80211_wfa_ie_mbo_assoc_retry_delay,
54815 {"Re-association Delay", "wlan.wfa.ie.mbo.assoc_retry.delay",
54816 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) }},
54817
54818 {&hf_ieee80211_wfa_ie_oce_cap_ctrl,
54819 {"OCE Control", "wlan.wfa.ie.oce.cap.ctrl",
54820 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54821
54822 {&hf_ieee80211_wfa_ie_oce_cap_release,
54823 {"OCE Release", "wlan.wfa.ie.oce.cap.release",
54824 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54825
54826 {&hf_ieee80211_wfa_ie_oce_cap_sta_cfon,
54827 {"is STA CFON", "wlan.wfa.ie.oce.cap.sta_cfon",
54828 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) }},
54829
54830 {&hf_ieee80211_wfa_ie_oce_cap_11b_only_ap,
54831 {"11b only AP present on operating channel", "wlan.wfa.ie.oce.cap.11b_only_ap",
54832 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) }},
54833
54834 {&hf_ieee80211_wfa_ie_oce_cap_hlp,
54835 {"FILS Higher Layer Setup with Higher Layer Protocol Encapsulation enabled",
54836 "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) }},
54837
54838 {&hf_ieee80211_wfa_ie_oce_cap_non_oce_ap,
54839 {"non OCE AP present on operating channel", "wlan.wfa.ie.oce.cap.non_oce_ap",
54840 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) }},
54841
54842 {&hf_ieee80211_wfa_ie_oce_cap_reserved,
54843 {"Reserved", "wlan.wfa.ie.oce.cap.reserved",
54844 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54845
54846 {&hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delta,
54847 {"Delta RSSI", "wlan.wfa.ie.oce.rssi_assoc_rej.delta",
54848 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) }},
54849
54850 {&hf_ieee80211_wfa_ie_oce_rssi_assoc_rej_delay,
54851 {"Retry Delay", "wlan.wfa.ie.oce.rssi_assoc_rej.delay",
54852 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) }},
54853
54854 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap,
54855 {"Available Capacity", "wlan.wfa.ie.oce.wan_metrics.avail_cap",
54856 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54857
54858 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_downlink,
54859 {"Downlink", "wlan.wfa.ie.oce.wan_metrics.avail_cap_downlink",
54860 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54861
54862 {&hf_ieee80211_wfa_ie_oce_wan_metrics_avail_cap_uplink,
54863 {"Uplink", "wlan.wfa.ie.oce.wan_metrics.avail_cap_uplink",
54864 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54865
54866 {&hf_ieee80211_wfa_ie_oce_rnr_completeness_short_ssid,
54867 {"Short SSID", "wlan.wfa.ie.oce.rnr_completeness.short_ssid",
54868 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54869
54870 {&hf_ieee80211_wfa_ie_oce_probe_suppr_bssid,
54871 {"BSSID", "wlan.wfa.ie.oce.probe_suppr.bssid",
54872 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54873
54874 {&hf_ieee80211_wfa_ie_oce_probe_suppr_ssid,
54875 {"SSID", "wlan.wfa.ie.oce.probe_suppr.ssid",
54876 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54877
54878 {&hf_ieee80211_wfa_anqp_mbo_subtype,
54879 {"Subtype", "wlan.wfa.anqp.mbo.subtype",
54880 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) }},
54881
54882 {&hf_ieee80211_wfa_anqp_mbo_query,
54883 {"Query Subtype", "wlan.wfa.anqp.mbo.query",
54884 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) }},
54885
54886 {&hf_ieee80211_wfa_anqp_mbo_cellular_pref,
54887 {"Cellular Data Preference", "wlan.wfa.anqp.mbo.cellular_pref",
54888 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) }},
54889
54890 {&hf_ieee80211_rsn_ie_ptk_keyid,
54891 {"KeyID", "wlan.rsn.ie.ptk.keyid",
54892 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03,
54893 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54894
54895 {&hf_ieee80211_rsn_ie_pmkid,
54896 {"PMKID", "wlan.rsn.ie.pmkid",
54897 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54898 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54899
54900 {&hf_ieee80211_rsn_ie_gtk_kde_data_type,
54901 {"Data Type", "wlan.rsn.ie.data_type",
54902 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(kde_selectors_rvals)((0 ? (const struct _range_string*)0 : ((kde_selectors_rvals)
)))
,
54903 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54904
54905 {&hf_ieee80211_rsn_ie_gtk_kde_key_id,
54906 {"Key ID", "wlan.rsn.ie.gtk_kde.key_id",
54907 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54908
54909 {&hf_ieee80211_rsn_ie_gtk_kde_tx,
54910 {"Tx", "wlan.rsn.ie.gtk_kde.tx",
54911 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) }},
54912
54913 {&hf_ieee80211_rsn_ie_gtk_kde_reserved1,
54914 {"Reserved", "wlan.rsn.ie.gtk_kde.res1",
54915 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54916
54917 {&hf_ieee80211_rsn_ie_gtk_kde_reserved2,
54918 {"Reserved", "wlan.rsn.ie.gtk_kde.res2",
54919 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54920
54921 {&hf_ieee80211_rsn_ie_gtk_kde_gtk,
54922 {"GTK", "wlan.rsn.ie.gtk_kde.gtk",
54923 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54924
54925 {&hf_ieee80211_rsn_ie_mac_address_kde_mac,
54926 {"MAC Address", "wlan.rsn.ie.mac_address_kde.mac_address",
54927 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54928
54929 {&hf_ieee80211_rsn_ie_gtk_kde_nonce,
54930 {"Key Nonce", "wlan.rsn.ie.key_nonce_kde.nonce",
54931 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54932
54933 {&hf_ieee80211_rsn_ie_gtk_kde_lifetime,
54934 {"Key Lifetime", "wlan.rsn.ie.key_lifetime_kde.lifetime",
54935 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) }},
54936
54937 {&hf_ieee80211_rsn_ie_error_kde_res,
54938 {"Reserved", "wlan.rsn.ie.error_kde.reserved",
54939 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54940
54941 {&hf_ieee80211_rsn_ie_error_kde_error_type,
54942 {"Error Type", "wlan.rsn.ie.error_kde.error_type",
54943 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54944
54945 {&hf_ieee80211_rsn_ie_igtk_kde_keyid,
54946 {"KeyId", "wlan.rsn.ie.igtk.kde.keyid",
54947 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
54948 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54949
54950 {&hf_ieee80211_rsn_ie_igtk_kde_ipn,
54951 {"IPN", "wlan.rsn.ie.igtk.kde.ipn",
54952 FT_UINT48, BASE_DEC, NULL((void*)0), 0,
54953 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54954
54955 {&hf_ieee80211_rsn_ie_igtk_kde_igtk,
54956 {"IGTK", "wlan.rsn.ie.igtk.kde.igtk",
54957 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
54958 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54959
54960 {&hf_ieee80211_rsn_ie_oci_operating_class,
54961 {"Operating Class", "wlan.rsn.ie.oci_kde.operating_class",
54962 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54963
54964 {&hf_ieee80211_rsn_ie_oci_primary_channel_number,
54965 {"Primary Channel Number", "wlan.rsn.ie.oci_kde.primary_channel_number",
54966 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54967
54968 {&hf_ieee80211_rsn_ie_oci_frequency_segment_1,
54969 {"Frequency Segment 1 Channel Number",
54970 "wlan.rsn.ie.oci_kde.frequency_segment_1_channel_number",
54971 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54972
54973 {&hf_ieee80211_rsn_ie_bigtk_key_id,
54974 {"Key ID", "wlan.rsn.ie.bigtk_kde.key_id",
54975 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54976
54977 {&hf_ieee80211_rsn_ie_bigtk_bipn,
54978 {"BIPN", "wlan.rsn.ie.bigtk_kde.bipn",
54979 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54980
54981 {&hf_ieee80211_rsn_ie_bigtk_bigtk,
54982 {"BIGTK", "wlan.rsn.ie.bigtk_kde.bigtk",
54983 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54984
54985 {&hf_ieee80211_rsn_ie_mlo_link_info,
54986 {"Link Information", "wlan.rsn.ie.mlo_link.link_info",
54987 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54988
54989 {&hf_ieee80211_rsn_ie_mlo_linkid,
54990 {"LinkID", "wlan.rsn.ie.mlo_link.link_info.linkid",
54991 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54992
54993 {&hf_ieee80211_rsn_ie_mlo_rnse_present,
54994 {"RSNEInfo", "wlan.rsn.ie.mlo_link.link_info.rsneinfo",
54995 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
54996
54997 {&hf_ieee80211_rsn_ie_mlo_rnsxe_present,
54998 {"RSNXEInfo", "wlan.rsn.ie.mlo_link.link_info.rsnxeinfo",
54999 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55000
55001 {&hf_ieee80211_rsn_ie_mlo_reserved,
55002 {"Reserved", "wlan.rsn.ie.mlo_link.link_info.reserved",
55003 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55004
55005 {&hf_ieee80211_rsn_ie_mlo_mac_addr,
55006 {"MAC Address", "wlan.rsn.ie.mlo_link.mac_addr",
55007 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55008
55009 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_key_id,
55010 {"Key ID", "wlan.rsn.ie.mlo_gtk.key_id",
55011 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55012
55013 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_tx,
55014 {"Tx", "wlan.rsn.ie.mlo_gtk.tx",
55015 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55016
55017 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_reserved,
55018 {"Reserved", "wlan.rsn.ie.mlo_gtk.reserved",
55019 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55020
55021 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_linkid,
55022 {"LinkID", "wlan.rsn.ie.mlo_gtk.linkid",
55023 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55024
55025 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_pn,
55026 {"PN", "wlan.rsn.ie.mlo_gtk.pn",
55027 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55028
55029 {&hf_ieee80211_rsn_ie_mlo_gtk_kde_gtk,
55030 {"GTK", "wlan.rsn.ie.mlo_gtk.gtk",
55031 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55032
55033 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_key_id,
55034 {"Key ID", "wlan.rsn.ie.mlo_igtk.key_id",
55035 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55036
55037 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_ipn,
55038 {"IPN", "wlan.rsn.ie.mlo_igtk.ipn",
55039 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55040
55041 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_reserved,
55042 {"Reserved", "wlan.rsn.ie.mlo_igtk.reserved",
55043 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55044
55045 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_linkid,
55046 {"LinkID", "wlan.rsn.ie.mlo_igtk.linkid",
55047 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55048
55049 {&hf_ieee80211_rsn_ie_mlo_igtk_kde_igtk,
55050 {"IGTK", "wlan.rsn.ie.mlo_igtk.igtk",
55051 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55052
55053 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_key_id,
55054 {"Key ID", "wlan.rsn.ie.mlo_bigtk.key_id",
55055 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55056
55057 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_ipn,
55058 {"IPN", "wlan.rsn.ie.mlo_bigtk.ipn",
55059 FT_UINT48, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55060
55061 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_reserved,
55062 {"Reserved", "wlan.rsn.ie.mlo_bigtk.reserved",
55063 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55064
55065 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_linkid,
55066 {"LinkID", "wlan.rsn.ie.mlo_bigtk.linkid",
55067 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55068
55069 {&hf_ieee80211_rsn_ie_mlo_bigtk_kde_bigtk,
55070 {"BIGTK", "wlan.rsn.ie.mlo_bigtk.bigtk",
55071 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55072
55073 {&hf_ieee80211_rsn_ie_unknown,
55074 {"RSN Unknown", "wlan.rsn.ie.unknown",
55075 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55077
55078 {&hf_ieee80211_marvell_ie_type,
55079 {"Type", "wlan.marvell.ie.type",
55080 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55081 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55082
55083 {&hf_ieee80211_marvell_ie_mesh_subtype,
55084 {"Subtype", "wlan.marvell.ie.subtype",
55085 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55086 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55087
55088 {&hf_ieee80211_marvell_ie_mesh_version,
55089 {"Version", "wlan.marvell.ie.version",
55090 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55092
55093 {&hf_ieee80211_marvell_ie_mesh_active_proto_id,
55094 {"Path Selection Protocol", "wlan.marvell.ie.proto_id",
55095 FT_UINT8, BASE_HEX, VALS(mesh_path_selection_codes)((0 ? (const struct _value_string*)0 : ((mesh_path_selection_codes
))))
, 0,
55096 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55097
55098 {&hf_ieee80211_marvell_ie_mesh_active_metric_id,
55099 {"Path Selection Metric", "wlan.marvell.ie.metric_id",
55100 FT_UINT8, BASE_HEX, VALS(mesh_metric_codes)((0 ? (const struct _value_string*)0 : ((mesh_metric_codes)))
)
, 0,
55101 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55102
55103 {&hf_ieee80211_marvell_ie_mesh_cap,
55104 {"Mesh Capabilities", "wlan.marvell.ie.cap",
55105 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55106 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55107
55108 {&hf_ieee80211_marvell_ie_data,
55109 { "Marvell IE data", "wlan.marvell.data",
55110 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
55111 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55112
55113 {&hf_ieee80211_extreme_mesh_ie_type,
55114 { "Type", "wlan.extreme_mesh.ie.type",
55115 FT_UINT8, BASE_HEX, VALS(extreme_mesh_ie_type_vals)((0 ? (const struct _value_string*)0 : ((extreme_mesh_ie_type_vals
))))
, 0,
55116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55117 {&hf_ieee80211_extreme_mesh_ie_services,
55118 { "Services", "wlan.extreme_mesh.ie.services",
55119 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55121 {&hf_ieee80211_extreme_mesh_ie_hello_f_root,
55122 { "Root", "wlan.extreme_mesh.ie.services.root",
55123 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_ROOT,
55124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55125 {&hf_ieee80211_extreme_mesh_ie_hello_f_proxy,
55126 { "Proxy", "wlan.extreme_mesh.ie.services.proxy",
55127 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_PROXY,
55128 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55129 {&hf_ieee80211_extreme_mesh_ie_hello_f_geo,
55130 { "Geo", "wlan.extreme_mesh.ie.services.geo",
55131 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_GEO,
55132 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55133 {&hf_ieee80211_extreme_mesh_ie_hello_f_path_pref,
55134 { "Path Preference", "wlan.extreme_mesh.ie.services.path_pref",
55135 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_PATH_PREF,
55136 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55137 {&hf_ieee80211_extreme_mesh_ie_hello_f_mobile,
55138 { "Mobile", "wlan.extreme_mesh.ie.services.mobile",
55139 FT_BOOLEAN, 8, NULL((void*)0), EXTREME_MESH_IE_SERVICES_MOBILE,
55140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55141 {&hf_ieee80211_extreme_mesh_ie_htr,
55142 { "Hops to Root", "wlan.extreme_mesh.ie.htr",
55143 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55145 {&hf_ieee80211_extreme_mesh_ie_mtr,
55146 { "Metric to Root", "wlan.extreme_mesh.ie.mtr",
55147 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
55148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55149 {&hf_ieee80211_extreme_mesh_ie_root,
55150 { "Root Id", "wlan.extreme_mesh.ie.root",
55151 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
55152 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55153 {&hf_ieee80211_extreme_mesh_ie_nh,
55154 { "Next Hop", "wlan.extreme_mesh.ie.nh",
55155 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
55156 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55157 {&hf_ieee80211_extreme_mesh_ie_mesh_id,
55158 { "Mesh Id", "wlan.extreme_mesh.ie.mesh_id",
55159 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55161 {&hf_ieee80211_extreme_mesh_ie_mp_id,
55162 { "Mesh Point Id", "wlan.extreme_mesh.ie.mp_id",
55163 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
55164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55165
55166 {&hf_ieee80211_atheros_ie_type,
55167 {"Type", "wlan.atheros.ie.type",
55168 FT_UINT8, BASE_HEX, VALS(atheros_ie_type_vals)((0 ? (const struct _value_string*)0 : ((atheros_ie_type_vals
))))
, 0,
55169 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55170
55171 {&hf_ieee80211_atheros_ie_subtype,
55172 {"Subtype", "wlan.atheros.ie.subtype",
55173 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55175
55176 {&hf_ieee80211_atheros_ie_version,
55177 {"Version", "wlan.atheros.ie.version",
55178 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55180
55181 {&hf_ieee80211_atheros_ie_cap_f_turbop,
55182 {"Turbo Prime", "wlan.ie.atheros.capabilities.turbop",
55183 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_TURBOP,
55184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55185
55186 {&hf_ieee80211_atheros_ie_cap_f_comp,
55187 {"Compression", "wlan.ie.atheros.capabilities.comp",
55188 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_COMP,
55189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55190
55191 {&hf_ieee80211_atheros_ie_cap_f_ff,
55192 {"Fast Frames", "wlan.ie.atheros.capabilities.ff",
55193 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_FF,
55194 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55195
55196 {&hf_ieee80211_atheros_ie_cap_f_xr,
55197 {"eXtended Range", "wlan.ie.atheros.capabilities.xr",
55198 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_XR,
55199 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55200
55201 {&hf_ieee80211_atheros_ie_cap_f_ar,
55202 {"Advanced Radar", "wlan.ie.atheros.capabilities.ar",
55203 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_AR,
55204 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55205
55206 {&hf_ieee80211_atheros_ie_cap_f_burst,
55207 {"Burst", "wlan.ie.atheros.capabilities.burst",
55208 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_BURST,
55209 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55210
55211 {&hf_ieee80211_atheros_ie_cap_f_wme,
55212 {"CWMin tuning", "wlan.ie.atheros.capabilities.wme",
55213 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_WME,
55214 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55215
55216 {&hf_ieee80211_atheros_ie_cap_f_boost,
55217 {"Boost", "wlan.ie.atheros.capabilities.boost",
55218 FT_BOOLEAN, 8, NULL((void*)0), ATHEROS_IE_CAP_BOOST,
55219 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55220
55221 {&hf_ieee80211_atheros_ie_advcap_cap,
55222 {"Capabilities", "wlan.atheros.ie.advcap.cap",
55223 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55224 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55225
55226 {&hf_ieee80211_atheros_ie_advcap_defkey,
55227 {"Default key index", "wlan.atheros.ie.advcap.defkey",
55228 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
55229 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55230
55231 {&hf_ieee80211_atheros_ie_xr_info,
55232 {"Info", "wlan.atheros.ie.xr.info",
55233 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55234 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55235
55236 {&hf_ieee80211_atheros_ie_xr_base_bssid,
55237 {"Base BSS Id", "wlan.atheros.ie.xr.base_bssid",
55238 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
55239 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55240
55241 {&hf_ieee80211_atheros_ie_xr_xr_bssid,
55242 {"XR BSS Id", "wlan.atheros.ie.xr.xr_bssid",
55243 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
55244 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55245
55246 {&hf_ieee80211_atheros_ie_xr_xr_beacon,
55247 {"XR Beacon Interval", "wlan.atheros.ie.xr.xr_beacon",
55248 FT_UINT32, BASE_CUSTOM, CF_FUNC(beacon_interval_base_custom)((const void *) (size_t) (beacon_interval_base_custom)), 0,
55249 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55250
55251 {&hf_ieee80211_atheros_ie_xr_base_cap,
55252 {"Base capabilities", "wlan.atheros.ie.xr.base_cap",
55253 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55254 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55255
55256 {&hf_ieee80211_atheros_ie_xr_xr_cap,
55257 {"XR capabilities", "wlan.atheros.ie.xr.xr_cap",
55258 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55259 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55260
55261 {&hf_ieee80211_atheros_ie_data,
55262 {"Atheros IE data", "wlan.atheros.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 {&hf_ieee80211_aironet_ie_type,
55267 {"Aironet IE type", "wlan.aironet.type",
55268 FT_UINT8, BASE_DEC, VALS(aironet_ie_type_vals)((0 ? (const struct _value_string*)0 : ((aironet_ie_type_vals
))))
, 0,
55269 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55270
55271 {&hf_ieee80211_aironet_ie_dtpc,
55272 {"Aironet IE CCX DTCP", "wlan.aironet.dtpc",
55273 FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_dbm)((0 ? (const struct unit_name_string*)0 : ((&units_dbm)))
)
, 0,
55274 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55275
55276 {&hf_ieee80211_aironet_ie_dtpc_unknown,
55277 {"Aironet IE CCX DTCP Unknown", "wlan.aironet.dtpc_unknown",
55278 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55279 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55280
55281 {&hf_ieee80211_aironet_ie_version,
55282 {"Aironet IE CCX version", "wlan.aironet.version",
55283 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55284 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55285
55286 {&hf_ieee80211_aironet_ie_data,
55287 { "Aironet IE data", "wlan.aironet.data",
55288 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
55289 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55290
55291 {&hf_ieee80211_qbss_version,
55292 {"QBSS Version", "wlan.qbss.version",
55293 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55295
55296 {&hf_ieee80211_qbss_scount,
55297 {"Station Count", "wlan.qbss.scount",
55298 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55300
55301 {&hf_ieee80211_qbss_cu,
55302 {"Channel Utilization", "wlan.qbss.cu",
55303 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55304 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55305
55306 {&hf_ieee80211_qbss_adc,
55307 {"Available Admission Capacity", "wlan.qbss.adc",
55308 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55309 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55310
55311 {&hf_ieee80211_qbss2_cu,
55312 {"Channel Utilization", "wlan.qbss2.cu",
55313 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55314 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55315
55316 {&hf_ieee80211_qbss2_gl,
55317 {"G.711 CU Quantum", "wlan.qbss2.glimit",
55318 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55319 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55320
55321 {&hf_ieee80211_qbss2_cal,
55322 {"Call Admission Limit", "wlan.qbss2.cal",
55323 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55324 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55325
55326 {&hf_ieee80211_qbss2_scount,
55327 {"Station Count", "wlan.qbss2.scount",
55328 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55329 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55330
55331 {&hf_ieee80211_aironet_ie_qos_reserved,
55332 {"Aironet IE QoS reserved", "wlan.aironet.qos.reserved",
55333 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
55334 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55335
55336 {&hf_ieee80211_aironet_ie_qos_paramset,
55337 {"Aironet IE QoS paramset", "wlan.aironet.qos.paramset",
55338 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55339 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55340
55341 {&hf_ieee80211_aironet_ie_qos_val,
55342 {"Aironet IE QoS valueset", "wlan.aironet.qos.val",
55343 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55344 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55345
55346 {&hf_ieee80211_aironet_ie_clientmfp,
55347 {"Aironet IE Client MFP", "wlan.aironet.clientmfp",
55348 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x01,
55349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55350
55351 /* Vendor Specific : SGDSN */
55352 {&hf_ieee80211_vs_sgdsn_tag,
55353 {"Tag", "wlan.vs.sgdsn.tag",
55354 FT_NONE, BASE_NONE, NULL((void*)0), 0,
55355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55356
55357 {&hf_ieee80211_vs_sgdsn_type,
55358 {"Type", "wlan.vs.sgdsn.type",
55359 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_sgdsn_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_sgdsn_type_vals
))))
, 0,
55360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55361
55362 {&hf_ieee80211_vs_sgdsn_length,
55363 {"Length", "wlan.vs.sgdsn.length",
55364 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55366
55367 {&hf_ieee80211_vs_sgdsn_version,
55368 {"Version", "wlan.vs.sgdsn.tag.version",
55369 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55371
55372 {&hf_ieee80211_vs_sgdsn_icaomfrcode,
55373 {"ICAO Manufacturer Code", "wlan.vs.sgdsn.tag.icaomfrcode",
55374 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55376
55377 {&hf_ieee80211_vs_sgdsn_manufacturer,
55378 {"Manufacturer", "wlan.vs.sgdsn.tag.manufacturer",
55379 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55381
55382 {&hf_ieee80211_vs_sgdsn_model,
55383 {"Model", "wlan.vs.sgdsn.tag.model",
55384 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55386
55387 {&hf_ieee80211_vs_sgdsn_serialnumber,
55388 {"Serial number", "wlan.vs.sgdsn.tag.serialnumber",
55389 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55391
55392 {&hf_ieee80211_vs_sgdsn_serialnumber_len,
55393 {"Serial number length", "wlan.vs.sgdsn.tag.serialnumber.len",
55394 FT_UINT8, BASE_CUSTOM, CF_FUNC(vs_sgdsn_serialnumber_len_custom)((const void *) (size_t) (vs_sgdsn_serialnumber_len_custom)), 0,
55395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55396
55397 {&hf_ieee80211_vs_sgdsn_gpscoord,
55398 {"GPS Coord", "wlan.vs.sgdsn.tag.gpscoord",
55399 FT_INT32, BASE_DEC, NULL((void*)0), 0,
55400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55401
55402 {&hf_ieee80211_vs_sgdsn_altitude,
55403 {"Altitude", "wlan.vs.sgdsn.tag.altitude",
55404 FT_INT16, BASE_DEC, NULL((void*)0), 0,
55405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55406
55407 {&hf_ieee80211_vs_sgdsn_speed,
55408 {"Speed", "wlan.vs.sgdsn.tag.speed",
55409 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55411
55412 {&hf_ieee80211_vs_sgdsn_heading,
55413 {"Heading", "wlan.vs.sgdsn.tag.heading",
55414 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55416
55417 /* Vendor Specific : Nintendo */
55418 {&hf_ieee80211_vs_nintendo_type,
55419 {"Type", "wlan.vs.nintendo.type",
55420 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_nintendo_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_nintendo_type_vals
))))
, 0,
55421 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55422
55423 {&hf_ieee80211_vs_nintendo_length,
55424 {"Length", "wlan.vs.nintendo.length",
55425 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55427
55428 {&hf_ieee80211_vs_nintendo_servicelist,
55429 {"Servicelist", "wlan.vs.nintendo.servicelist",
55430 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55431 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55432
55433 {&hf_ieee80211_vs_nintendo_service,
55434 {"Service", "wlan.vs.nintendo.service",
55435 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55436 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55437
55438 {&hf_ieee80211_vs_nintendo_consoleid,
55439 {"Console ID", "wlan.vs.nintendo.consoleid",
55440 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55441 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55442
55443 {&hf_ieee80211_vs_nintendo_unknown,
55444 {"Unknown", "wlan.vs.nintendo.unknown",
55445 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55447
55448 /* Vendor Specific : Aruba Networks */
55449 {&hf_ieee80211_vs_aruba_subtype,
55450 {"Subtype", "wlan.vs.aruba.subtype",
55451 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_aruba_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_aruba_subtype_vals
))))
, 0,
55452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55453
55454 {&hf_ieee80211_vs_aruba_apname,
55455 {"AP Name", "wlan.vs.aruba.ap_name",
55456 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55457 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55458
55459 {&hf_ieee80211_vs_aruba_data,
55460 {"Data", "wlan.vs.aruba.data",
55461 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55462 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55463
55464 {&hf_ieee80211_vs_aruba_gps_length,
55465 { "GPS Length", "wlan.ie.aruba.gps.length",
55466 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55468
55469 { &hf_ieee80211_vs_aruba_gps_subversion,
55470 { "GPS Subversion", "wlan.ie.aruba.gps.subversion",
55471 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55473
55474 { &hf_ieee80211_vs_aruba_gps_hop,
55475 { "GPS Hop", "wlan.ie.aruba.gps.hop",
55476 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55478
55479 { &hf_ieee80211_vs_aruba_gps_latitude,
55480 { "GPS Latitude", "wlan.ie.aruba.gps.latitude",
55481 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55482 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55483
55484 { &hf_ieee80211_vs_aruba_gps_longitude,
55485 { "GPS Longitude", "wlan.ie.aruba.gps.longitude",
55486 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55488
55489 { &hf_ieee80211_vs_aruba_gps_major_axis,
55490 { "GPS Major Axis", "wlan.ie.aruba.gps.major_axis",
55491 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55492 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55493
55494 { &hf_ieee80211_vs_aruba_gps_minor_axis,
55495 { "GPS Minor Axis", "wlan.ie.aruba.gps.minor_axis",
55496 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55497 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55498
55499 { &hf_ieee80211_vs_aruba_gps_orientation,
55500 { "GPS Orientation", "wlan.ie.aruba.gps.orientation",
55501 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55503
55504 { &hf_ieee80211_vs_aruba_gps_distance,
55505 { "GPS Distance", "wlan.ie.aruba.gps.distance",
55506 FT_DOUBLE, BASE_DEC, NULL((void*)0), 0,
55507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55508
55509 { &hf_ieee80211_vs_aruba_ap_health,
55510 { "AP Health", "wlan.aruba.ap_health",
55511 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
55512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
55513 },
55514
55515 { &hf_ieee80211_vs_aruba_ap_health_version,
55516 { "Version", "wlan.aruba.ap_health.version",
55517 FT_UINT32, BASE_DEC, VALS(aruba_vs_ap_health_version_vals)((0 ? (const struct _value_string*)0 : ((aruba_vs_ap_health_version_vals
))))
, 0x00000007,
55518 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
55519 },
55520
55521 { &hf_ieee80211_vs_aruba_ap_health_ip_protocol,
55522 { "IP Protocol", "wlan.aruba.ap_health.ip_protocol",
55523 FT_UINT32, BASE_DEC, VALS(aruba_vs_ap_health_ip_protocol_vals)((0 ? (const struct _value_string*)0 : ((aruba_vs_ap_health_ip_protocol_vals
))))
, 0x00000008,
55524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
55525 },
55526
55527 { &hf_ieee80211_vs_aruba_ap_health_uplink,
55528 { "Uplink", "wlan.aruba.ap_health.uplink",
55529 FT_UINT32, BASE_DEC, VALS(aruba_vs_ap_health_uplink_vals)((0 ? (const struct _value_string*)0 : ((aruba_vs_ap_health_uplink_vals
))))
, 0x00000010,
55530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
55531 },
55532
55533 { &hf_ieee80211_vs_aruba_ap_health_uplink_type,
55534 { "Uplink Type", "wlan.aruba.ap_health.uplink_type",
55535 FT_UINT32, BASE_DEC, VALS(aruba_vs_ap_health_uplink_type_vals)((0 ? (const struct _value_string*)0 : ((aruba_vs_ap_health_uplink_type_vals
))))
, 0x000000E0,
55536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
55537 },
55538
55539 { &hf_ieee80211_vs_aruba_ap_health_network_layer,
55540 { "Network Layer", "wlan.aruba.ap_health.network_layer",
55541 FT_UINT32, BASE_DEC, VALS(aruba_vs_ap_health_network_layer_vals)((0 ? (const struct _value_string*)0 : ((aruba_vs_ap_health_network_layer_vals
))))
, 0x00000F00,
55542 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
55543 },
55544
55545 { &hf_ieee80211_vs_aruba_ap_health_proxy_server,
55546 { "Proxy Server", "wlan.aruba.ap_health.proxy_server",
55547 FT_UINT32, BASE_DEC, VALS(aruba_vs_ap_health_proxy_server_vals)((0 ? (const struct _value_string*)0 : ((aruba_vs_ap_health_proxy_server_vals
))))
, 0x00003000,
55548 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
55549 },
55550
55551 { &hf_ieee80211_vs_aruba_ap_health_activate,
55552 { "Activate", "wlan.aruba.ap_health.activate",
55553 FT_UINT32, BASE_DEC, VALS(aruba_vs_ap_health_activate_vals)((0 ? (const struct _value_string*)0 : ((aruba_vs_ap_health_activate_vals
))))
, 0x0003C000,
55554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
55555 },
55556
55557 { &hf_ieee80211_vs_aruba_ap_health_central,
55558 { "Central", "wlan.aruba.ap_health.central",
55559 FT_UINT32, BASE_DEC, VALS(aruba_vs_ap_health_central_vals)((0 ? (const struct _value_string*)0 : ((aruba_vs_ap_health_central_vals
))))
, 0x001C0000,
55560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
55561 },
55562
55563 { &hf_ieee80211_vs_aruba_ap_health_reserved,
55564 { "Reserved", "wlan.aruba.ap_health.reserved",
55565 FT_UINT32, BASE_HEX, NULL((void*)0), 0xFFE00000,
55566 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
55567 },
55568 /* Vendor Specific : Routerboard */
55569 {&hf_ieee80211_vs_routerboard_unknown,
55570 {"Unknown", "wlan.vs.routerboard.unknown",
55571 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55572 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55573
55574 {&hf_ieee80211_vs_routerboard_subitem,
55575 {"Sub IE", "wlan.vs.routerboard.subitem",
55576 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55577 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55578
55579 {&hf_ieee80211_vs_routerboard_subtype,
55580 {"Subtype", "wlan.vs.routerboard.subtype",
55581 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55582 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55583
55584 {&hf_ieee80211_vs_routerboard_sublength,
55585 {"Sublength", "wlan.vs.routerboard.sublength",
55586 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55587 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55588
55589 {&hf_ieee80211_vs_routerboard_subdata,
55590 {"Subdata", "wlan.vs.routerboard.subdata",
55591 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55592 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55593
55594 {&hf_ieee80211_vs_routerboard_subtype1_prefix,
55595 {"Subtype 1 Prefix", "wlan.vs.routerboard.subtype1_prefix",
55596 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55597 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55598
55599 {&hf_ieee80211_vs_routerboard_subtype1_data,
55600 {"Subtype 1 Data", "wlan.vs.routerboard.subtype1_data",
55601 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55602 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55603
55604 /* Vendor Specific : Meru (Fortinet) */
55605 {&hf_ieee80211_vs_meru_subitem,
55606 {"Sub IE", "wlan.vs.meru.unknown",
55607 FT_NONE, BASE_NONE, NULL((void*)0), 0,
55608 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55609
55610 {&hf_ieee80211_vs_meru_subtype,
55611 {"Subtype", "wlan.vs.meru.subtype",
55612 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55613 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55614
55615 {&hf_ieee80211_vs_meru_sublength,
55616 {"Sublength", "wlan.vs.meru.sublength",
55617 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55618 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55619
55620 {&hf_ieee80211_vs_meru_subdata,
55621 {"Subdata", "wlan.vs.meru.subdata",
55622 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55623 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55624
55625 /* Vendor Specific : Extreme (Zebra) */
55626 {&hf_ieee80211_vs_extreme_subtype,
55627 {"Subtype", "wlan.vs.extreme.subtype",
55628 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_extreme_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_extreme_subtype_vals
))))
, 0,
55629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55630
55631 {&hf_ieee80211_vs_extreme_subdata,
55632 {"Subdata", "wlan.vs.extreme.subdata",
55633 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55635
55636 {&hf_ieee80211_vs_extreme_unknown,
55637 {"Unknown", "wlan.vs.extreme.unknown",
55638 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55639 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55640
55641 {&hf_ieee80211_vs_extreme_ap_length,
55642 {"AP Length", "wlan.vs.extreme.ap_length",
55643 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55645
55646 {&hf_ieee80211_vs_extreme_ap_name,
55647 {"AP Name", "wlan.vs.extreme.ap_name",
55648 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55650
55651 /* Vendor Specific : Aerohive */
55652 {&hf_ieee80211_vs_aerohive_version,
55653 {"Version", "wlan.vs.aerohive.version",
55654 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55655 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55656
55657 {&hf_ieee80211_vs_aerohive_subtype,
55658 {"Subtype", "wlan.vs.aerohive.subtype",
55659 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55660 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55661
55662 {&hf_ieee80211_vs_aerohive_hostname_length,
55663 {"Host Name Length", "wlan.vs.aerohive.hostname_length",
55664 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55665 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55666
55667 {&hf_ieee80211_vs_aerohive_hostname,
55668 {"Host Name", "wlan.vs.aerohive.hostname",
55669 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55671
55672 {&hf_ieee80211_vs_aerohive_data,
55673 {"Data", "wlan.vs.aerohive.data",
55674 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55675 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55676
55677 /* Vendor Specific : Mist */
55678 {&hf_ieee80211_vs_mist_ap_name,
55679 {"AP Name", "wlan.vs.mist.apname",
55680 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55681 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55682
55683 {&hf_ieee80211_vs_mist_data,
55684 {"Data", "wlan.vs.mist.data",
55685 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55686 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55687
55688 {&hf_ieee80211_vs_ubiquiti_type,
55689 {"Subtype", "wlan.vs.ubiquiti.type",
55690 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_ubiquiti_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_ubiquiti_type_vals
))))
, 0,
55691 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55692
55693 {&hf_ieee80211_vs_ubiquiti_ap_name,
55694 {"AP Name", "wlan.vs.ubiquiti.ap_name",
55695 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55696 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55697
55698 {&hf_ieee80211_vs_ubiquiti_data,
55699 {"Data", "wlan.vs.ubiquiti.data",
55700 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55701 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55702
55703 /* Vendor Specific : Meter */
55704 {&hf_ieee80211_vs_meter_type,
55705 {"Subtype", "wlan.vs.meter.type",
55706 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_meter_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_meter_type_vals
))))
, 0,
55707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55708
55709 {&hf_ieee80211_vs_meter_ap_name,
55710 {"AP Name", "wlan.vs.meter.apname",
55711 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55713
55714 {&hf_ieee80211_vs_meter_data,
55715 {"Data", "wlan.vs.meter.data",
55716 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55717 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55718
55719 /* Vendor Specific: Cisco */
55720 {&hf_ieee80211_vs_cisco_ap_name_v2,
55721 {"AP Name", "wlan.vs.cisco.apname_v2",
55722 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55724
55725 /* Vendor Specific : Ruckus */
55726 {&hf_ieee80211_vs_ruckus_ap_name,
55727 {"AP Name", "wlan.vs.ruckus.apname",
55728 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55730
55731 {&hf_ieee80211_vs_ruckus_data,
55732 {"Data", "wlan.vs.ruckus.data",
55733 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55735
55736 /* Vendor Specific : Alcatel-Lucent */
55737 {&hf_ieee80211_vs_alcatel_ap_name,
55738 {"AP Name", "wlan.vs.alcatel.apname",
55739 FT_STRING, BASE_NONE, NULL((void*)0), 0,
55740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55741
55742 {&hf_ieee80211_vs_alcatel_data,
55743 {"Data", "wlan.vs.alcatel.data",
55744 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55746
55747 /* Vendor Specific : Fortinet */
55748 {&hf_ieee80211_vs_fortinet_subtype,
55749 {"Subtype", "wlan.vs.fortinet.subtype",
55750 FT_UINT16, BASE_DEC, VALS(ieee80211_vs_fortinet_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_fortinet_subtype_vals
))))
, 0,
55751 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55752
55753 {&hf_ieee80211_vs_fortinet_system_type,
55754 {"Type", "wlan.vs.fortinet.system.type",
55755 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_fortinet_system_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_fortinet_system_type_vals
))))
, 0,
55756 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55757
55758 {&hf_ieee80211_vs_fortinet_system_length,
55759 {"Length", "wlan.vs.fortinet.system.length",
55760 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55761 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55762
55763 {&hf_ieee80211_vs_fortinet_system_apname,
55764 {"AP Name", "wlan.vs.fortinet.system.ap_name",
55765 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55766 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55767
55768 {&hf_ieee80211_vs_fortinet_system_apmodel,
55769 {"AP Model", "wlan.vs.fortinet.system.ap_model",
55770 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55771 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55772
55773 {&hf_ieee80211_vs_fortinet_system_apserial,
55774 {"AP Serial", "wlan.vs.fortinet.system.ap_serial",
55775 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55776 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55777
55778 {&hf_ieee80211_vs_fortinet_data,
55779 {"Data", "wlan.vs.fortinet.data",
55780 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55781 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55782
55783 /* Vendor Specific : Arista Networks */
55784 {&hf_ieee80211_vs_arista_subtype,
55785 {"Subtype", "wlan.vs.arista.subtype",
55786 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_arista_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_arista_subtype_vals
))))
, 0,
55787 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55788
55789 {&hf_ieee80211_vs_arista_apname,
55790 {"AP Name", "wlan.vs.arista.ap_name",
55791 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0,
55792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55793
55794 {&hf_ieee80211_vs_arista_data,
55795 {"Data", "wlan.vs.arista.data",
55796 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55798
55799 /* Vendor Specific : Wi-SUN */
55800 {&hf_ieee80211_vs_wisun_type,
55801 {"Data Type", "wlan.vs.wisun.type",
55802 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_wisun_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_wisun_type_vals
))))
, 0,
55803 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55804 {&hf_ieee80211_vs_wisun_ptkid,
55805 {"PTK ID", "wlan.vs.wisun.ptkid",
55806 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55807 {&hf_ieee80211_vs_wisun_gtkl,
55808 {"GTK Liveness", "wlan.vs.wisun.gtkl",
55809 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55810 {&hf_ieee80211_vs_wisun_gtkl_gtk0,
55811 {"GTK[0]", "wlan.vs.wisun.gtkl.gtk0",
55812 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK00x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55813 {&hf_ieee80211_vs_wisun_gtkl_gtk1,
55814 {"GTK[1]", "wlan.vs.wisun.gtkl.gtk1",
55815 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK10x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55816 {&hf_ieee80211_vs_wisun_gtkl_gtk2,
55817 {"GTK[2]", "wlan.vs.wisun.gtkl.gtk2",
55818 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK20x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55819 {&hf_ieee80211_vs_wisun_gtkl_gtk3,
55820 {"GTK[3]", "wlan.vs.wisun.gtkl.gtk3",
55821 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_GTKL_GTK30x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55822 {&hf_ieee80211_vs_wisun_nr,
55823 {"Node Role", "wlan.vs.wisun.nr",
55824 FT_UINT8, BASE_DEC, VALS(ieee80211_vs_wisun_nr_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_wisun_nr_vals
))))
, 0,
55825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55826 {&hf_ieee80211_vs_wisun_lgtkl,
55827 {"LGTK Liveness", "wlan.vs.wisun.lgtkl",
55828 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55829 {&hf_ieee80211_vs_wisun_lgtkl_lgtk0,
55830 {"LGTK[0]", "wlan.vs.wisun.lgtkl.lgtk0",
55831 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK00x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55832 {&hf_ieee80211_vs_wisun_lgtkl_lgtk1,
55833 {"LGTK[1]", "wlan.vs.wisun.lgtkl.lgtk1",
55834 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK10x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55835 {&hf_ieee80211_vs_wisun_lgtkl_lgtk2,
55836 {"LGTK[2]", "wlan.vs.wisun.lgtkl.lgtk2",
55837 FT_UINT8, BASE_HEX, NULL((void*)0), WISUN_LGTKL_LGTK20x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55838 {&hf_ieee80211_vs_wisun_lgtk_key_id,
55839 {"Key ID", "wlan.vs.wisun.lgtk.key_id",
55840 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55841 {&hf_ieee80211_vs_wisun_lgtk_lgtk,
55842 {"LGTK", "wlan.vs.wisun.lgtk.lgtk",
55843 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55844 {&hf_ieee80211_vs_wisun_data,
55845 {"Data", "wlan.vs.wisun.data",
55846 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55847
55848 /* Vendor Specific : apple */
55849 {&hf_ieee80211_vs_apple_type,
55850 {"Type", "wlan.vs.apple.type",
55851 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55852 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55853
55854 {&hf_ieee80211_vs_apple_subtype,
55855 {"Subtype", "wlan.vs.apple.subtype",
55856 FT_UINT16, BASE_DEC, VALS(ieee80211_vs_apple_subtype_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_vs_apple_subtype_vals
))))
, 0,
55857 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55858
55859 {&hf_ieee80211_vs_apple_length,
55860 {"Length", "wlan.vs.apple.length",
55861 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
55862 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55863
55864 {&hf_ieee80211_vs_apple_data,
55865 {"Data", "wlan.vs.apple.data",
55866 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
55867 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55868
55869 {&hf_ieee80211_tsinfo,
55870 {"Traffic Stream (TS) Info", "wlan.ts_info",
55871 FT_UINT24, BASE_HEX, NULL((void*)0), 0,
55872 "Traffic Stream (TS) Info field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55873
55874 {&hf_ieee80211_tsinfo_type,
55875 {"Traffic Type", "wlan.ts_info.type",
55876 FT_UINT24, BASE_DEC, VALS(tsinfo_type)((0 ? (const struct _value_string*)0 : ((tsinfo_type)))), 0x000001,
55877 "Traffic Stream (TS) Info Traffic Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55878
55879 {&hf_ieee80211_tsinfo_tsid,
55880 {"Traffic Stream ID (TSID)", "wlan.ts_info.tsid",
55881 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00001E,
55882 "Traffic Stream ID (TSID) Info TSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55883
55884 {&hf_ieee80211_tsinfo_dir,
55885 {"Direction", "wlan.ts_info.dir",
55886 FT_UINT24, BASE_DEC, VALS(tsinfo_direction)((0 ? (const struct _value_string*)0 : ((tsinfo_direction)))), 0x000060,
55887 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55888
55889 {&hf_ieee80211_tsinfo_access,
55890 {"Access Policy", "wlan.ts_info.access",
55891 FT_UINT24, BASE_DEC, VALS(tsinfo_access)((0 ? (const struct _value_string*)0 : ((tsinfo_access)))), 0x000180,
55892 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55893
55894 {&hf_ieee80211_tsinfo_agg,
55895 {"Aggregation", "wlan.ts_info.agg",
55896 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000200,
55897 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55898
55899 {&hf_ieee80211_tsinfo_apsd,
55900 {"Automatic Power-Save Delivery (APSD)", "wlan.ts_info.apsd",
55901 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000400,
55902 "Traffic Stream (TS) Info Automatic Power-Save Delivery (APSD)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55903
55904 {&hf_ieee80211_tsinfo_up,
55905 {"User Priority", "wlan.ts_info.up",
55906 FT_UINT24, BASE_DEC, VALS(qos_up)((0 ? (const struct _value_string*)0 : ((qos_up)))), 0x003800,
55907 "Traffic Stream (TS) Info User Priority", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55908
55909 {&hf_ieee80211_tsinfo_ack,
55910 {"Ack Policy", "wlan.ts_info.ack",
55911 FT_UINT24, BASE_DEC, VALS(ack_policy)((0 ? (const struct _value_string*)0 : ((ack_policy)))), 0x00C000,
55912 "Traffic Stream (TS) Info Ack Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55913
55914 {&hf_ieee80211_tsinfo_sched,
55915 {"Schedule", "wlan.ts_info.sched",
55916 FT_UINT24, BASE_DEC, NULL((void*)0), 0x010000,
55917 "Traffic Stream (TS) Info Schedule", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55918
55919 {&hf_ieee80211_tsinfo_rsv,
55920 {"Reserved", "wlan.ts_info.rsv",
55921 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFE0000,
55922 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55923
55924 {&hf_ieee80211_tspec_nor_msdu,
55925 {"Normal MSDU Size", "wlan.tspec.nor_msdu",
55926 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55928
55929 {&hf_ieee80211_tspec_max_msdu,
55930 {"Maximum MSDU Size", "wlan.tspec.max_msdu",
55931 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55933
55934 {&hf_ieee80211_tspec_min_srv,
55935 {"Minimum Service Interval", "wlan.tspec.min_srv",
55936 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55938
55939 {&hf_ieee80211_tspec_max_srv,
55940 {"Maximum Service Interval", "wlan.tspec.max_srv",
55941 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55942 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55943
55944 {&hf_ieee80211_tspec_inact_int,
55945 {"Inactivity Interval", "wlan.tspec.inact_int",
55946 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55947 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55948
55949 {&hf_ieee80211_tspec_susp_int,
55950 {"Suspension Interval", "wlan.tspec.susp_int",
55951 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55952 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55953
55954 {&hf_ieee80211_tspec_srv_start,
55955 {"Service Start Time", "wlan.tspec.srv_start",
55956 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55957 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55958
55959 {&hf_ieee80211_tspec_min_data,
55960 {"Minimum Data Rate", "wlan.tspec.min_data",
55961 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55962 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55963
55964 {&hf_ieee80211_tspec_mean_data,
55965 {"Mean Data Rate", "wlan.tspec.mean_data",
55966 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55967 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55968
55969 {&hf_ieee80211_tspec_peak_data,
55970 {"Peak Data Rate", "wlan.tspec.peak_data",
55971 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55972 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55973
55974 {&hf_ieee80211_tspec_burst_size,
55975 {"Burst Size", "wlan.tspec.burst_size",
55976 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55977 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55978
55979 {&hf_ieee80211_tspec_delay_bound,
55980 {"Delay Bound", "wlan.tspec.delay_bound",
55981 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55982 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55983
55984 {&hf_ieee80211_tspec_min_phy,
55985 {"Minimum PHY Rate", "wlan.tspec.min_phy",
55986 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
55987 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55988
55989 {&hf_ieee80211_tspec_surplus,
55990 {"Surplus Bandwidth Allowance", "wlan.tspec.surplus",
55991 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55992 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55993
55994 {&hf_ieee80211_tspec_medium,
55995 {"Medium Time", "wlan.tspec.medium",
55996 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
55997 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
55998
55999 {&hf_ieee80211_tspec_dmg,
56000 {"DMG attributes", "wlan.tspec.dmg",
56001 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56002 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56003
56004 {&hf_ieee80211_ts_delay,
56005 {"Traffic Stream (TS) Delay", "wlan.ts_delay",
56006 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
56007 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56008
56009 {&hf_ieee80211_tclas_process,
56010 {"Processing", "wlan.tclas_proc.processing",
56011 FT_UINT8, BASE_DEC, VALS(ieee80211_tclas_process_flag)((0 ? (const struct _value_string*)0 : ((ieee80211_tclas_process_flag
))))
, 0,
56012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56013
56014 {&hf_ieee80211_tag_ext_supp_rates,
56015 {"Extended Supported Rates", "wlan.extended_supported_rates",
56016 FT_UINT8, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_supported_rates_vals_ext, 0x0,
56017 "In Mbit/sec, (B) for Basic Rates", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56018
56019 {&hf_ieee80211_sched_info,
56020 {"Schedule Info", "wlan.sched.sched_info",
56021 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56022 "Schedule Info field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56023
56024 {&hf_ieee80211_sched_info_agg,
56025 {"Schedule Aggregation", "wlan.sched_info.agg",
56026 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0001,
56027 "Traffic Stream (TS) Info Access Policy", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56028
56029 {&hf_ieee80211_sched_info_tsid,
56030 {"Schedule Traffic Stream ID (TSID)", "wlan.sched_info.tsid",
56031 FT_UINT16, BASE_DEC, NULL((void*)0), 0x001E,
56032 "Traffic Stream ID (TSID) Info TSID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56033
56034 {&hf_ieee80211_sched_info_dir,
56035 {"Schedule Direction", "wlan.sched_info.dir",
56036 FT_UINT16, BASE_DEC, VALS(tsinfo_direction)((0 ? (const struct _value_string*)0 : ((tsinfo_direction)))), 0x0060,
56037 "Traffic Stream (TS) Info Direction", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56038
56039 {&hf_ieee80211_sched_srv_start,
56040 {"Service Start Time", "wlan.sched.srv_start",
56041 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
56042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56043
56044 {&hf_ieee80211_sched_srv_int,
56045 {"Service Interval", "wlan.sched.srv_int",
56046 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
56047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56048
56049 {&hf_ieee80211_sched_spec_int,
56050 {"Specification Interval", "wlan.sched.spec_int",
56051 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
56052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56053
56054 {&hf_ieee80211_aruba,
56055 {"Aruba Type", "wlan.aruba.type",
56056 FT_UINT16, BASE_DEC|BASE_EXT_STRING0x00000200, &aruba_mgt_typevals_ext, 0,
56057 "Aruba Management", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56058
56059 {&hf_ieee80211_aruba_hb_seq,
56060 {"Aruba Heartbeat Sequence", "wlan.aruba.heartbeat_sequence",
56061 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
56062 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56063
56064 {&hf_ieee80211_aruba_mtu,
56065 {"Aruba MTU Size", "wlan.aruba.mtu_size",
56066 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
56067 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56068
56069 /* Start: HT Control (+HTC) */
56070 {&hf_ieee80211_htc,
56071 {"HT Control (+HTC)", "wlan.htc",
56072 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
56073 "High Throughput Control (+HTC)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56074
56075 {&hf_ieee80211_htc_vht,
56076 {"VHT", "wlan.htc.vht",
56077 FT_BOOLEAN, 32, NULL((void*)0), HTC_VHT0x00000001,
56078 "High Throughput Control HT/VHT flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56079
56080 {&hf_ieee80211_htc_he,
56081 {"HE", "wlan.htc.he",
56082 FT_BOOLEAN, 32, NULL((void*)0), HTC_HE0x00000002,
56083 "High Efficiency Control HE flag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56084
56085 {&hf_ieee80211_htc_he_ctrl_id,
56086 {"Control ID", "wlan.htc.he.a_control.ctrl_id",
56087 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56088
56089 {&hf_ieee80211_he_a_control_padding,
56090 {"Padding", "wlan.htc.he.a_control.padding",
56091 FT_UINT32, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56092
56093 {&hf_ieee80211_he_trs_he_tb_ppdu_len,
56094 {"HE TB PPDU Length", "wlan.htc.he.a_control.umrs.he_tb_ppdu_len",
56095 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56096
56097 {&hf_ieee80211_he_trs_ru_allocation,
56098 {"RU Allocation", "wlan.htc.he.a_control.umrs.ru_allocation",
56099 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00001fe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56100
56101 {&hf_ieee80211_he_dl_tx_power,
56102 {"DL Tx Power", "wlan.htc.he.a_control.umrs.dl_tx_power",
56103 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003e000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56104
56105 {&hf_ieee80211_he_ul_target_rssi,
56106 {"UL Target RSSI", "wlan.htc.he.a_control.umrs.ul_target_rssi",
56107 FT_UINT32, BASE_CUSTOM, CF_FUNC(ul_target_rssi_base_custom)((const void *) (size_t) (ul_target_rssi_base_custom)),
56108 0x007c0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56109
56110 {&hf_ieee80211_he_ul_mcs,
56111 {"UL MCS", "wlan.htc.he.a_control.umrs.ul_mcs",
56112 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56113
56114 {&hf_ieee80211_he_ul_reserved,
56115 {"reserved", "wlan.htc.he.a_control.umrs.reserved",
56116 FT_UINT32, BASE_HEX, NULL((void*)0), 0x02000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56117
56118 {&hf_ieee80211_he_om_rx_nss,
56119 {"Rx NSS", "wlan.htc.he.a_control.om.rx_nss",
56120 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56121
56122 {&hf_ieee80211_he_om_channel_width,
56123 {"Channel Width", "wlan.htc.he.a_control.om.channel_width",
56124 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000018, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56125
56126 {&hf_ieee80211_he_om_ul_mu_disable,
56127 {"UL MU Disable", "wlan.htc.he.a_control.om.ul_mu_disable",
56128 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56129
56130 {&hf_ieee80211_he_om_tx_nsts,
56131 {"Tx NSTS", "wlan.htc.he.a_control.om.tx_nsts",
56132 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000001c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56133
56134 {&hf_ieee80211_he_om_er_su_disable,
56135 {"ER SU Disable", "wlan.htc.he.a_control.om.er_su_disable",
56136 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56137
56138 {&hf_ieee80211_he_om_dl_mu_mimo_resound,
56139 {"DL MU-MIMO Resound Recommendation",
56140 "wlan.htc.he.a_control.om.dl_mu_mimo_resound_recommendation",
56141 FT_BOOLEAN, 32, NULL((void*)0), 0x00000400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56142
56143 {&hf_ieee80211_he_om_ul_mu_data_disable,
56144 {"UL MU Data Disable", "wlan.htc.he.a_control.om.ul_mu_data_disable",
56145 FT_BOOLEAN, 32, NULL((void*)0), 0x00000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56146
56147 {&hf_ieee80211_he_hla_unsolicited_mfb,
56148 {"Unsolicited MFB", "wlan.htc.he.a_control.hla.unsolicited_mfb",
56149 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56150
56151 {&hf_ieee80211_he_hla_mrq,
56152 {"MRQ", "wlan.htc.he.a_control.hla.mrq",
56153 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56154
56155 {&hf_ieee80211_he_hla_nss,
56156 {"NSS", "wlan.htc.he.a_control.hla.NSS",
56157 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001c, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56158
56159 {&hf_ieee80211_he_hla_he_mcs,
56160 {"HE-MCS", "wlan.htc.he.a_control.hla.he_mcs",
56161 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000001e0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56162
56163 {&hf_ieee80211_he_hla_dcm,
56164 {"DCM", "wlan.htc.he.a_control.hla.dcm",
56165 FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56166
56167 {&hf_ieee80211_he_hla_ru,
56168 {"RU", "wlan.htc.he.a_control.hla.ru",
56169 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0003fc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56170
56171 {&hf_ieee80211_he_hla_bw,
56172 {"BW", "wlan.htc.he.a_control.hla.bw",
56173 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000c0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56174
56175 {&hf_ieee80211_he_hla_msi_ppdu_type,
56176 {"MSI/PPDU Type", "wlan.htc.he.a_control.hla.msi_ppdu_type",
56177 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00700000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56178
56179 {&hf_ieee80211_he_hla_tx_bf,
56180 {"Tx BF", "wlan.htc.he.a_control.hla.tx_bf",
56181 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) }},
56182
56183 {&hf_ieee80211_he_hla_reserved,
56184 {"Reserved", "wlan.htc.he.a_control.hla.reserved",
56185 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56186
56187 {&hf_ieee80211_he_bsr_aci_bitmap,
56188 {"ACI Bitmap", "wlan.htc.he.a_control.bsr.aci_bitmap",
56189 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56190
56191 {&hf_ieee80211_he_bsr_delta_tid,
56192 {"Delta TID", "wlan.htc.he.a_control.bsr.delta_tid",
56193 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56194
56195 {&hf_ieee80211_he_bsr_aci_high,
56196 {"ACI High", "wlan.htc.he.a_control.bsr.aci_high",
56197 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56198
56199 {&hf_ieee80211_he_bsr_scaling_factor,
56200 {"Scaling Factor", "wlan.htc.he.a_control.bsr.scaling_factor",
56201 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56202
56203 {&hf_ieee80211_he_bsr_queue_size_high,
56204 {"Queue Size High", "wlan.htc.he.a_control.bsr.queue_size_high",
56205 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003fc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56206
56207 {&hf_ieee80211_he_bsr_queue_size_all,
56208 {"Queue Size All", "wlan.htc.he.a_control.bsr.queue_size_all",
56209 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03fc0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56210
56211 {&hf_ieee80211_he_uph_ul_power_headroom,
56212 {"UL Power Headroom", "wlan.htc.he.a_control.uph.ul_power_headroom",
56213 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56214
56215 {&hf_ieee80211_he_uph_ul_min_transmit_power_flag,
56216 {"Minimum Transmit Power Flag", "wlan.htc.he.a_control.uph.min_transmit_power_flag",
56217 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56218
56219 {&hf_ieee80211_he_uph_reserved,
56220 {"Reserved", "wlan.htc.he.a_control.uph.reserved",
56221 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56222
56223 {&hf_ieee80211_he_btc_avail_chan,
56224 {"Available Channel Bitmap", "wlan.htc.he.a_control.bqr.avail_chan_bitmap",
56225 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56226
56227 {&hf_ieee80211_he_btc_reserved,
56228 {"Reserved", "wlan.htc.he.a_control.bqr.reserved",
56229 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56230
56231 {&hf_ieee80211_he_cci_ac_constraint,
56232 {"AC Constraint", "wlan.htc.he.a_control.cci.ac_constraint",
56233 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56234
56235 {&hf_ieee80211_he_cci_rdg_more_ppdu,
56236 {"RDG/More PPDU", "wlan.htc.he.a_control.cci.rdg_more_ppdu",
56237 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56238
56239 {&hf_ieee80211_he_cci_sr_ppdu_indic,
56240 {"PSRT PPDU", "wlan.htc.he.a_control.cci.sr_ppdu_indic",
56241 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56242
56243 {&hf_ieee80211_he_cci_reserved,
56244 {"Reserved", "wlan.htc.he.a_control.cci.reserved",
56245 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56246
56247 {&hf_ieee80211_he_eht_om_rx_nss_ext,
56248 {"Rx NSS Extension", "wlan.htc.he.a_control.eht_om.rx_nss_ext",
56249 FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56250
56251 {&hf_ieee80211_he_eht_om_chan_w_ext,
56252 {"Channel Width Extension", "wlan.htc.he.a_control.eht_om.chan_w_ext",
56253 FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56254
56255 {&hf_ieee80211_he_eht_om_tx_nsts_ext,
56256 {"Tx NSTS Extension", "wlan.htc.he.a_control.eht_om.tx_nsts_ext",
56257 FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56258
56259 {&hf_ieee80211_he_eht_om_reserved,
56260 {"Reserved", "wlan.htc.he.a_control.eht_om.reserved",
56261 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56262
56263 {&hf_ieee80211_he_srs_ppdu_resp_dur,
56264 {"PPDU Response Duration", "wlan.htc.he.a_control.srs.ppdu_resp_dur",
56265 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000000FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56266
56267 {&hf_ieee80211_he_srs_reserved,
56268 {"Reserved", "wlan.htc.he.a_control.srs.reserved",
56269 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56270
56271 {&hf_ieee80211_he_aar_assisted_ap_bitmap,
56272 {"Assisted AP Link ID Bitmap",
56273 "wlan.htc.he.a_control.aar.assisted_ap_link_id_bitmap",
56274 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56275
56276 {&hf_ieee80211_he_aar_reserved,
56277 {"Reserved", "wlan.htc.he.a_control.aar.reserved",
56278 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56279
56280 {&hf_ieee80211_he_a_control_ones,
56281 {"Padding", "wlan.htc.he.a_control.ones",
56282 FT_UINT32, BASE_HEX, NULL((void*)0), 0x03ffffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56283
56284 {&hf_ieee80211_he_trigger_common_info,
56285 {"HE Trigger Common Info", "wlan.trigger.he.common_info",
56286 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56287
56288 {&hf_ieee80211_he_trigger_type,
56289 {"Trigger Type", "wlan.trigger.he.trigger_type",
56290 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
56291 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56292
56293 {&hf_ieee80211_he_trigger_ul_length,
56294 {"UL Length", "wlan.trigger.he.ul_length",
56295 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56296
56297 {&hf_ieee80211_he_trigger_more_tf,
56298 {"More TF", "wlan.trigger.he.more_tf",
56299 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56300
56301 {&hf_ieee80211_he_trigger_cs_required,
56302 {"CS Required", "wlan.trigger.he.cs_required",
56303 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56304
56305 {&hf_ieee80211_he_trigger_ul_bw,
56306 {"UL BW", "wlan.trigger.he.ul_bw",
56307 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) }},
56308
56309 {&hf_ieee80211_he_trigger_gi_and_ltf_type,
56310 {"GI And LTF Type", "wlan.trigger.he.gi_and_ltf_type",
56311 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,
56312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56313
56314 {&hf_ieee80211_he_trigger_mu_mimo_ltf_mode,
56315 {"MU-MIMO LTF Mode", "wlan.trigger.he.mu_mimo_ltf_mode",
56316 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) }},
56317
56318 {&hf_ieee80211_he_trigger_num_he_ltf_syms_etc,
56319 {"Number of HE-LTF Symbols and Midamble Periodicity",
56320 "wlan.trigger.he.num_he_ltf_syms_and_midamble_per",
56321 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56322
56323 {&hf_ieee80211_he_trigger_ul_stbc,
56324 {"UL STBC", "wlan.trigger.he.ul_stbc",
56325 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56326
56327 {&hf_ieee80211_he_trigger_ldpc_extra_sym_seg,
56328 {"LDPC Extra Symbol Segment", "wlan.trigger.he.ldpc_extra_symbol_segment",
56329 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56330
56331 {&hf_ieee80211_he_trigger_ap_tx_power,
56332 {"AP Tx Power", "wlan.trigger.he.ap_tx_power",
56333 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
56334 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56335
56336 {&hf_ieee80211_he_trigger_pre_fec_padding_factor,
56337 {"Pre-FEC Padding Factor",
56338 "wlan.trigger.he.ul_packet_extension.pre_fec_padding_factor",
56339 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400,
56340 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
56341 0x0000000C00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56342
56343 {&hf_ieee80211_he_trigger_pe_disambiguity,
56344 {"PE Disambiguity",
56345 "wlan.trigger.he.ul_packet_extension.pe_disambiguity",
56346 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
56347 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56348
56349 {&hf_ieee80211_he_trigger_ul_spatial_reuse,
56350 {"UL Spatial Reuse", "wlan.trigger.he.ul_spatial_reuse",
56351 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56352
56353 {&hf_ieee80211_he_trigger_ul_he_sig_a_reserved,
56354 {"UL HE-SIG-A2 Reserved", "wlan.trigger.he.ul_he_sig_a2_reserved",
56355 FT_UINT64, BASE_HEX, NULL((void*)0), 0x7FC0000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56356
56357 {&hf_ieee80211_he_trigger_doppler,
56358 {"Doppler", "wlan.trigger.he.doppler",
56359 FT_BOOLEAN, 64, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56360
56361 {&hf_ieee80211_he_trigger_reserved,
56362 {"Reserved", "wlan.trigger.he.reserved",
56363 FT_UINT64, BASE_HEX, NULL((void*)0), 0x8000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56364
56365 {&hf_ieee80211_he_trigger_bar_ctrl,
56366 {"BAR Control", "wlan.trigger.he.common_info.bar_ctrl",
56367 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56368
56369 {&hf_ieee80211_he_trigger_bar_ctrl_ba_ack_policy,
56370 {"BA Ack Policy", "wlan.trigger.he.common_info.bar_ctrl.ba_ack_policy",
56371 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,
56372 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56373
56374 {&hf_ieee80211_he_trigger_bar_ctrl_ba_type,
56375 {"BA Type", "wlan.trigger.he.common_info.bar_ctrl.ba_type",
56376 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) }},
56377
56378 {&hf_ieee80211_he_trigger_bar_ctrl_reserved,
56379 {"Reserved", "wlan.trigger.he.common_info.bar_ctrl.reserved",
56380 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0FE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56381
56382 {&hf_ieee80211_he_trigger_bar_ctrl_tid_info,
56383 {"TID_INFO", "wlan.trigger.he.common_info.bar_ctrl.tid_info",
56384 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56385
56386 {&hf_ieee80211_he_trigger_bar_info,
56387 {"BAR Information", "wlan.trigger.he.common_info.bar_info",
56388 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56389
56390 {&hf_ieee80211_he_trigger_bar_info_blk_ack_seq_ctrl,
56391 {"Block Ack Starting Sequence Control",
56392 "wlan.trigger.he.common_info.bar_info.blk_ack_starting_seq_ctrl",
56393 FT_UINT16, BASE_HEX, NULL((void*)0), 0xffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56394
56395 {&hf_ieee80211_he_trigger_user_info,
56396 {"User Info", "wlan.trigger.he.user_info",
56397 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56398
56399 {&hf_ieee80211_he_trigger_user_info_padding_start,
56400 {"Start of Padding", "wlan.trigger.he.user_info.start_of_padding",
56401 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56402
56403 {&hf_ieee80211_he_trigger_padding,
56404 {"Padding", "wlan.trigger.he.padding",
56405 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56406
56407 {&hf_ieee80211_he_trigger_mpdu_mu_spacing,
56408 {"MPDU MU Spacing Factor", "wlan.trigger.he.mpdu_mu_spacing_factor",
56409 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56410
56411 {&hf_ieee80211_he_trigger_tid_aggregation_limit,
56412 {"TID Aggregation Limit", "wlan.trigger.he.tid_aggregation_limit",
56413 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56414
56415 {&hf_ieee80211_he_trigger_dependent_reserved1,
56416 {"Reserved", "wlan.trigger.he.reserved1",
56417 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56418
56419 {&hf_ieee80211_he_trigger_preferred_ac,
56420 {"Preferred AC", "wlan.trigger.he.preferred_ac",
56421 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) }},
56422
56423 {&hf_ieee80211_he_trigger_dep_basic_user_info,
56424 {"Basic Trigger Dependent User Info", "wlan.trigger.he.basic_user_info",
56425 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56426
56427 {&hf_ieee80211_he_trigger_starting_aid,
56428 {"Starting AID", "wlan.trigger.he.starting_aid",
56429 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56430
56431 {&hf_ieee80211_he_trigger_dependent_reserved2,
56432 {"Reserved", "wlan.trigger.he.reserved2",
56433 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001FF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56434
56435 {&hf_ieee80211_he_trigger_feedback_type,
56436 {"Feedback Type", "wlan.trigger.he.feedback_type",
56437 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56438
56439 {&hf_ieee80211_he_trigger_dependent_reserved3,
56440 {"Reserved", "wlan.trigger.he.reserved3",
56441 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00FE000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56442
56443 {&hf_ieee80211_he_trigger_nfrp_target_rssi,
56444 {"Target RSSI", "wlan.trigger.he.target_rssi",
56445 FT_UINT40, BASE_CUSTOM, CF_FUNC(target_rssi_base_custom)((const void *) (size_t) (target_rssi_base_custom)), 0x7F00000000,
56446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56447
56448 {&hf_ieee80211_he_trigger_multiplexing_flag,
56449 {"Multiplexing Flag", "wlan.trigger.he.multiplexing_flag",
56450 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56451
56452 {&hf_ieee80211_he_trigger_dep_nfrp_user_info,
56453 {"NFRP Trigger Dependent User Unfo", "wlan.trigger.he.nfrp_user_info",
56454 FT_UINT40, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56455
56456 {&hf_ieee80211_he_trigger_feedback_seg_retrans_bm,
56457 {"Feedback Segment Retransmission Bitmap", "wlan.trigger.he.feedback_bm",
56458 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56459
56460 {&hf_ieee80211_he_trigger_aid12,
56461 {"AID12", "wlan.trigger.he.user_info.aid12",
56462 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56463
56464 {&hf_ieee80211_he_trigger_ru_allocation_region,
56465 {"RU Allocation Region", "wlan.trigger.he.ru_allocation_region",
56466 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_ru_allocation_region_custom)((const void *) (size_t) (he_trigger_ru_allocation_region_custom
))
,
56467 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56468
56469 {&hf_ieee80211_he_trigger_ru_allocation,
56470 {"RU Allocation", "wlan.trigger.he.ru_allocation",
56471 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_ru_allocation_base_custom)((const void *) (size_t) (he_ru_allocation_base_custom)),
56472 0x00000FE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56473
56474 {&hf_ieee80211_he_trigger_ul_fec_coding_type,
56475 {"UL FEC Coding Type", "wlan.trigger.he.ul_fec_coding_type",
56476 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,
56477 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56478
56479 {&hf_ieee80211_he_trigger_ul_mcs,
56480 {"UL MCS", "wlan.trigger.he.ul_mcs",
56481 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56482
56483 {&hf_ieee80211_he_trigger_ul_dcm,
56484 {"UL DCM", "wlan.trigger.he.ul_dcm",
56485 FT_BOOLEAN, 40, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56486
56487 {&hf_ieee80211_he_trigger_ru_starting_spatial_stream,
56488 {"Starting Spatial Stream", "wlan.trigger.he.ru_starting_spatial_stream",
56489 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56490 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56491
56492 {&hf_ieee80211_he_trigger_ru_number_spatial_streams,
56493 {"Number Of Spatial Streams", "wlan.trigger.he.ru_number_of_spatial_stream",
56494 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56495 0x00E0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56496
56497 {&hf_ieee80211_he_trigger_ru_number_ra_ru,
56498 {"Number of RA-RU", "wlan.trigger.he.ru_number_of_ra_ru",
56499 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56500 0x007C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56501
56502 {&hf_ieee80211_he_trigger_ru_no_more_ra_ru,
56503 {"No More RA-RU", "wlan.trigger.he.ru_no_more_ra_ru",
56504 FT_BOOLEAN, 40, NULL((void*)0), 0x0080000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56505
56506 {&hf_ieee80211_he_trigger_ul_target_rssi,
56507 {"UL Target RSSI", "wlan.trigger.he.ul_target_rssi",
56508 FT_UINT40, BASE_CUSTOM, CF_FUNC(target_rssi_base_custom)((const void *) (size_t) (target_rssi_base_custom)), 0x7F00000000,
56509 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56510
56511 {&hf_ieee80211_he_trigger_user_reserved,
56512 {"Reserved", "wlan.trigger.he.user_reserved",
56513 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56514
56515 {&hf_ieee80211_he_trigger_ranging_common_info_1,
56516 {"Ranging Common Info", "wlan.trigger.he.ranging.common_info",
56517 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56518
56519 {&hf_ieee80211_he_trigger_ranging_common_info_2,
56520 {"Ranging Common Info", "wlan.trigger.he.ranging.common_info",
56521 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56522
56523 {&hf_ieee80211_eht_trigger_common_info,
56524 {"EHT Trigger Common Info", "wlan.trigger.eht.common_info",
56525 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56526
56527 {&hf_ieee80211_eht_trigger_type,
56528 {"Trigger Type", "wlan.trigger.eht.trigger_type",
56529 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
56530 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56531
56532 {&hf_ieee80211_eht_trigger_ul_length,
56533 {"UL Length", "wlan.trigger.eht.ul_length",
56534 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56535
56536 {&hf_ieee80211_eht_trigger_more_tf,
56537 {"More TF", "wlan.trigger.eht.more_tf",
56538 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56539
56540 {&hf_ieee80211_eht_trigger_cs_required,
56541 {"CS Required", "wlan.trigger.eht.cs_required",
56542 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56543
56544 {&hf_ieee80211_eht_trigger_ul_bw,
56545 {"UL BW", "wlan.trigger.eht.ul_bw",
56546 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(bw_subfield_vals)((0 ? (const struct _val64_string*)0 : ((bw_subfield_vals)))),
56547 0x00000000000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56548
56549 {&hf_ieee80211_eht_trigger_gi_and_eht_ltf_type,
56550 {"GI And HE/EHT-LTF Type/Triggered TXOP Sharing Mode",
56551 "wlan.trigger.eht.gi_and_he_eht_ltf_type_triggered_txop_sharing_mode",
56552 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000300000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56553
56554 {&hf_ieee80211_eht_trigger_reserved2,
56555 {"Reserved", "wlan.trigger.eht.reserved2",
56556 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56557
56558 {&hf_ieee80211_eht_trigger_num_he_eht_ltf_syms_etc,
56559 {"Number of HE/EHT-LTF Symbols",
56560 "wlan.trigger.eht.num_ltf_eht_ltf_symbols",
56561 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56562
56563 {&hf_ieee80211_eht_trigger_reserved3,
56564 {"Reserved", "wlan.trigger.eht.reserved3",
56565 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56566
56567 {&hf_ieee80211_eht_trigger_ldpc_extra_sym_seg,
56568 {"LDPC Extra Symbol Segment", "wlan.trigger.eht.ldpc_extra_symbol_segment",
56569 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56570
56571 {&hf_ieee80211_eht_trigger_ap_tx_power,
56572 {"AP Tx Power", "wlan.trigger.eht.ap_tx_power",
56573 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
56574 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56575
56576 {&hf_ieee80211_eht_trigger_pre_fec_padding_factor,
56577 {"Pre-FEC Padding Factor",
56578 "wlan.trigger.eht.ul_packet_extension.pre_fec_padding_factor",
56579 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400,
56580 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
56581 0x0000000c00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56582
56583 {&hf_ieee80211_eht_trigger_pe_disambiguity,
56584 {"PE Disambiguity",
56585 "wlan.trigger.eht.ul_packet_extension.pe_disambiguity",
56586 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
56587 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56588
56589 {&hf_ieee80211_eht_trigger_ul_spatial_reuse,
56590 {"Spatial Reuse", "wlan.trigger.eht.spatial_reuse",
56591 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56592
56593 {&hf_ieee80211_eht_trigger_reserved4,
56594 {"Reserved", "wlan.trigger.eht.reserved4",
56595 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56596
56597 {&hf_ieee80211_eht_trigger_he_eht_p160,
56598 {"HE/EHT P160", "wlan.trigger.eht.he_eht_p160",
56599 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0040000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56600
56601 {&hf_ieee80211_eht_trigger_special_user_info_flag,
56602 {"Special User Info Field Flag",
56603 "wlan.trigger.eht.special_user_info_flag",
56604 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0080000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56605
56606 {&hf_ieee80211_eht_trigger_eht_reserved,
56607 {"EHT Reserved", "wlan.trigger.eht.eht_reserved",
56608 FT_UINT64, BASE_HEX, NULL((void*)0), 0x7f00000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56609
56610 {&hf_ieee80211_eht_trigger_reserved,
56611 {"Reserved", "wlan.trigger.eht.reserved",
56612 FT_UINT64, BASE_HEX, NULL((void*)0), 0x8000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56613
56614 {&hf_ieee80211_eht_trigger_user_info,
56615 {"EHT User Info", "wlan.trigger.eht.user_info",
56616 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56617
56618 {&hf_ieee80211_eht_trigger_aid12,
56619 {"AID12", "wlan.trigger.eht.user_info.aid12",
56620 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56621
56622 {&hf_ieee80211_eht_trigger_ru_allocation_region,
56623 {"RU Allocation Region", "wlan.trigger.eht.user_info.ru_allocation_region",
56624 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56625
56626 {&hf_ieee80211_eht_trigger_ru_allocation,
56627 {"RU Allocation", "wlan.trigger.eht.user_info.ru_allocation",
56628 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) }},
56629
56630 {&hf_ieee80211_eht_trigger_ul_fec_coding_type,
56631 {"UL FEC Coding Type", "wlan.trigger.eht.user_info.ul_fec_coding_type",
56632 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56633
56634 {&hf_ieee80211_eht_trigger_ul_eht_mcs,
56635 {"UL EHT MCS", "wlan.trigger.eht.user_info.ul_eht_mcs",
56636 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56637
56638 {&hf_ieee80211_eht_trigger_user_info_reserved,
56639 {"Reserved", "wlan.trigger.eht.user_info.reserved",
56640 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56641
56642 {&hf_ieee80211_eht_trigger_ru_starting_spatial_stream,
56643 {"Starting Spatial Stream",
56644 "wlan.trigger.eht.user_info.ru_starting_spatial_stream",
56645 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56646 0x003C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56647
56648 {&hf_ieee80211_eht_trigger_ru_number_spatial_streams,
56649 {"Number Of Spatial Streams",
56650 "wlan.trigger.eht.user_info.ru_number_spatial_streams",
56651 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56652 0x00C0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56653
56654 {&hf_ieee80211_eht_trigger_ul_target_recv_power,
56655 {"UL Target Receive Power",
56656 "wlan.trigger.eht.user_info.ul_target_receive_power",
56657 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56658
56659 {&hf_ieee80211_eht_trigger_ps160,
56660 {"PS160", "wlan.trigger.eht.user_info.ps160",
56661 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56662
56663 {&hf_ieee80211_eht_trigger_special_user_info,
56664 {"Special User Info",
56665 "wlan.trigger.eht.special_user_info",
56666 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56667
56668 {&hf_ieee80211_eht_trigger_phy_version_identifier,
56669 {"Phy Version Identifier",
56670 "wlan.trigger.eht.user_info.phy_version_identifier",
56671 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56672
56673 {&hf_ieee80211_eht_trigger_ul_bw_extenstion,
56674 {"UL BW Extension", "wlan.trigger.eht.user_info.ul_bw_extension",
56675 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000018000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56676
56677 {&hf_ieee80211_eht_trigger_eht_spatial_reuse_1,
56678 {"EHT/UHR Spatial Reuse 1", "wlan.trigger.eht.user_info.eht_spatial_reuse_1",
56679 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56680
56681 {&hf_ieee80211_eht_trigger_eht_spatial_reuse_2,
56682 {"EHT/UHR Spatial Reuse 2", "wlan.trigger.eht.user_info.eht_spatial_reuse_2",
56683 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56684
56685 {&hf_ieee80211_eht_trigger_disregard_u_sig_1,
56686 {"Disregard In U-SIG-1",
56687 "wlan.trigger.eht.user_info.disregard_u_sig_1",
56688 FT_UINT40, BASE_HEX, NULL((void*)0), 0x007E000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56689
56690 {&hf_ieee80211_eht_trigger_validate_u_sig_2,
56691 {"Validate In U-SIG-2",
56692 "wlan.trigger.eht.user_info.validate_u_sig_2",
56693 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0080000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56694
56695 {&hf_ieee80211_eht_trigger_disregard_u_sig_2_4lsb,
56696 {"four LSBs of Disregard In U-SIG-2",
56697 "wlan.trigger.eht.user_info.disregard_u_sig_2_4lsb",
56698 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56699
56700 {&hf_ieee80211_eht_trigger_disregard_u_sig_2_msb,
56701 {"MSB of Disregard In U-SIG-2",
56702 "wlan.trigger.eht.user_info.disregard_u_sig_2_msb",
56703 FT_UINT40, BASE_HEX, NULL((void*)0), 0x1000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56704
56705 {&hf_ieee80211_eht_trigger_special_reserved,
56706 {"Reserved", "wlan.trigger.eht.user_info.special_reserved",
56707 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56708
56709 { &hf_ieee80211_uhr_trigger_common_info,
56710 {"UHR Trigger Common Info", "wlan.trigger.uhr.common_info",
56711 FT_UINT64, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56712
56713 { &hf_ieee80211_uhr_trigger_type,
56714 {"Trigger Type", "wlan.trigger.uhr.trigger_type",
56715 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(trigger_type_vals)((0 ? (const struct _val64_string*)0 : ((trigger_type_vals)))
)
,
56716 0x000000000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56717
56718 { &hf_ieee80211_uhr_trigger_ul_length,
56719 {"UL Length", "wlan.trigger.uhr.ul_length",
56720 FT_UINT64, BASE_DEC, NULL((void*)0), 0x000000000000FFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56721
56722 { &hf_ieee80211_uhr_trigger_more_tf,
56723 {"More TF", "wlan.trigger.uhr.more_tf",
56724 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56725
56726 { &hf_ieee80211_uhr_trigger_cs_required,
56727 {"CS Required", "wlan.trigger.uhr.cs_required",
56728 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56729
56730 { &hf_ieee80211_uhr_trigger_ul_bw,
56731 {"UL BW", "wlan.trigger.uhr.ul_bw",
56732 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400, VALS64(bw_subfield_vals)((0 ? (const struct _val64_string*)0 : ((bw_subfield_vals)))),
56733 0x00000000000C0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56734
56735 { &hf_ieee80211_uhr_trigger_gi_and_he_uhr_ltf_type,
56736 {"GI And HE/UHR-LTF Type/Triggered TXOP Sharing Mode",
56737 "wlan.trigger.uhr.gi_and_he_uhr_ltf_type_triggered_txop_sharing_mode",
56738 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000300000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56739
56740 { &hf_ieee80211_uhr_trigger_reserved2,
56741 {"Reserved", "wlan.trigger.uhr.reserved2",
56742 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000000400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56743
56744 { &hf_ieee80211_uhr_trigger_num_he_uhr_ltf_syms_etc,
56745 {"Number of HE/UHR-LTF Symbols",
56746 "wlan.trigger.uhr.num_he_uhr_ltf_symbols",
56747 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000003800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56748
56749 { &hf_ieee80211_uhr_trigger_reserved3,
56750 {"Reserved", "wlan.trigger.uhr.reserved3",
56751 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000000004000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56752
56753 { &hf_ieee80211_uhr_trigger_ldpc_extra_sym_seg,
56754 {"LDPC Extra Symbol Segment", "wlan.trigger.uhr.ldpc_extra_symbol_segment",
56755 FT_BOOLEAN, 64, NULL((void*)0), 0x0000000008000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56756
56757 { &hf_ieee80211_uhr_trigger_ap_tx_power,
56758 {"AP Tx Power", "wlan.trigger.uhr.ap_tx_power",
56759 FT_UINT64, BASE_CUSTOM, CF_FUNC(ap_tx_power_custom)((const void *) (size_t) (ap_tx_power_custom)),
56760 0x00000003F0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56761
56762 { &hf_ieee80211_uhr_trigger_pre_fec_padding_factor,
56763 {"Pre-FEC Padding Factor",
56764 "wlan.trigger.uhr.ul_packet_extension.pre_fec_padding_factor",
56765 FT_UINT64, BASE_DEC | BASE_VAL64_STRING0x00000400,
56766 VALS64(pre_fec_padding_factor_vals)((0 ? (const struct _val64_string*)0 : ((pre_fec_padding_factor_vals
))))
,
56767 0x0000000c00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56768
56769 { &hf_ieee80211_uhr_trigger_pe_disambiguity,
56770 {"PE Disambiguity",
56771 "wlan.trigger.uhr.ul_packet_extension.pe_disambiguity",
56772 FT_BOOLEAN, 64, TFS(&pe_disambiguity_tfs)((0 ? (const struct true_false_string*)0 : ((&pe_disambiguity_tfs
))))
,
56773 0x0000001000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56774
56775 { &hf_ieee80211_uhr_trigger_ul_spatial_reuse,
56776 {"Spatial Reuse", "wlan.trigger.uhr.spatial_reuse",
56777 FT_UINT64, BASE_HEX, NULL((void*)0), 0x001FFFE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56778
56779 { &hf_ieee80211_uhr_trigger_reserved4,
56780 {"Reserved", "wlan.trigger.uhr.reserved4",
56781 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0020000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56782
56783 { &hf_ieee80211_uhr_trigger_he_uhr_p160,
56784 {"HE/UHR P160", "wlan.trigger.uhr.he_uhr_p160",
56785 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0040000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56786
56787 { &hf_ieee80211_uhr_trigger_special_user_info_flag,
56788 {"Special User Info Field Flag",
56789 "wlan.trigger.uhr.special_user_info_flag",
56790 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0080000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56791
56792 { &hf_ieee80211_uhr_trigger_dru_rru,
56793 {"DRU/RRU Indication", "wlan.trigger.uhr.dru_rru",
56794 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0f00000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56795
56796 { &hf_ieee80211_uhr_trigger_ifcs,
56797 {"IFCS Present Flag", "wlan.trigger.uhr.ifcs",
56798 FT_UINT64, BASE_HEX, NULL((void*)0), 0x1000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56799
56800 { &hf_ieee80211_uhr_trigger_uhr_reserved,
56801 {"UHR Reserved", "wlan.trigger.uhr.uhr_reserved",
56802 FT_UINT64, BASE_HEX, NULL((void*)0), 0x2000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56803
56804 { &hf_ieee80211_uhr_trigger_reserved,
56805 {"Reserved", "wlan.trigger.uhr.reserved",
56806 FT_UINT64, BASE_HEX, NULL((void*)0), 0x4000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56807
56808 { &hf_ieee80211_uhr_trigger_user_info,
56809 {"UHR User Info", "wlan.trigger.uhr.user_info",
56810 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56811
56812 { &hf_ieee80211_uhr_trigger_aid12,
56813 {"AID12", "wlan.trigger.uhr.user_info.aid12",
56814 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000FFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56815
56816 { &hf_ieee80211_uhr_trigger_ru_allocation_region,
56817 {"RU Allocation Region", "wlan.trigger.uhr.user_info.ru_allocation_region",
56818 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56819
56820 { &hf_ieee80211_uhr_trigger_ru_allocation,
56821 {"RU Allocation", "wlan.trigger.uhr.user_info.ru_allocation",
56822 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000FE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56823
56824 { &hf_ieee80211_uhr_trigger_ul_fec_coding_type,
56825 {"UL FEC Coding Type", "wlan.trigger.uhr.user_info.ul_fec_coding_type",
56826 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56827
56828 { &hf_ieee80211_uhr_trigger_ul_uhr_mcs,
56829 {"UL UHR MCS", "wlan.trigger.uhr.user_info.ul_uhr_mcs",
56830 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56831
56832 { &hf_ieee80211_uhr_trigger_2xldpc,
56833 {"2xLDPC", "wlan.trigger.uhr.user_info.2xldpc",
56834 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56835
56836 { &hf_ieee80211_uhr_trigger_ru_starting_spatial_stream,
56837 {"Starting Spatial Stream",
56838 "wlan.trigger.uhr.user_info.ru_starting_spatial_stream",
56839 FT_UINT40, BASE_DEC, NULL((void*)0),
56840 0x003C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56841
56842 { &hf_ieee80211_uhr_trigger_dru_distribution_bw,
56843 {"DRU Distribution BW",
56844 "wlan.trigger.uhr.user_info.dru_distribution_bw",
56845 FT_UINT40, BASE_DEC, NULL((void*)0),
56846 0x000C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56847
56848 { &hf_ieee80211_uhr_trigger_dru_reserved,
56849 {"DRU reserved",
56850 "wlan.trigger.uhr.user_info.dru_reserved",
56851 FT_UINT40, BASE_DEC, NULL((void*)0),
56852 0x0030000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56853
56854 { &hf_ieee80211_uhr_trigger_ru_number_spatial_streams,
56855 {"Number Of Spatial Streams",
56856 "wlan.trigger.uhr.user_info.ru_number_spatial_streams",
56857 FT_UINT40, BASE_DEC, NULL((void*)0),
56858 0x00C0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56859
56860 { &hf_ieee80211_uhr_trigger_ul_target_recv_power,
56861 {"UL Target Receive Power",
56862 "wlan.trigger.uhr.user_info.ul_target_receive_power",
56863 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7F00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56864
56865 { &hf_ieee80211_uhr_trigger_ps160,
56866 {"PS160", "wlan.trigger.uhr.user_info.ps160",
56867 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
56868
56869 {&hf_ieee80211_ranging_trigger_subtype1,
56870 {"Ranging Trigger Subtype",
56871 "wlan.trigger.he.ranging.ranging_trigger_subtype",
56872 FT_UINT8, BASE_RANGE_STRING0x00000100|BASE_HEX, RVALS(ranging_trigger_subtype_vals)((0 ? (const struct _range_string*)0 : ((ranging_trigger_subtype_vals
))))
,
56873 0x0f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56874
56875 {&hf_ieee80211_ranging_trigger_reserved1,
56876 {"Reserved", "wlan.trigger.he.ranging.reserved",
56877 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56878
56879 {&hf_ieee80211_ranging_trigger_token,
56880 {"Token", "wlan.trigger.he.ranging.token",
56881 FT_UINT8, BASE_HEX, NULL((void*)0), 0xe0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56882
56883 {&hf_ieee80211_ranging_trigger_subtype2,
56884 {"Ranging Trigger Subtype",
56885 "wlan.trigger.he.ranging.ranging_trigger_subtype",
56886 FT_UINT16, BASE_RANGE_STRING0x00000100|BASE_HEX,
56887 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) }},
56888
56889 {&hf_ieee80211_ranging_trigger_reserved2,
56890 {"Reserved", "wlan.trigger.he.ranging.reserved2",
56891 FT_UINT16, BASE_HEX, NULL((void*)0), 0x03f0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56892
56893 {&hf_ieee80211_ranging_trigger_sounding_dialog_token,
56894 {"Sounding Dialog Token Number",
56895 "wlan.trigger.he.ranging.sounding_dialog_token",
56896 FT_UINT16, BASE_HEX, NULL((void*)0), 0xfc00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56897
56898 {&hf_ieee80211_he_trigger_ranging_trigger_poll_rpt,
56899 {"Ranging Trigger Poll/Rpt", "wlan.trigger.he.ranging.poll_rpt",
56900 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56901
56902 {&hf_ieee80211_ranging_pol_rpt_aid12_rsid12,
56903 {"AID12/RSID12", "wlan.trigger.he.ranging.poll_rpt.aid12_rsid12",
56904 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56905
56906 {&hf_ieee80211_ranging_pol_rpt_ru_alloc_region,
56907 {"RU Allocation Region", "wlan.trigger.he.ranging.poll_rpt.ru_allocation_region",
56908 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_ru_allocation_region_custom)((const void *) (size_t) (he_trigger_ru_allocation_region_custom
))
,
56909 0x0000001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56910
56911 {&hf_ieee80211_ranging_pol_rpt_ru_alloc,
56912 {"RU Allocation", "wlan.trigger.he.ranging.poll_rpt.ru_allocation",
56913 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) }},
56914
56915 {&hf_ieee80211_ranging_pol_rpt_ul_fec_coding_type,
56916 {"UL FEC Coding Type",
56917 "wlan.trigger.he.ranging.poll_rpt.ul_fec_coding_type",
56918 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) }},
56919
56920 {&hf_ieee80211_ranging_pol_rpt_ulmcs,
56921 {"UL MCS", "wlan.trigger.he.ranging.poll_rpt.ul_mcs",
56922 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0001e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56923
56924 {&hf_ieee80211_ranging_pol_rpt_uldcm,
56925 {"UL DCM", "wlan.trigger.he.ranging.poll_rpt.ul_dcm",
56926 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56927
56928 {&hf_ieee80211_ranging_pol_rpt_starting_spatial_stream,
56929 {"Starting Spatial Stream",
56930 "wlan.trigger.he.ranging.poll_rpt.starting_spatial_stream",
56931 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56932 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56933
56934 {&hf_ieee80211_ranging_pol_rpt_number_spatial_streams,
56935 {"Number Of Spatial Streams",
56936 "wlan.trigger.he.ranging.poll_rpt.number_spatial_streams",
56937 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56938 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56939
56940 {&hf_ieee80211_ranging_pol_rpt_ul_target_rssi,
56941 {"UL Target RSSI", "wlan.trigger.he.ranging.poll_rpt.ul_target_rssi",
56942 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) }},
56943
56944 {&hf_ieee80211_ranging_pol_rpt_reserved,
56945 {"Reserved", "wlan.trigger.he.ranging.poll_rpt.reserved",
56946 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56947
56948 {&hf_ieee80211_he_trigger_ranging_trigger_sounding,
56949 {"Ranging Trigger Sounding", "wlan.trigger.he.ranging.sounding",
56950 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56951
56952 {&hf_ieee80211_ranging_sounding_aid12_rsid12,
56953 {"AID12/RSID12", "wlan.trigger.he.ranging.sounding.aid12_rsid12",
56954 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56955
56956 {&hf_ieee80211_ranging_sounding_reserved1,
56957 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved1",
56958 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56959
56960 {&hf_ieee80211_ranging_sounding_i2r_rep,
56961 {"I2R Rep", "wlan.trigger.he.ranging.sounding.i2r_rep",
56962 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56963
56964 {&hf_ieee80211_ranging_sounding_reserved2,
56965 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved2",
56966 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0003000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56967
56968 {&hf_ieee80211_ranging_sounding_starting_spatial_stream,
56969 {"Starting Spatial Stream",
56970 "wlan.trigger.he.ranging.sounding.starting_spatial_stream",
56971 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56972 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56973
56974 {&hf_ieee80211_ranging_sounding_number_spatial_streams,
56975 {"Number of Spatial Streams",
56976 "wlan.trigger.he.ranging.sounding.number_spatial_streams",
56977 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
56978 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56979
56980 {&hf_ieee80211_ranging_sounding_ul_target_rssi,
56981 {"UL Target RSSI", "wlan.trigger.he.ranging.sounding.ul_target_rssi",
56982 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) }},
56983
56984 {&hf_ieee80211_ranging_sounding_reserved3,
56985 {"Reserved", "wlan.trigger.he.ranging.sounding.reserved3",
56986 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56987
56988 {&hf_ieee80211_he_trigger_ranging_trigger_sec_sound,
56989 {"Secured Sounding", "wlan.trigger.he.ranging.secured_sounding",
56990 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56991
56992 {&hf_ieee80211_ranging_sec_sound_aid12_rsid12,
56993 {"AID12/RSID12", "wlan.trigger.he.ranging.secured_sounding.aid12_rsid12",
56994 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000000fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56995
56996 {&hf_ieee80211_ranging_sec_sound_reserved1,
56997 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved1",
56998 FT_UINT40, BASE_HEX, NULL((void*)0), 0x00001ff000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
56999
57000 {&hf_ieee80211_ranging_sec_sound_i2r_rep,
57001 {"I2R Rep", "wlan.trigger.he.ranging.secured_sounding.i2r_rep",
57002 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0000e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57003
57004 {&hf_ieee80211_ranging_sec_sound_reserved2,
57005 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved2",
57006 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0003000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57007
57008 {&hf_ieee80211_ranging_sec_sound_starting_spatial_stream,
57009 {"Starting Spatial Stream",
57010 "wlan.trigger.he.ranging.secured_sounding.starting_spatial_stream",
57011 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
57012 0x001c000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57013
57014 {&hf_ieee80211_ranging_sec_sound_number_spatial_streams,
57015 {"Number of Spatial Streams",
57016 "wlan.trigger.he.ranging.secured_sounding.number_spatial_streams",
57017 FT_UINT40, BASE_CUSTOM, CF_FUNC(he_trigger_minus_one_custom)((const void *) (size_t) (he_trigger_minus_one_custom)),
57018 0x00e0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57019
57020 {&hf_ieee80211_ranging_sec_sound_ul_target_rssi,
57021 {"UL Target RSSI",
57022 "wlan.trigger.he.ranging.secured_sounding.ul_target_rssi",
57023 FT_UINT40, BASE_HEX, NULL((void*)0), 0x7f00000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57024
57025 {&hf_ieee80211_ranging_sec_sound_reserved3,
57026 {"Reserved", "wlan.trigger.he.ranging.secured_sounding.reserved3",
57027 FT_UINT40, BASE_HEX, NULL((void*)0), 0x8000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57028
57029 {&hf_ieee80211_he_trigger_ranging_user_info_sac,
57030 {"SAC", "wlan.trigger.he.ranging.user_info.sac",
57031 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57032
57033 {&hf_ieee80211_he_qtp_control,
57034 {"Control", "wlan.ext_tag.quiet_time_period.control",
57035 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,
57036 "Type of Quiet Time Period Element", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57037
57038 {&hf_ieee80211_he_qtp_setup_quiet_period_duration,
57039 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.setup.duration",
57040 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57041 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57042
57043 {&hf_ieee80211_he_qtp_setup_srv_specific_identif,
57044 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.setup.srv_specific_identif",
57045 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57046 "Service Specific peer-to-peer operation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57047
57048 {&hf_ieee80211_he_qtp_request_dialog_token,
57049 {"Dialog Token", "wlan.ext_tag.quiet_time_period.request.dialog_token",
57050 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57051 "Quiet Time Periods Response suptype to which request subtype corresponds",
57052 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57053
57054 {&hf_ieee80211_he_qtp_request_quiet_period_offset,
57055 {"Quiet Period Offset", "wlan.ext_tag.quiet_time_period.request.offset",
57056 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57057 "Offset of the first quiet period from the TBTT in TUs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57058
57059 {&hf_ieee80211_he_qtp_request_quiet_period_duration,
57060 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.request.duration",
57061 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57062 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57063
57064 {&hf_ieee80211_he_qtp_request_quiet_period_interval,
57065 {"Quiet Period Interval", "wlan.ext_tag.quiet_time_period.request.interval",
57066 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57067 "Interval between the start of two consecutive quite time periods, in TUs",
57068 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57069
57070 {&hf_ieee80211_he_qtp_request_repetition_count,
57071 {"Repetition Count", "wlan.ext_tag.quiet_time_period.request.repetition_count",
57072 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57073 "Number of requested quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57074
57075 {&hf_ieee80211_he_qtp_request_srv_specific_identif,
57076 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.request.srv_specific_identif",
57077 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57078 "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) } },
57079
57080 {&hf_ieee80211_he_qtp_response_dialog_token,
57081 {"Dialog Token", "wlan.ext_tag.quiet_time_period.response.dialog_token",
57082 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57083 "The quiet time period request subtype to which this response corresponds",
57084 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57085
57086 {&hf_ieee80211_he_qtp_response_status_code,
57087 {"Status Code", "wlan.ext_tag.quiet_time_period.response.status_code",
57088 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57089 "Status of the requested operation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57090
57091 {&hf_ieee80211_he_qtp_response_quiet_period_offset,
57092 {"Quiet Period Offset", "wlan.ext_tag.quiet_time_period.response.offset",
57093 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57094 "Offset of the start of the first quiet time period", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57095
57096 {&hf_ieee80211_he_qtp_response_quiet_period_duration,
57097 {"Quiet Period Duration", "wlan.ext_tag.quiet_time_period.response.duration",
57098 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57099 "Quiet Period Duration in units of 32us", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57100
57101 {&hf_ieee80211_he_qtp_response_quiet_period_interval,
57102 {"Quiet Period Interval", "wlan.ext_tag.quiet_time_period.response.interval",
57103 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57104 "Interval between the start of two consecutive quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57105
57106 {&hf_ieee80211_he_qtp_response_repetition_count,
57107 {"Repetition Count", "wlan.ext_tag.quiet_time_period.response.repetition_count",
57108 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57109 "Number of requested quiet time periods", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57110
57111 {&hf_ieee80211_he_qtp_response_srv_specific_identif,
57112 {"Service Specific Identifier", "wlan.ext_tag.quiet_time_period.response.srv_specific_identif",
57113 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57114 "Identifier of a peer-to-peer operation for which participating HE STAs might transmit frames",
57115 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
57116
57117 {&hf_ieee80211_he_ndp_annc_sta,
57118 {"STA Info", "wlan.he_ndp.sta_info",
57119 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57120
57121 {&hf_ieee80211_he_ndp_annc_aid11,
57122 {"AID11", "wlan.he_ndp.sta_info.aid11",
57123 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000007FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57124
57125 {&hf_ieee80211_he_ndp_annc_ru_start,
57126 {"RU Start Index", "wlan.he_ndp.sta_info.ru_start",
57127 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0003F800,
57128 "26-tone RU start index of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57129
57130 {&hf_ieee80211_he_ndp_annc_ru_end,
57131 {"RU End Index", "wlan.he_ndp.sta_info.ru_end",
57132 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01FC0000,
57133 "26-tone RU end index of the target STA", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57134
57135 {&hf_ieee80211_he_ndp_annc_feedback_type_and_ng,
57136 {"Feedback Type and Ng", "wlan.he_ndp.sta_info.feedback_type_and_ng",
57137 FT_UINT32, BASE_HEX, NULL((void*)0), 0x06000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57138
57139 {&hf_ieee80211_he_ndp_annc_disambiguation,
57140 {"Disambiguation", "wlan.he_ndp.sta_info.disambiguation",
57141 FT_UINT32, BASE_HEX, NULL((void*)0), 0x08000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57142
57143 {&hf_ieee80211_he_ndp_annc_codebook_size,
57144 {"Codebook Size", "wlan.he_ndp.sta_info.codebook_size",
57145 FT_UINT32, BASE_HEX, NULL((void*)0), 0x10000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57146
57147 {&hf_ieee80211_he_ndp_annc_nc,
57148 {"Nc", "wlan.he_ndp.sta_info.nc",
57149 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57150
57151 {&hf_ieee80211_he_ndp_annc_disallowed_bitmap,
57152 {"Disallowed Subchannel Bitmap",
57153 "wlan.he_ndp.sta_info.disallowed_subchannel_bitmap",
57154 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0007f800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57155
57156 {&hf_ieee80211_he_ndp_annc_reserved1,
57157 {"Reserved", "wlan.he_ndp.sta_info.reserved1",
57158 FT_UINT32, BASE_HEX, NULL((void*)0), 0x07f80000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57159
57160 {&hf_ieee80211_he_ndp_annc_reserved2,
57161 {"Reserved", "wlan.he_ndp.sta_info.reserved2",
57162 FT_UINT32, BASE_HEX, NULL((void*)0), 0xf0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57163
57164 {&hf_ieee80211_htc_ht_lac,
57165 {"Link Adaptation Control (LAC)", "wlan.htc.lac",
57166 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FFFE,
57167 "High Throughput Control Link Adaptation Control (LAC)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57168
57169 {&hf_ieee80211_htc_lac_trq,
57170 {"Training Request (TRQ)", "wlan.htc.lac.trq",
57171 FT_BOOLEAN, 16, TFS(&htc_lac_trq_flag)((0 ? (const struct true_false_string*)0 : ((&htc_lac_trq_flag
))))
, 0x0002,
57172 "High Throughput Control Link Adaptation Control Training Request (TRQ)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57173
57174 {&hf_ieee80211_htc_lac_mai_aseli,
57175 {"Antenna Selection Indication (ASELI)", "wlan.htc.lac.mai.aseli",
57176 FT_UINT16, BASE_HEX, NULL((void*)0), 0x003C,
57177 "High Throughput Control Link Adaptation Control MAI Antenna Selection Indication", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57178
57179 {&hf_ieee80211_htc_lac_mai_mrq,
57180 {"MCS Request (MRQ)", "wlan.htc.lac.mai.mrq",
57181 FT_BOOLEAN, 16, TFS(&htc_lac_mai_mrq_flag)((0 ? (const struct true_false_string*)0 : ((&htc_lac_mai_mrq_flag
))))
, 0x0004,
57182 "High Throughput Control Link Adaptation Control MAI MCS Request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57183
57184 {&hf_ieee80211_htc_lac_mai_msi,
57185 {"MCS Request Sequence Identifier (MSI)", "wlan.htc.lac.mai.msi",
57186 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038,
57187 "High Throughput Control Link Adaptation Control MAI MCS Request Sequence Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57188
57189 {&hf_ieee80211_htc_lac_mai_reserved,
57190 {"Reserved", "wlan.htc.lac.mai.reserved",
57191 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038,
57192 "High Throughput Control Link Adaptation Control MAI Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57193
57194 {&hf_ieee80211_htc_lac_mfsi,
57195 {"MCS Feedback Sequence Identifier (MFSI)", "wlan.htc.lac.mfsi",
57196 FT_UINT16, BASE_DEC, NULL((void*)0), 0x01C0,
57197 "High Throughput Control Link Adaptation Control MCS Feedback Sequence Identifier (MSI)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57198
57199 {&hf_ieee80211_htc_lac_asel_command,
57200 {"Antenna Selection (ASEL) Command", "wlan.htc.lac.asel.command",
57201 FT_UINT16, BASE_HEX, VALS(ieee80211_htc_lac_asel_command_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_lac_asel_command_flags
))))
, 0x0E00,
57202 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Command", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57203
57204 {&hf_ieee80211_htc_lac_asel_data,
57205 {"Antenna Selection (ASEL) Data", "wlan.htc.lac.asel.data",
57206 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000,
57207 "High Throughput Control Link Adaptation Control Antenna Selection (ASEL) Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57208
57209 {&hf_ieee80211_htc_lac_mfb,
57210 {"MCS Feedback (MFB)", "wlan.htc.lac.mfb",
57211 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00,
57212 "High Throughput Control Link Adaptation Control MCS Feedback", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57213
57214 {&hf_ieee80211_htc_cal_pos,
57215 {"Calibration Position", "wlan.htc.cal.pos",
57216 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_cal_pos_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_cal_pos_flags
))))
, 0x00030000,
57217 "High Throughput Control Calibration Position", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57218
57219 {&hf_ieee80211_htc_cal_seq,
57220 {"Calibration Sequence Identifier", "wlan.htc.cal.seq",
57221 FT_UINT32, BASE_DEC, NULL((void*)0), 0x000C0000,
57222 "High Throughput Control Calibration Sequence Identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57223
57224 {&hf_ieee80211_htc_reserved1,
57225 {"Reserved", "wlan.htc.reserved1",
57226 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00300000,
57227 "High Throughput Control Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57228
57229 {&hf_ieee80211_htc_csi_steering,
57230 {"CSI/Steering", "wlan.htc.csi_steering",
57231 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_csi_steering_flags)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_csi_steering_flags
))))
, 0x00C00000,
57232 "High Throughput Control CSI/Steering", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57233
57234 {&hf_ieee80211_htc_ndp_announcement,
57235 {"NDP Announcement", "wlan.htc.ndp_announcement",
57236 FT_BOOLEAN, 32, TFS(&ieee80211_htc_ndp_announcement_flag)((0 ? (const struct true_false_string*)0 : ((&ieee80211_htc_ndp_announcement_flag
))))
, 0x01000000,
57237 "High Throughput Control NDP Announcement", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57238
57239 {&hf_ieee80211_htc_reserved2,
57240 {"Reserved", "wlan.htc.reserved2",
57241 FT_UINT32, BASE_HEX, NULL((void*)0), 0x3E000000,
57242 "High Throughput Control Reserved", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57243
57244 {&hf_ieee80211_htc_mrq,
57245 {"MRQ", "wlan.htc.mrq",
57246 FT_BOOLEAN, 32, NULL((void*)0), HTC_MRQ0x00000004,
57247 "VHT-MCS feedback request", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57248
57249 {&hf_ieee80211_htc_msi,
57250 {"MSI", "wlan.htc.msi",
57251 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000038,
57252 "MRQ sequence number", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57253
57254 {&hf_ieee80211_htc_msi_stbc_reserved,
57255 {"Reserved", "wlan.htc.msi_stbc_reserved",
57256 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000038,
57257 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57258
57259 {&hf_ieee80211_htc_compressed_msi,
57260 {"Compressed MSI", "wlan.htc.compressed_msi",
57261 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000018,
57262 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57263
57264 {&hf_ieee80211_htc_ppdu_stbc_encoded,
57265 {"PPDU was STBC encoded", "wlan.htc.ppdu_stbc_encoded",
57266 FT_BOOLEAN, 32, NULL((void*)0), 0x00000020,
57267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57268
57269 {&hf_ieee80211_htc_mfsi,
57270 {"MFSI", "wlan.htc.mfsi",
57271 FT_BOOLEAN, 32, NULL((void*)0), 0x000001C0,
57272 "MFB sequence identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57273
57274 {&hf_ieee80211_htc_gid_l,
57275 {"GID-L", "wlan.htc.gid_l",
57276 FT_BOOLEAN, 32, NULL((void*)0), 0x000001C0,
57277 "LSBs of group ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57278
57279 {&hf_ieee80211_htc_mfb,
57280 {"MFB", "wlan.htc.mfb",
57281 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00FFFE00,
57282 "Recommended MFB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57283
57284 {&hf_ieee80211_htc_num_sts,
57285 {"NUM_STS", "wlan.htc.num_sts",
57286 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000E00,
57287 "Recommended NUM_STS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57288
57289 {&hf_ieee80211_htc_vht_mcs,
57290 {"VHT-MCS", "wlan.htc.vht_mcs",
57291 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000F000,
57292 "Recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57293
57294 {&hf_ieee80211_htc_bw,
57295 {"BW", "wlan.htc.bw",
57296 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,
57297 "Bandwidth for recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57298
57299 {&hf_ieee80211_htc_s1g_num_sts,
57300 {"NUM_STS", "wlan.htc.num_sts",
57301 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000600,
57302 "Recommended NUM_STS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57303
57304 {&hf_ieee80211_htc_s1g_vht_mcs,
57305 {"VHT-MCS", "wlan.htc.vht_mcs",
57306 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00007800,
57307 "Recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57308
57309 {&hf_ieee80211_htc_s1g_bw,
57310 {"BW", "wlan.htc.bw",
57311 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,
57312 "Bandwidth for recommended VHT-MCS", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57313
57314 {&hf_ieee80211_htc_snr,
57315 {"SNR", "wlan.htc.snr",
57316 FT_INT32, BASE_DEC, NULL((void*)0), 0x00FC0000,
57317 "Average SNR + 22", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57318
57319 {&hf_ieee80211_htc_reserved3,
57320 {"Reserved", "wlan.htc.reserved3",
57321 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1F000000,
57322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57323
57324 {&hf_ieee80211_htc_gid_h,
57325 {"GID-H", "wlan.htc.gid_h",
57326 FT_UINT32, BASE_DEC, NULL((void*)0), 0x07000000,
57327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57328
57329 {&hf_ieee80211_htc_coding_type,
57330 {"Coding type", "wlan.htc.coding_type",
57331 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_coding_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_coding_type_vals
))))
, 0x08000000,
57332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57333
57334 {&hf_ieee80211_htc_fb_tx_type,
57335 {"FB Tx type", "wlan.htc.fb_tx_type",
57336 FT_UINT32, BASE_DEC, VALS(ieee80211_htc_fb_tx_type_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_htc_fb_tx_type_vals
))))
, 0x10000000,
57337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57338
57339 {&hf_ieee80211_htc_unsolicited_mfb,
57340 {"Unsolicited MFB", "wlan.htc.unsolicited_mfb",
57341 FT_BOOLEAN, 32, NULL((void*)0), HTC_UNSOLICITED_MFB0x20000000,
57342 "High Throughput Control Unsolicited MFB", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57343
57344 {&hf_ieee80211_htc_ac_constraint,
57345 {"AC Constraint", "wlan.htc.ac_constraint",
57346 FT_BOOLEAN, 32, NULL((void*)0), 0x40000000,
57347 "High Throughput Control AC Constraint", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57348
57349 {&hf_ieee80211_htc_rdg_more_ppdu,
57350 {"RDG/More PPDU", "wlan.htc.rdg_more_ppdu",
57351 FT_BOOLEAN, 32, NULL((void*)0), 0x80000000,
57352 "High Throughput Control RDG/More PPDU", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57353 /* End: HT Control (+HTC) */
57354
57355 /* MDIE */
57356 {&hf_ieee80211_tag_mobility_domain_mdid,
57357 {"Mobility Domain Identifier", "wlan.mobility_domain.mdid",
57358 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57359 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57360
57361 {&hf_ieee80211_tag_mobility_domain_ft_capab,
57362 {"FT Capability and Policy", "wlan.mobility_domain.ft_capab",
57363 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57364 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57365
57366 {&hf_ieee80211_tag_mobility_domain_ft_capab_ft_over_ds,
57367 {"Fast BSS Transition over DS",
57368 "wlan.mobility_domain.ft_capab.ft_over_ds",
57369 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
57370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57371
57372 {&hf_ieee80211_tag_mobility_domain_ft_capab_resource_req,
57373 {"Resource Request Protocol Capability",
57374 "wlan.mobility_domain.ft_capab.resource_req",
57375 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02,
57376 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57377
57378 {&hf_ieee80211_tag_mobility_domain_ft_capab_reserved,
57379 {"Reserved",
57380 "wlan.mobility_domain.ft_capab.reserved",
57381 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc,
57382 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57383
57384 /* FTIE */
57385 {&hf_ieee80211_tag_ft_mic_control,
57386 {"MIC Control", "wlan.ft.mic_control",
57387 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57388 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57389
57390 {&hf_ieee80211_tag_ft_mic_control_rsnxe_used,
57391 {"RSNXE Used", "wlan.ft.mic_control.rsnxe_used",
57392 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) }},
57393
57394 {&hf_ieee80211_tag_ft_mic_control_mic_length,
57395 {"MIC Length", "wlan.ft.mic_control.mic_length",
57396 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000e, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57397
57398 {&hf_ieee80211_tag_ft_mic_control_reserved,
57399 {"Reserved", "wlan.ft.mic_control.reserved",
57400 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00f0,
57401 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57402
57403 {&hf_ieee80211_tag_ft_mic_control_element_count,
57404 {"Element Count", "wlan.ft.mic_control.element_count",
57405 FT_UINT16, BASE_DEC, NULL((void*)0), 0xff00,
57406 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57407
57408 {&hf_ieee80211_tag_ft_mic,
57409 {"MIC", "wlan.ft.mic",
57410 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57411 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57412
57413 {&hf_ieee80211_tag_ft_anonce,
57414 {"ANonce", "wlan.ft.anonce",
57415 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57416 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57417
57418 {&hf_ieee80211_tag_ft_snonce,
57419 {"SNonce", "wlan.ft.snonce",
57420 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57421 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57422
57423 {&hf_ieee80211_tag_ft_subelem_id,
57424 {"Subelement ID", "wlan.ft.subelem.id",
57425 FT_UINT8, BASE_DEC, VALS(ft_subelem_id_vals)((0 ? (const struct _value_string*)0 : ((ft_subelem_id_vals))
))
, 0,
57426 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57427
57428 {&hf_ieee80211_tag_ft_subelem_len,
57429 {"Length", "wlan.ft.subelem.len",
57430 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57431 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57432
57433 {&hf_ieee80211_tag_ft_subelem_data,
57434 {"Data", "wlan.ft.subelem.data",
57435 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57436 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57437
57438 {&hf_ieee80211_tag_ft_subelem_r1kh_id,
57439 {"PMK-R1 key holder identifier (R1KH-ID)", "wlan.ft.subelem.r1kh_id",
57440 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57441 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57442
57443 {&hf_ieee80211_tag_ft_subelem_gtk_key_info,
57444 {"Key Info", "wlan.ft.subelem.gtk.key_info",
57445 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57447
57448 {&hf_ieee80211_tag_ft_subelem_gtk_key_id,
57449 {"Key ID", "wlan.ft.subelem.gtk.key_id",
57450 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
57451 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57452
57453 {&hf_ieee80211_tag_ft_subelem_gtk_key_length,
57454 {"Key Length", "wlan.ft.subelem.gtk.key_length",
57455 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57456 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57457
57458 {&hf_ieee80211_tag_ft_subelem_gtk_rsc,
57459 {"RSC", "wlan.ft.subelem.gtk.rsc",
57460 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57461 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57462
57463 {&hf_ieee80211_tag_ft_subelem_gtk_key,
57464 {"GTK", "wlan.ft.subelem.gtk.key",
57465 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57466 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57467
57468 {&hf_ieee80211_tag_ft_subelem_gtk_key_encrypted,
57469 {"GTK (encrypted)", "wlan.ft.subelem.gtk.key_encrypted",
57470 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57471 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57472
57473 {&hf_ieee80211_tag_ft_subelem_r0kh_id,
57474 {"PMK-R0 key holder identifier (R0KH-ID)", "wlan.ft.subelem.r0kh_id",
57475 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57476 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57477
57478 {&hf_ieee80211_tag_ft_subelem_igtk_key_id,
57479 {"Key ID", "wlan.ft.subelem.igtk.key_id",
57480 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57481 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57482
57483 {&hf_ieee80211_tag_ft_subelem_igtk_ipn,
57484 {"IPN", "wlan.ft.subelem.igtk.ipn",
57485 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57486 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57487
57488 {&hf_ieee80211_tag_ft_subelem_igtk_key_length,
57489 {"Key Length", "wlan.ft.subelem.igtk.key_length",
57490 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57491 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57492
57493 {&hf_ieee80211_tag_ft_subelem_igtk_key,
57494 {"Wrapped Key (IGTK)", "wlan.ft.subelem.igtk.key",
57495 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57496
57497 {&hf_ieee80211_tag_ft_subelem_oci_op_class,
57498 {"Operating Class", "wlan.ft.subelem.oci.operating_class",
57499 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57500
57501 {&hf_ieee80211_tag_ft_subelem_oci_prim_chan_num,
57502 {"Primary Channel Number", "wlan.ft.subelem.oci.primary_channel_number",
57503 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57504
57505 {&hf_ieee80211_tag_ft_subelem_oci_freq_seg_1,
57506 {"Frequency Segment 1 Channel Number",
57507 "wlan.ft.subelem.oci.frequency_segment_1_channel_number",
57508 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57509
57510 {&hf_ieee80211_tag_ft_subelem_oci_oct_op_class,
57511 {"OCT Operating Class", "wlan.ft.subelem.oci.oct_operating_class",
57512 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57513
57514 {&hf_ieee80211_tag_ft_subelem_oci_oct_prim_chan_num,
57515 {"OCT Primary Channel Number",
57516 "wlan.ft.subelem.oci.oct_primary_channel_number",
57517 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57518
57519 {&hf_ieee80211_tag_ft_subelem_oci_oct_freq_seg_1,
57520 {"OCT Frequency Segment 1 Channel Number",
57521 "wlan.ft.subelem.oci.oct_frequency_segment_1_channel_number",
57522 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57523
57524 {&hf_ieee80211_tag_ft_subelem_bigtk_key_id,
57525 {"Key ID", "wlan.ft.subelem.bigtk.key_id",
57526 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57528
57529 {&hf_ieee80211_tag_ft_subelem_bigtk_bipn,
57530 {"BIPN", "wlan.ft.subelem.bigtk.bipn",
57531 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57533
57534 {&hf_ieee80211_tag_ft_subelem_bigtk_key_length,
57535 {"Key Length", "wlan.ft.subelem.bigtk.key_length",
57536 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57537 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57538
57539 {&hf_ieee80211_tag_ft_subelem_bigtk_key,
57540 {"Wrapped Key (BIGTK)", "wlan.ft.subelem.bigtk.key",
57541 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57542
57543 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_info,
57544 {"Key Info", "wlan.ft.subelem.mlo_gtk.key_info",
57545 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57546 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57547
57548 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_id,
57549 {"Key ID", "wlan.ft.subelem.mlo_gtk.key_id",
57550 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0003,
57551 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57552
57553 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id_info,
57554 {"Link ID Info", "wlan.ft.subelem.mlo_gtk.link_id_info",
57555 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57556 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57557
57558 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_link_id,
57559 {"Link ID", "wlan.ft.subelem.mlo_gtk.link_id",
57560 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57561 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57562
57563 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key_length,
57564 {"Key Length", "wlan.ft.subelem.mlo_gtk.key_length",
57565 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57566 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57567
57568 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_rsc,
57569 {"RSC", "wlan.ft.subelem.mlo_gtk.rsc",
57570 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57571 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57572
57573 {&hf_ieee80211_tag_ft_subelem_mlo_gtk_key,
57574 {"Wrapped Key (MLO GTK)", "wlan.ft.subelem.mlo_gtk.key",
57575 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57577
57578 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key_id,
57579 {"Key ID", "wlan.ft.subelem.mlo_igtk.key_id",
57580 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57582
57583 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_ipn,
57584 {"IPN", "wlan.ft.subelem.mlo_igtk.ipn",
57585 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57587
57588 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id_info,
57589 {"Link ID Info", "wlan.ft.subelem.mlo_igtk.link_id_info",
57590 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57592
57593 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_link_id,
57594 {"Link ID", "wlan.ft.subelem.mlo_igtk.link_id",
57595 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57597
57598 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key_length,
57599 {"Key Length", "wlan.ft.subelem.mlo_igtk.key_length",
57600 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57602
57603 {&hf_ieee80211_tag_ft_subelem_mlo_igtk_key,
57604 {"Wrapped Key (MLO IGTK)", "wlan.ft.subelem.mlo_igtk.key",
57605 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57606
57607 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_id,
57608 {"Key ID", "wlan.ft.subelem.mlo_bigtk.key_id",
57609 FT_UINT16, 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_ft_subelem_mlo_bigtk_bipn,
57613 {"BIPN", "wlan.ft.subelem.mlo_bigtk.bipn",
57614 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57616
57617 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id,
57618 {"Link ID", "wlan.ft.subelem.mlo_bigtk.link_id",
57619 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
57620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57621
57622 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_link_id_info,
57623 {"Link ID Info", "wlan.ft.subelem.mlo_bigtk.link_id_info",
57624 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57626
57627 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_key_length,
57628 {"Key Length", "wlan.ft.subelem.mlo_bigtk.key_length",
57629 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
57630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57631
57632 {&hf_ieee80211_tag_ft_subelem_mlo_bigtk_key,
57633 {"Wrapped Key (MLO BIGTK)", "wlan.ft.subelem.mlo_bigtk.key",
57634 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57635
57636 /* RIC Data IE: 802.11-2012: 8.4.2.52 */
57637 {&hf_ieee80211_tag_ric_data_id,
57638 {"Resource Handshake Identifier", "wlan.ric_data.id",
57639 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57640
57641 {&hf_ieee80211_tag_ric_data_desc_cnt,
57642 {"Resource Descriptor Count", "wlan.ric_data.desc_cnt",
57643 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57644
57645 {&hf_ieee80211_tag_ric_data_status_code,
57646 {"Status Code", "wlan.ric_data.status_code",
57647 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
57648 "Status of requested Resource", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57649
57650 /* OBSS IE: 802.11-2012: 8.4.2.61 */
57651 {&hf_ieee80211_tag_obss_spd,
57652 {"Scan Passive Dwell", "wlan.obss.spd",
57653 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57654
57655 {&hf_ieee80211_tag_obss_sad,
57656 {"Scan Active Dwell", "wlan.obss.sad",
57657 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57658
57659 {&hf_ieee80211_tag_obss_cwtsi,
57660 {"Channel Width Trigger Scan Interval", "wlan.obss.cwtsi",
57661 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57662
57663 {&hf_ieee80211_tag_obss_sptpc,
57664 {"Scan Passive Total Per Channel", "wlan.obss.sptpc",
57665 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57666
57667 {&hf_ieee80211_tag_obss_satpc,
57668 {"Scan Active Total Per Channel", "wlan.obss.satpc",
57669 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57670
57671 {&hf_ieee80211_tag_obss_wctdf,
57672 {"Width Channel Transition Delay Factor", "wlan.obss.wctdf",
57673 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57674
57675 {&hf_ieee80211_tag_obss_sat,
57676 {"Scan Activity Threshold", "wlan.obss.sat",
57677 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57678
57679 /* Group Data Cypher Suite: 802.11-2012: 8.4.2.25.1 */
57680 {&hf_ieee80211_group_data_cipher_suite_oui,
57681 {"Group Data Cypher Suite OUI", "wlan.osen.gdcs.oui",
57682 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57683
57684 /* TODO: List the suite names ... */
57685 {&hf_ieee80211_group_data_cipher_suite_type,
57686 {"Group Data Cypher Suite type", "wlan.osen.gdcs.type",
57687 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57688
57689 {&hf_ieee80211_osen_pcs_count,
57690 {"OSEN Pairwise Cipher Suite Count", "wlan.osen.pwcs.count",
57691 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57692
57693 {&hf_ieee80211_osen_pairwise_cipher_suite_oui,
57694 {"OSEN Pairwise Cypher Suite OUI", "wlan.osen.pwcs.oui",
57695 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57696
57697 {&hf_ieee80211_osen_pairwise_cipher_suite_type,
57698 {"OSEN Pairwise Cypher Suite type", "wlan.osen.pwcs.type",
57699 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57700
57701 {&hf_ieee80211_osen_akm_count,
57702 {"OSEN AKM Cipher Suite Count", "wlan.osen.akms.count",
57703 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57704
57705 {&hf_ieee80211_osen_akm_cipher_suite_oui,
57706 {"OSEN AKM Cipher Suite OUI", "wlan.osen.akms.oui",
57707 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57708
57709 {&hf_ieee80211_osen_akm_cipher_suite_type,
57710 {"OSEN AKM Cipher Suite Type", "wlan.osen.akms.type",
57711 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57712
57713 {&hf_ieee80211_osen_rsn_cap_preauth,
57714 {"RSN Pre-Auth capabilities", "wlan.osen.rsn.capabilities.preauth",
57715 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) }},
57716
57717 {&hf_ieee80211_osen_rsn_cap_no_pairwise,
57718 {"RSN No Pairwise capabilities", "wlan.osen.rsn.capabilities.no_pairwise",
57719 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) }},
57720
57721 {&hf_ieee80211_osen_rsn_cap_ptksa_replay_counter,
57722 {"RSN PTKSA Replay Counter capabilities",
57723 "wlan.osen.rsn.capabilities.ptksa_replay_counter",
57724 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) }},
57725
57726 {&hf_ieee80211_osen_rsn_cap_gtksa_replay_counter,
57727 {"RSN GTKSA Replay Counter capabilities",
57728 "wlan.osen.rsn.capabilities.gtksa_replay_counter",
57729 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) }},
57730
57731 {&hf_ieee80211_osen_group_management_cipher_suite_oui,
57732 {"OSEN Group Management Cipher Suite OUI", "wlan.osen.gmcs.oui",
57733 FT_UINT24, BASE_OUI, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57734
57735 {&hf_ieee80211_osen_group_management_cipher_suite_type,
57736 {"OSEN Group Management Cipher Suite Type", "wlan.osen.gmcs.type",
57737 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57738
57739 {&hf_ieee80211_osen_rsn_cap_mfpr,
57740 {"Management Frame Protection Required", "wlan.osen.rsn.capabilities.mfpr",
57741 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) }},
57742
57743 {&hf_ieee80211_osen_rsn_cap_mfpc,
57744 {"Management Frame Protection Capable", "wlan.osen.rsn.capabilities.mfpc",
57745 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) }},
57746
57747 {&hf_ieee80211_osen_rsn_cap_jmr,
57748 {"Joint Multi-band RSNA", "wlan.osen.rsn.capabilities.jmr",
57749 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) }},
57750
57751 {&hf_ieee80211_osen_rsn_cap_peerkey,
57752 {"PeerKey Enabled", "wlan.osen.rsn.capabilities.peerkey",
57753 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) }},
57754
57755 {&hf_ieee80211_osen_rsn_cap_flags,
57756 {"RSN Capability Flags", "wlan.osen.rsn.capabilities.flags",
57757 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57758
57759 {&hf_ieee80211_osen_rsn_spp_a_msdu_capable,
57760 {"SPP A-MSDU Capable", "wlan.osen.rsn.capabilities.spp_a_msdu_cap",
57761 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) }},
57762
57763 {&hf_ieee80211_osen_rsn_spp_a_msdu_required,
57764 {"SPP A-MSDU Required", "wlan.osen.rsn.capabilities.spp_a_msdu_req",
57765 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) }},
57766
57767 {&hf_ieee80211_osen_rsn_pbac,
57768 {"Protected Block Ack Agreement Capable", "wlan.osen.rsn.capabilities.pbac",
57769 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) }},
57770
57771 {&hf_ieee80211_osen_extended_key_id_iaf,
57772 {"Extended Key ID for Individually Addressed Frames",
57773 "wlan.osn.rsn.extended_key_id_iaf",
57774 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) }},
57775
57776 {&hf_ieee80211_osen_reserved,
57777 {"Reserved", "wlan.osen.rsn.capabilities.reserved",
57778 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57779
57780 {&hf_ieee80211_osen_pmkid_count,
57781 {"OSEN PMKID Count", "wlan.osen.pmkid.count",
57782 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57783
57784 {&hf_ieee80211_osen_pmkid,
57785 {"OSEN PKMID", "wlan.osen.pmkid.bytes",
57786 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57787
57788 /* RIC Descriptor IE: 802.11-2012: 8.4.2.53 */
57789 {&hf_ieee80211_tag_ric_desc_rsrc_type,
57790 {"Resource Type", "wlan.ric_desc.rsrc_type",
57791 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57792
57793 {&hf_ieee80211_tag_ric_desc_var_params,
57794 {"Variable Params", "wlan.ric_desc.var_params",
57795 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57796
57797 /* MMIE */
57798 {&hf_ieee80211_tag_mmie_keyid,
57799 {"KeyID", "wlan.mmie.keyid",
57800 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57801
57802 {&hf_ieee80211_tag_mmie_ipn,
57803 {"IPN", "wlan.mmie.ipn",
57804 FT_UINT48, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57805
57806 {&hf_ieee80211_tag_mmie_mic,
57807 {"MIC", "wlan.mmie.mic",
57808 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57809
57810 /* Non Transmitted BSSID Capability */
57811 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control,
57812 {"DMG BSS Control", "wlan.no_bssid_capability.dmg_bss_control",
57813 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57814
57815 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_type,
57816 {"Type", "wlan.no_bssid_capability.dmg_bss_control.type",
57817 FT_UINT8, BASE_DEC, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57818
57819 {&hf_ieee80211_tag_no_bssid_capability_dmg_bss_control_reserved,
57820 {"Reserved", "wlan.no_bssid_capability.dmg_bss_control.reserved",
57821 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57822
57823 /* Multiple BSSID Index */
57824 {&hf_ieee80211_tag_multiple_bssid_index_bssid_index,
57825 {"BSSID Index", "wlan.multiple_bssid_index.bssid_index",
57826 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57827
57828 {&hf_ieee80211_tag_multiple_bssid_index_dtim_period,
57829 {"DTIM Period", "wlan.multiple_bssid_index.dtim_period",
57830 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57831
57832 {&hf_ieee80211_tag_multiple_bssid_index_dtim_count,
57833 {"DTIM Count", "wlan.multiple_bssid_index.dtim_count",
57834 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57835
57836 /* WAPI Parameter Set*/
57837 {&hf_ieee80211_tag_wapi_param_set_version,
57838 {"Version", "wlan.wapi.version",
57839 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57841
57842 {&hf_ieee80211_tag_wapi_param_set_akm_suite_count,
57843 {"AKM Suite Count", "wlan.wapi.akm_suite.count",
57844 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57846
57847 {&hf_ieee80211_tag_wapi_param_set_akm_suite_oui,
57848 {"AKM Suite OUI", "wlan.wapi.akm_suite.oui",
57849 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57851
57852 {&hf_ieee80211_tag_wapi_param_set_akm_suite_type,
57853 {"AKM Suite Type", "wlan.wapi.akm_suite.type",
57854 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_suite_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_suite_type
))))
, 0,
57855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57856
57857 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_count,
57858 {"Unicast Cipher Suite Count", "wlan.wapi.unicast_cipher.suite.count",
57859 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57861
57862 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_oui,
57863 {"Unicast Cipher Suite OUI", "wlan.wapi.unicast_cipher.suite.oui",
57864 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57866
57867 {&hf_ieee80211_tag_wapi_param_set_ucast_cipher_suite_type,
57868 {"Unicast Cipher Suite Type", "wlan.wapi.unicast_cipher.suite.type",
57869 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_cipher_type
))))
, 0,
57870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57871
57872 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_oui,
57873 {"Multicast Cipher Suite OUI", "wlan.wapi.multicast_cipher.suite.oui",
57874 FT_UINT24, BASE_OUI, NULL((void*)0), 0,
57875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57876
57877 {&hf_ieee80211_tag_wapi_param_set_mcast_cipher_suite_type,
57878 {"Multicast Cipher Suite Type", "wlan.wapi.multicast_cipher.suite.type",
57879 FT_UINT8, BASE_DEC, VALS(ieee80211_wapi_cipher_type)((0 ? (const struct _value_string*)0 : ((ieee80211_wapi_cipher_type
))))
, 0,
57880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57881
57882 {&hf_ieee80211_tag_wapi_param_set_capab,
57883 {"WAPI Capability Info", "wlan.wapi.capab",
57884 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
57885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57886
57887 {&hf_ieee80211_tag_wapi_param_set_capab_preauth,
57888 {"Supports Preauthentication?", "wlan.wapi.capab.preauth",
57889 FT_BOOLEAN, 16 , NULL((void*)0), 0x0001,
57890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57891
57892 {&hf_ieee80211_tag_wapi_param_set_capab_rsvd,
57893 {"Reserved", "wlan.wapi.capab.rsvd",
57894 FT_UINT16, BASE_DEC , NULL((void*)0), 0xFFFE,
57895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57896
57897 {&hf_ieee80211_tag_wapi_param_set_bkid_count,
57898 {"No of BKID's", "wlan.wapi.bkid.count",
57899 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
57900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57901
57902 {&hf_ieee80211_tag_wapi_param_set_bkid_list,
57903 {"BKID", "wlan.wapi.bkid",
57904 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57906
57907 /* BSS Max Idle Period */
57908 {&hf_ieee80211_tag_bss_max_idle_period,
57909 {"Max Idle Period (1000 TUs)", "wlan.bss_max_idle.period",
57910 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57911
57912 {&hf_ieee80211_tag_bss_max_idle_options,
57913 {"Idle Options", "wlan.bss_max_idle.options",
57914 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57915
57916 {&hf_ieee80211_tag_bss_max_idle_options_protected,
57917 {"Protected Keep-Alive Required",
57918 "wlan.bss_max_idle.options.protected",
57919 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57920
57921 {&hf_ieee80211_tag_bss_idle_options_reserved,
57922 {"Reserved", "wlan.bss_max_idle.options.reserved",
57923 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57924
57925 /* TFS Request */
57926 {&hf_ieee80211_tag_tfs_request_id,
57927 {"TFS ID", "wlan.tfs_request.id",
57928 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57929
57930 {&hf_ieee80211_tag_tfs_request_ac_delete_after_match,
57931 {"TFS Action Code - Delete after match",
57932 "wlan.tfs_request.action_code.delete_after_match",
57933 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57934
57935 {&hf_ieee80211_tag_tfs_request_ac_notify,
57936 {"TFS Action Code - Notify",
57937 "wlan.tfs_request.action_code.notify",
57938 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57939
57940 {&hf_ieee80211_tag_tfs_request_subelem_id,
57941 {"Subelement ID", "wlan.tfs_request.subelem.id",
57942 FT_UINT8, BASE_DEC, VALS(tfs_request_subelem_ids)((0 ? (const struct _value_string*)0 : ((tfs_request_subelem_ids
))))
, 0,
57943 "TFS Request Subelement ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57944
57945 {&hf_ieee80211_tag_tfs_request_subelem_len,
57946 {"Length", "wlan.tfs_request.subelem.len",
57947 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57948 "TFS Request Subelement Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57949
57950 {&hf_ieee80211_tag_tfs_request_subelem,
57951 {"Subelement Data", "wlan.tfs_request.subelem",
57952 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57953 "TFS Request Subelement Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57954
57955 /* TFS Response */
57956 {&hf_ieee80211_tag_tfs_response_subelem_id,
57957 {"Subelement ID", "wlan.tfs_response.subelem.id",
57958 FT_UINT8, BASE_DEC, VALS(tfs_response_subelem_ids)((0 ? (const struct _value_string*)0 : ((tfs_response_subelem_ids
))))
, 0,
57959 "TFS Response Subelement ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57960
57961 {&hf_ieee80211_tag_tfs_response_subelem_len,
57962 {"Length", "wlan.tfs_response.subelem.len",
57963 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
57964 "TFS Response Subelement Length", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57965
57966 {&hf_ieee80211_tag_tfs_response_subelem,
57967 {"Subelement Data", "wlan.tfs_response.subelem",
57968 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
57969 "TFS Response Subelement Data", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57970
57971 {&hf_ieee80211_tag_tfs_response_status,
57972 {"TFS Response Status", "wlan.tfs_response.status",
57973 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57974
57975 {&hf_ieee80211_tag_tfs_response_id,
57976 {"TFS ID", "wlan.tfs_response.tfs_id",
57977 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57978
57979 /* WNM-Sleep Mode */
57980 {&hf_ieee80211_tag_wnm_sleep_mode_action_type,
57981 {"Action Type", "wlan.wnm_sleep_mode.action_type",
57982 FT_UINT8, BASE_DEC, VALS(wnm_sleep_mode_action_types)((0 ? (const struct _value_string*)0 : ((wnm_sleep_mode_action_types
))))
, 0,
57983 "WNM-Sleep Mode Action Type", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57984
57985 {&hf_ieee80211_tag_wnm_sleep_mode_response_status,
57986 {"WNM-Sleep Mode Response Status",
57987 "wlan.wnm_sleep_mode.response_status",
57988 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),
57989 HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57990
57991 {&hf_ieee80211_tag_wnm_sleep_mode_interval,
57992 {"WNM-Sleep Interval", "wlan.wnm_sleep_mode.interval",
57993 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57994
57995 {&hf_ieee80211_wnm_sub_elt_id,
57996 {"Subelement ID", "wlan.wnm_subelt.id",
57997 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
57998
57999 {&hf_ieee80211_wnm_sub_elt_len,
58000 {"Subelement len", "wlan.wnm_subelt.len",
58001 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58002
58003 /* Time Advertisement */
58004 {&hf_ieee80211_tag_time_adv_timing_capab,
58005 {"Timing capabilities", "wlan.time_adv.timing_capab",
58006 FT_UINT8, BASE_DEC, VALS(time_adv_timing_capab_vals)((0 ? (const struct _value_string*)0 : ((time_adv_timing_capab_vals
))))
, 0,
58007 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58008
58009 {&hf_ieee80211_tag_time_adv_time_value,
58010 {"Time Value", "wlan.time_adv.time_value",
58011 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58012 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58013
58014 {&hf_ieee80211_tag_time_adv_time_value_year,
58015 {"Time Value: Year", "wlan.time_adv.time_value.year",
58016 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
58017 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58018
58019 {&hf_ieee80211_tag_time_adv_time_value_month,
58020 {"Time Value: Month", "wlan.time_adv.time_value.month",
58021 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58023
58024 {&hf_ieee80211_tag_time_adv_time_value_day,
58025 {"Time Value: Day", "wlan.time_adv.time_value.day",
58026 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58028
58029 {&hf_ieee80211_tag_time_adv_time_value_hours,
58030 {"Time Value: Hours", "wlan.time_adv.time_value.hours",
58031 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58032 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58033
58034 {&hf_ieee80211_tag_time_adv_time_value_minutes,
58035 {"Time Value: Minutes", "wlan.time_adv.time_value.minutes",
58036 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58037 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58038
58039 {&hf_ieee80211_tag_time_adv_time_value_seconds,
58040 {"Time Value: Seconds", "wlan.time_adv.time_value.seconds",
58041 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58042 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58043
58044 {&hf_ieee80211_tag_time_adv_time_value_milliseconds,
58045 {"Time Value: Milliseconds", "wlan.time_adv.time_value.milliseconds",
58046 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
58047 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58048
58049 {&hf_ieee80211_tag_time_adv_time_value_reserved,
58050 {"Time Value: Reserved", "wlan.time_adv.time_value.reserved",
58051 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58052 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58053
58054 {&hf_ieee80211_tag_time_adv_time_error,
58055 {"Time Error", "wlan.time_adv.time_error",
58056 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58057 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58058
58059 {&hf_ieee80211_tag_time_adv_time_update_counter,
58060 {"Time Update Counter", "wlan.time_adv.time_update_counter",
58061 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58062 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58063
58064 /* Time Zone */
58065 {&hf_ieee80211_tag_time_zone,
58066 {"Time Zone", "wlan.time_zone",
58067 FT_STRING, BASE_NONE, NULL((void*)0), 0,
58068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58069
58070 /* Interworking */
58071 {&hf_ieee80211_tag_interworking_access_network_type,
58072 {"Access Network Type", "wlan.interworking.access_network_type",
58073 FT_UINT8, BASE_DEC, VALS(access_network_type_vals)((0 ? (const struct _value_string*)0 : ((access_network_type_vals
))))
, 0x0f,
58074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58075
58076 {&hf_ieee80211_tag_interworking_internet,
58077 {"Internet", "wlan.interworking.internet",
58078 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
58079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58080
58081 {&hf_ieee80211_tag_interworking_asra,
58082 {"ASRA", "wlan.interworking.asra",
58083 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
58084 "Additional Step Required for Access", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58085
58086 {&hf_ieee80211_tag_interworking_esr,
58087 {"ESR", "wlan.interworking.esr",
58088 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
58089 "Emergency services reachable", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58090
58091 {&hf_ieee80211_tag_interworking_uesa,
58092 {"UESA", "wlan.interworking.uesa",
58093 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
58094 "Unauthenticated emergency service accessible", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58095
58096 {&hf_ieee80211_tag_interworking_hessid,
58097 {"HESSID", "wlan.interworking.hessid",
58098 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
58099 "Homogeneous ESS identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58100
58101 /* QoS Map Set element */
58102 {&hf_ieee80211_tag_qos_map_set_dscp_exc,
58103 {"DSCP Exception", "wlan.qos_map_set.dscp_exception",
58104 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58105
58106 {&hf_ieee80211_tag_qos_map_set_dscp_exc_val,
58107 {"DSCP Value", "wlan.qos_map_set.dscp_value",
58108 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58109 "DSCP Exception - DSCP Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58110
58111 {&hf_ieee80211_tag_qos_map_set_dscp_exc_up,
58112 {"User Priority", "wlan.qos_map_set.up",
58113 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58114 "DSCP Exception - User Priority", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58115
58116 {&hf_ieee80211_tag_qos_map_set_range,
58117 {"DSCP Range description", "wlan.qos_map_set.range",
58118 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58119
58120 {&hf_ieee80211_tag_qos_map_set_low,
58121 {"DSCP Low Value", "wlan.qos_map_set.dscp_low_value",
58122 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58123 "DSCP Range description - DSCP Low Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58124
58125 {&hf_ieee80211_tag_qos_map_set_high,
58126 {"DSCP High Value", "wlan.qos_map_set.dscp_high_value",
58127 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58128 "DSCP Range description - DSCP High Value", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58129
58130 /* Advertisement Protocol */
58131 {&hf_ieee80211_tag_adv_proto_resp_len_limit,
58132 {"Query Response Length Limit", "wlan.adv_proto.resp_len_limit",
58133 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7f,
58134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58135
58136 {&hf_ieee80211_tag_adv_proto_pame_bi,
58137 {"PAME-BI", "wlan.adv_proto.pame_bi",
58138 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
58139 "Pre-Association Message Xchange BSSID Independent (PAME-BI)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58140
58141 {&hf_ieee80211_tag_adv_proto_id,
58142 {"Advertisement Protocol ID", "wlan.adv_proto.id",
58143 FT_UINT8, BASE_DEC, VALS(adv_proto_id_vals)((0 ? (const struct _value_string*)0 : ((adv_proto_id_vals)))
)
, 0,
58144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58145
58146 {&hf_ieee80211_tag_adv_vs_len,
58147 {"Advertisement Protocol Vendor Specific length", "wlan.adv_proto.vs_len",
58148 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
58150#if 0
58151 {&hf_ieee80211_tag_adv_proto_vs_info,
58152 {"Advertisement Protocol Vendor Specific info", "wlan.adv_proto.vs_info",
58153 FT_NONE, BASE_NONE, NULL((void*)0), 0,
58154 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58155#endif
58156
58157 /* Roaming Consortium */
58158 {&hf_ieee80211_tag_roaming_consortium_num_anqp_oi,
58159 {"Number of ANQP OIs", "wlan.roaming_consortium.num_anqp_oi",
58160 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58161 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58162
58163 {&hf_ieee80211_tag_roaming_consortium_oi1_len,
58164 {"OI #1 Length", "wlan.roaming_consortium.oi1_len",
58165 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
58166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58167
58168 {&hf_ieee80211_tag_roaming_consortium_oi2_len,
58169 {"OI #2 Length", "wlan.roaming_consortium.oi2_len",
58170 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
58171 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58172
58173 {&hf_ieee80211_tag_roaming_consortium_oi1,
58174 {"OI #1", "wlan.roaming_consortium.oi1",
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_tag_roaming_consortium_oi2,
58179 {"OI #2", "wlan.roaming_consortium.oi2",
58180 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58182
58183 {&hf_ieee80211_tag_roaming_consortium_oi3,
58184 {"OI #3", "wlan.roaming_consortium.oi3",
58185 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58187
58188 /* Timeout Interval */
58189 {&hf_ieee80211_tag_timeout_int_type,
58190 {"Timeout Interval Type", "wlan.timeout_int.type",
58191 FT_UINT8, BASE_DEC, VALS(timeout_int_types)((0 ? (const struct _value_string*)0 : ((timeout_int_types)))
)
, 0,
58192 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58193
58194 {&hf_ieee80211_tag_timeout_int_value,
58195 {"Timeout Interval Value", "wlan.timeout_int.value",
58196 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
58197 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58198
58199 /* Link Identifier */
58200 {&hf_ieee80211_tag_link_id_bssid,
58201 {"BSSID", "wlan.link_id.bssid",
58202 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
58203 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58204
58205 {&hf_ieee80211_tag_link_id_init_sta,
58206 {"TDLS initiator STA Address", "wlan.link_id.init_sta",
58207 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
58208 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58209
58210 {&hf_ieee80211_tag_link_id_resp_sta,
58211 {"TDLS responder STA Address", "wlan.link_id.resp_sta",
58212 FT_ETHER, BASE_NONE, NULL((void*)0), 0,
58213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58214
58215 /* Wakeup Schedule */
58216 {&hf_ieee80211_tag_wakeup_schedule_offset,
58217 {"Offset", "wlan.wakeup_schedule.offset",
58218 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
58219 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58220
58221 {&hf_ieee80211_tag_wakeup_schedule_interval,
58222 {"Interval", "wlan.wakeup_schedule.interval",
58223 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
58224 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58225
58226 {&hf_ieee80211_tag_wakeup_schedule_awake_window_slots,
58227 {"Awake Window Slots", "wlan.wakeup_schedule.awake_window_slots",
58228 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
58229 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58230
58231 {&hf_ieee80211_tag_wakeup_schedule_max_awake_dur,
58232 {"Maximum Awake Window Duration", "wlan.wakeup_schedule.max_awake_dur",
58233 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
58234 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58235
58236 {&hf_ieee80211_tag_wakeup_schedule_idle_count,
58237 {"Idle Count", "wlan.wakeup_schedule.idle_count",
58238 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
58239 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58240
58241 /* Channel Switch Timing */
58242 {&hf_ieee80211_tag_channel_switch_timing_switch_time,
58243 {"Switch Time", "wlan.channel_switch_timing.switch_time",
58244 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
58245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58246
58247 {&hf_ieee80211_tag_channel_switch_timing_switch_timeout,
58248 {"Switch Timeout", "wlan.channel_switch_timing.switch_timeout",
58249 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
58250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58251
58252 /* PTI Control */
58253 {&hf_ieee80211_tag_pti_control_tid,
58254 {"TID", "wlan.pti_control.tid",
58255 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
58256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58257
58258 {&hf_ieee80211_tag_pti_control_sequence_control,
58259 {"Sequence Control", "wlan.pti_control.sequence_control",
58260 FT_UINT16, BASE_HEX, NULL((void*)0), 0,
58261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58262
58263 /* PU Buffer Status */
58264 {&hf_ieee80211_tag_pu_buffer_status_ac_bk,
58265 {"AC_BK traffic available", "wlan.pu_buffer_status.ac_bk",
58266 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
58267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58268
58269 {&hf_ieee80211_tag_pu_buffer_status_ac_be,
58270 {"AC_BE traffic available", "wlan.pu_buffer_status.ac_be",
58271 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
58272 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58273
58274 {&hf_ieee80211_tag_pu_buffer_status_ac_vi,
58275 {"AC_VI traffic available", "wlan.pu_buffer_status.ac_vi",
58276 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
58277 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58278
58279 {&hf_ieee80211_tag_pu_buffer_status_ac_vo,
58280 {"AC_VO traffic available", "wlan.pu_buffer_status.ac_vo",
58281 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
58282 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58283
58284 /* 60g ie */
58285 {&hf_ieee80211_wfa_60g_attr,
58286 {"Attribute", "wlan.60g.attr",
58287 FT_NONE, BASE_NONE, NULL((void*)0), 0,
58288 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58289
58290 {&hf_ieee80211_wfa_60g_attr_id,
58291 {"Attribute ID", "wlan.60g.attr.id",
58292 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_60g_attr_ids)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_60g_attr_ids
))))
, 0x0,
58293 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58294
58295 {&hf_ieee80211_wfa_60g_attr_len,
58296 {"Attribute Length", "wlan.60g.attr.length",
58297 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
58298 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58299
58300 {&hf_ieee80211_wfa_60g_attr_cap_sta_mac_addr,
58301 {"STA Address", "wlan.60g.attr.60g_cap.sta_mac_addr",
58302 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0,
58303 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58304
58305 {&hf_ieee80211_wfa_60g_attr_cap_recv_amsdu_frames,
58306 {"Receive Capability AMSDU", "wlan.60g.attr.60g_cap.recv_amsdu",
58307 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
58308 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58309
58310 {&hf_ieee80211_wfa_60g_attr_cap_reserved,
58311 {"Reserved", "wlan.60g.attr.60g_cap.reserved",
58312 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfe,
58313 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58314
58315 {&hf_ieee80211_mysterious_extra_stuff,
58316 {"Mysterious extra OLPC/Ruckus/Atheros/Vector/??? stuff", "wlan.mysterious_extra_stuff",
58317 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
58318 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58319
58320 {&hf_ieee80211_mscs_descriptor_type,
58321 {"Request Type", "wlan.ext_tag.mscs_descriptor.request_type",
58322 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(scs_request_type_rvals)((0 ? (const struct _range_string*)0 : ((scs_request_type_rvals
))))
,
58323 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58324
58325 {&hf_ieee80211_mscs_user_prio_control_reserved,
58326 {"Reserved", "wlan.ext_tag.mscs_descriptor.reserved1",
58327 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58328
58329 {&hf_ieee80211_user_prio_bitmap,
58330 {"User Priority Bitmap",
58331 "wlan.ext_tag.mscs_descriptor.user_prio_control.upbm",
58332 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58333
58334 {&hf_ieee80211_user_prio_bitmap_bit0,
58335 {"User Priority 0",
58336 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_0",
58337 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) }},
58338
58339 {&hf_ieee80211_user_prio_bitmap_bit1,
58340 {"User Priority 1",
58341 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_1",
58342 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) }},
58343
58344 {&hf_ieee80211_user_prio_bitmap_bit2,
58345 {"User Priority 2",
58346 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_2",
58347 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) }},
58348
58349 {&hf_ieee80211_user_prio_bitmap_bit3,
58350 {"User Priority 3",
58351 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_3",
58352 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) }},
58353
58354 {&hf_ieee80211_user_prio_bitmap_bit4,
58355 {"User Priority 4",
58356 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_4",
58357 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) }},
58358
58359 {&hf_ieee80211_user_prio_bitmap_bit5,
58360 {"User Priority 5",
58361 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_5",
58362 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) }},
58363
58364 {&hf_ieee80211_user_prio_bitmap_bit6,
58365 {"User Priority 6",
58366 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_6",
58367 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) }},
58368
58369 {&hf_ieee80211_user_prio_bitmap_bit7,
58370 {"User Priority 7",
58371 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_7",
58372 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) }},
58373
58374 {&hf_ieee80211_user_prio_limit,
58375 {"User Priority Limit",
58376 "wlan.ext_tag.mscs_descriptor.user_prio_control.user_prio_limit",
58377 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58378
58379 {&hf_ieee80211_user_prio_reserved,
58380 {"Reserved", "wlan.ext_tag.mscs_descriptor.user_prio_control.reserved",
58381 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58382
58383 {&hf_ieee80211_stream_timeout_reserved,
58384 {"Reserved", "wlan.ext_tag.mscs_descriptor.reserved2",
58385 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58386
58387 {&hf_ieee80211_stream_timeout,
58388 {"Stream Timeout", "wlan.ext_tag.mscs_descriptor.stream_timeout",
58389 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) }},
58390
58391 {&hf_ieee80211_mscs_subelement_id,
58392 {"MSCS Subelement ID", "wlan.ext_tag.mscs_descriptor.subelement_id",
58393 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58394
58395 {&hf_ieee80211_mscs_subelement_len,
58396 {"MSCS Subelement Length", "wlan.ext_tag.mscs_descriptor.subelement_len",
58397 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58398
58399 {&hf_ieee80211_mscs_subelement_data,
58400 {"MSCS Subelement Data", "wlan.ext_tag.mscs_descriptor.subelement_data",
58401 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58402
58403 {&hf_ieee80211_intra_access_prio,
58404 {"Intra-Access Priority", "wlan.tag.scs_intra_access_prio",
58405 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58406
58407 {&hf_ieee80211_intra_access_prio_user_prio,
58408 {"User Priority", "wlan.tag.scs_intra_access_prio.user_prio",
58409 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58410
58411 {&hf_ieee80211_intra_access_prio_alt_queue,
58412 {"Alternate Queue", "wlan.tag.scs_intra_access_prio.alt_queue",
58413 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58414
58415 {&hf_ieee80211_intra_access_prio_drop_elig,
58416 {"Drop Eligibility", "wlan.tag.scs_intra_access_prio.drop_elig",
58417 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58418
58419 {&hf_ieee80211_intra_access_prio_reserved,
58420 {"Reserved", "wlan.tag.scs_intra_access_prio.reserved",
58421 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58422
58423 {&hf_ieee80211_scs_descriptor_scsid,
58424 {"SCSID", "wlan.tag.scs_descriptor.scsid",
58425 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58426
58427 {&hf_ieee80211_scs_descriptor_type,
58428 {"Request Type", "wlan.tag.scs_descriptor.request_type",
58429 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(scs_request_type_rvals)((0 ? (const struct _range_string*)0 : ((scs_request_type_rvals
))))
,
58430 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58431
58432 {&hf_ieee80211_estimated_service_params,
58433 {"Estimated Service Parameters", "wlan.ext_tag.estimated_service_params",
58434 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58435
58436 {&hf_ieee80211_esp_access_category,
58437 {"Access Category", "wlan.ext_tag.estimated_service_params.access_category",
58438 FT_UINT24, BASE_DEC, VALS(esp_access_category_vals)((0 ? (const struct _value_string*)0 : ((esp_access_category_vals
))))
, 0x000003,
58439 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58440
58441 {&hf_ieee80211_esp_reserved,
58442 {"Reserved", "wlan.ext_tag.estimated_service_params.reserved",
58443 FT_UINT24, BASE_HEX, NULL((void*)0), 0x000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58444
58445 {&hf_ieee80211_esp_data_format,
58446 {"Data Format", "wlan.ext_tag.estimated_service_params.data_format",
58447 FT_UINT24, BASE_DEC, VALS(esp_data_format_vals)((0 ? (const struct _value_string*)0 : ((esp_data_format_vals
))))
, 0x000018,
58448 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58449
58450 {&hf_ieee80211_esp_ba_windows_size,
58451 {"BA Window Size", "wlan.ext_tag.estimated_service_params.ba_window_size",
58452 FT_UINT24, BASE_DEC, VALS(esp_ba_window_size_vals)((0 ? (const struct _value_string*)0 : ((esp_ba_window_size_vals
))))
, 0x0000E0,
58453 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58454
58455 {&hf_ieee80211_esp_est_air_time_frac,
58456 {"Estimated Air Time Fraction", "wlan.ext_tag.estimated_service_params.air_time_frac",
58457 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00FF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58458
58459 {&hf_ieee80211_esp_data_ppdu_duration_target,
58460 {"Data PPDU Duration Target", "wlan.ext_tag.estimated_service_params.data_ppdu_dur_target",
58461 FT_UINT24, BASE_DEC, NULL((void*)0), 0xFF0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58462
58463 {&hf_ieee80211_fcg_new_channel_number,
58464 {"New Channel Number", "wlan.ext_tag.future_channel_guidance.new_chan_num",
58465 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58466
58467 {&hf_ieee80211_fcg_extra_info,
58468 {"Extra bytes", "wlan.ext_tag.future_channel_guidance.extra_bytes",
58469 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58470
58471 {&hf_ieee80211_sae_password_identifier,
58472 {"Password Identifier", "wlan.ext_tag.sae.password_identifier",
58473 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58474
58475 {&hf_ieee80211_sae_anti_clogging_token,
58476 {"Anti-Clogging Token", "wlan.ext_tag.sae.anti_clogging_token",
58477 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58478 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58479
58480 {&hf_ieee80211_tag_fils_indication_info_nr_pk,
58481 {"Number of Public Key Identifiers", "wlan.fils_indication.info.nr_pk",
58482 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) }},
58483
58484 {&hf_ieee80211_tag_fils_indication_info_nr_realm,
58485 {"Number of Realm Identifiers", "wlan.fils_indication.info.nr_realm",
58486 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) }},
58487
58488 {&hf_ieee80211_tag_fils_indication_info_ip_config,
58489 {"FILS IP Address Configuration", "wlan.fils_indication.info.ip_config",
58490 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) }},
58491
58492 {&hf_ieee80211_tag_fils_indication_info_cache_id_included,
58493 {"Cache Identifier", "wlan.fils_indication.info.cache_id_included",
58494 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) }},
58495
58496 {&hf_ieee80211_tag_fils_indication_info_hessid_included,
58497 {"HESSID", "wlan.fils_indication.info.hessid_included",
58498 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) }},
58499
58500 {&hf_ieee80211_tag_fils_indication_info_ska_without_pfs,
58501 {"FILS Shared Key Authentication without PFS", "wlan.fils_indication.info.ska_without_pfs",
58502 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) }},
58503
58504 {&hf_ieee80211_tag_fils_indication_info_ska_with_pfs,
58505 {"FILS Shared Key Authentication with PFS", "wlan.fils_indication.info.ska_with_pfs",
58506 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) }},
58507
58508 {&hf_ieee80211_tag_fils_indication_info_pka,
58509 {"FILS Public Key Authentication", "wlan.fils_indication.info.pka",
58510 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) }},
58511
58512 {&hf_ieee80211_tag_fils_indication_info_reserved,
58513 {"Reserved", "wlan.fils_indication.info.reserved",
58514 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) }},
58515
58516 {&hf_ieee80211_tag_fils_indication_cache_identifier,
58517 {"Cache Identifier", "wlan.fils_indication.cache_identifier",
58518 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58519
58520 {&hf_ieee80211_tag_fils_indication_hessid,
58521 {"HESSID", "wlan.fils_indication.hessid",
58522 FT_ETHER, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58523
58524 {&hf_ieee80211_tag_fils_indication_realm_list,
58525 {"Realm Identifiers", "wlan.fils_indication.realms",
58526 FT_NONE, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58527
58528 {&hf_ieee80211_tag_fils_indication_realm_identifier,
58529 {"Realm Identifier", "wlan.fils_indication.realms.identifier",
58530 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58531
58532 {&hf_ieee80211_tag_fils_indication_public_key_list,
58533 {"Public Keys", "wlan.fils_indication.public_keys",
58534 FT_NONE, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58535
58536 {&hf_ieee80211_tag_fils_indication_public_key_type,
58537 {"Key Type", "wlan.fils_indication.public_keys.key_type",
58538 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58539
58540 {&hf_ieee80211_tag_fils_indication_public_key_length,
58541 {"Length", "wlan.fils_indication.public_keys.length",
58542 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58543
58544 {&hf_ieee80211_tag_fils_indication_public_key_indicator,
58545 {"Public Key Indicator", "wlan.fils_indication.public_keys.indicator",
58546 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58547
58548 {&hf_ieee80211_qos_mgmt_attribute_id,
58549 {"Attribute ID", "wlan.qos_mgmt.ie.attribute_id",
58550 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(qos_mgmt_attributes)((0 ? (const struct _range_string*)0 : ((qos_mgmt_attributes)
)))
, 0,
58551 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58552
58553 {&hf_ieee80211_qos_mgmt_attribute_len,
58554 {"Length", "wlan.qos_mgmt.ie.length",
58555 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58556
58557 {&hf_ieee80211_qos_mgmt_start_port_range,
58558 {"Start Port", "wlan.qos_mgmt.ie.start_port",
58559 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58560
58561 {&hf_ieee80211_qos_mgmt_end_port_range,
58562 {"End Port", "wlan.qos_mgmt.ie.end_port",
58563 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58564
58565 {&hf_ieee80211_qos_mgmt_dscp_pol_id,
58566 {"Policy ID", "wlan.qos_mgmt.ie.dscp_policy.policy_id",
58567 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58568
58569 {&hf_ieee80211_qos_mgmt_dscp_pol_req_type,
58570 {"Request Type", "wlan.qos_mgmt.ie.dscp_policy.request_type",
58571 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58572
58573 {&hf_ieee80211_qos_mgmt_dscp_pol_dscp,
58574 {"DSCP", "wlan.qos_mgmt.ie.dscp_policy.dscp",
58575 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58576
58577 {&hf_ieee80211_qos_mgmt_domain_name,
58578 {"Domain Name", "wlan.qos_mgmt.ie.domain_name",
58579 FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58580
58581 {&hf_ieee80211_qos_mgmt_unknown_attr,
58582 {"Unknown attribute", "wlan.qos_mgmt.ie.unknown_attribute",
58583 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58584
58585 {&hf_ieee80211_wfa_capa_tag_data,
58586 {"WFA Capabilities Data", "wlan.wfa_capa.ie.data",
58587 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58588
58589 {&hf_ieee80211_wfa_capa_tag_len,
58590 {"Capabilities Length", "wlan.wfa_capa.ie.capabilities_length",
58591 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58592
58593 {&hf_ieee80211_wfa_capa_tag_capabilities,
58594 {"Capabilities", "wlan.wfa_capa.ie.capabilities",
58595 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58596
58597 {&hf_ieee80211_wfa_capa_mgmt_dscp_policy,
58598 {"QoS Management DSCP Policy",
58599 "wlan.wfa_capa.ie.capabilities.b0",
58600 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58601
58602 {&hf_ieee80211_wfa_capa_mgmt_unsol_dscp_policy,
58603 {"QoS Management Unsolicited DSCP Policy At Association",
58604 "wlan.wfa_capa.ie.capabilities.b1",
58605 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58606
58607 {&hf_ieee80211_wfa_capa_mgmt_scs_traffic_desc,
58608 {"QoS Management SCS Traffic Description",
58609 "wlan.wfa_capa.ie.capabilities.b2",
58610 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58611
58612 {&hf_ieee80211_wfa_capa_5g_wifi_qos_mapping,
58613 {"5G QoS to Wi-Fi QoS Mapping",
58614 "wlan.wfa_capa.ie.capabilities.b3",
58615 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58616
58617 {&hf_ieee80211_wfa_capa_data_plane_stat_report,
58618 {"Data Plane Statistics Reporting Support",
58619 "wlan.wfa_capa.ie.capabilities.b4",
58620 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58621
58622 {&hf_ieee80211_wfa_capa_radio_counters_stat_support,
58623 {"Radio Counters Statistics Support",
58624 "wlan.wfa_capa.ie.capabilities.b5",
58625 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58626
58627 {&hf_ieee80211_wfa_capa_control_plane_stat_report,
58628 {"Control Plane Statistics Reporting Support",
58629 "wlan.wfa_capa.ie.capabilities.b6",
58630 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58631
58632 {&hf_ieee80211_wfa_capa_unsolicited_report_support,
58633 {"Unsolicited Report Support",
58634 "wlan.wfa_capa.ie.capabilities.b7",
58635 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58636
58637 {&hf_ieee80211_wfa_capa_attr_id,
58638 {"Attribute ID", "wlan.wfa_capa.ie.attribute_id",
58639 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(wfa_capa_attr_id)((0 ? (const struct _range_string*)0 : ((wfa_capa_attr_id)))),
58640 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58641
58642 {&hf_ieee80211_wfa_capa_attr_len,
58643 {"Attribute Length", "wlan.wfa_capa.ie.attribute_length",
58644 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58645
58646 {&hf_ieee80211_wfa_capa_attr_field,
58647 {"Attribute Body Field", "wlan.wfa_capa.ie.attribute_body_field",
58648 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58649
58650 {&hf_ieee80211_wfa_capa_attr_supp_gene_length,
58651 {"Supported Generations Length", "wlan.wfa_capa.ie.supported_generations_length",
58652 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58653
58654 {&hf_ieee80211_wfa_capa_attr_supp_generations,
58655 {"Supported Generations", "wlan.wfa_capa.ie.supported_generations",
58656 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58657
58658 {&hf_ieee80211_wfa_capa_attr_supp_generations_b0,
58659 {"Wi-Fi 4 Supported", "wlan.wfa_capa.ie.supported_generations.b0",
58660 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58661
58662 {&hf_ieee80211_wfa_capa_attr_supp_generations_b1,
58663 {"Wi-Fi 5 Supported", "wlan.wfa_capa.ie.supported_generations.b1",
58664 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58665
58666 {&hf_ieee80211_wfa_capa_attr_supp_generations_b2,
58667 {"Wi-Fi 6 Supported", "wlan.wfa_capa.ie.supported_generations.b2",
58668 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58669
58670 {&hf_ieee80211_wfa_capa_attr_supp_generations_b3,
58671 {"Wi-Fi 7 Supported", "wlan.wfa_capa.ie.supported_generations.b3",
58672 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58673
58674 {&hf_ieee80211_wfa_capa_attr_supp_generations_reserved,
58675 {"Reserved", "wlan.wfa_capa.ie.supported_generations.reserved",
58676 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58677
58678 {&hf_ieee80211_wfa_capa_attr_cert_gene_length,
58679 {"Certified Generations Length", "wlan.wfa_capa.ie.certified_generations_length",
58680 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58681
58682 {&hf_ieee80211_wfa_capa_attr_cert_generations,
58683 {"Certified Generations", "wlan.wfa_capa.ie.certified_generations",
58684 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58685
58686 {&hf_ieee80211_wfa_capa_attr_cert_generations_b0,
58687 {"Wi-Fi CERTIFIED n", "wlan.wfa_capa.ie.certified_generations.b0",
58688 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58689
58690 {&hf_ieee80211_wfa_capa_attr_cert_generations_b1,
58691 {"Wi-Fi CERTIFIED ac", "wlan.wfa_capa.ie.certified_generations.b1",
58692 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58693
58694 {&hf_ieee80211_wfa_capa_attr_cert_generations_b2,
58695 {"Wi-Fi CERTIFIED 6", "wlan.wfa_capa.ie.certified_generations.b2",
58696 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58697
58698 {&hf_ieee80211_wfa_capa_attr_cert_generations_b3,
58699 {"Wi-Fi CERTIFIED 7", "wlan.wfa_capa.ie.certified_generations.b3",
58700 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58701
58702 {&hf_ieee80211_wfa_capa_attr_cert_generations_reserved,
58703 {"Reserved", "wlan.wfa_capa.ie.certified_generations.reserved",
58704 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58705
58706 {&hf_ieee80211_ext_tag,
58707 {"Ext Tag", "wlan.ext_tag",
58708 FT_NONE, BASE_NONE, NULL((void*)0), 0,
58709 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58710
58711 {&hf_ieee80211_ext_tag_number,
58712 {"Ext Tag Number", "wlan.ext_tag.number",
58713 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &tag_num_vals_eid_ext_ext, 0,
58714 "Element ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58715
58716 {&hf_ieee80211_ext_tag_length,
58717 {"Ext Tag length", "wlan.ext_tag.length",
58718 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
58719 "Length of tag", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58720
58721 {&hf_ieee80211_ext_tag_data,
58722 {"Ext Tag Data", "wlan.ext_tag.data",
58723 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
58724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58725
58726 {&hf_ieee80211_fils_req_params_parameter_control_bitmap,
58727 {"Parameter Control Bitmap", "wlan.ext_tag.fils.req_params.parameter_control_bitmap",
58728 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58730
58731 {&hf_ieee80211_fils_req_params_fils_criteria_present,
58732 {"FILS Criteria Present", "wlan.ext_tag.fils.req_params.fils_criteria_present",
58733 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA0x01,
58734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58735
58736 {&hf_ieee80211_fils_req_params_max_delay_limit_present,
58737 {"Max Delay Limit Present", "wlan.ext_tag.fils.req_params.max_delay_limit_present",
58738 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_MAX_DELAY_LIMIT0x02,
58739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58740
58741 {&hf_ieee80211_fils_req_params_minimum_data_rate_present,
58742 {"Minimum Data Rate Present", "wlan.ext_tag.fils.req_params.minimum_data_rate_present",
58743 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_MINIMUM_DATA_RATE0x04,
58744 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58745
58746 {&hf_ieee80211_fils_req_params_rcpi_limit_present,
58747 {"RCPI Limit Present", "wlan.ext_tag.fils.req_params.rcpi_limit_present",
58748 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_RCPI_LIMIT0x08,
58749 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58750
58751 {&hf_ieee80211_fils_req_params_oui_response_criteria_present,
58752 {"OUI Response Criteria Present", "wlan.ext_tag.fils.req_params.oui_response_criteria_present",
58753 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_OUI_RESPONSE_CRITERIA0x10,
58754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58755
58756 {&hf_ieee80211_fils_req_params_reserved,
58757 {"Reserved", "wlan.ext_tag.fils.req_params.reserved",
58758 FT_UINT8, BASE_HEX, NULL((void*)0), FILS_REQ_PARAMS_RESERVED0xE0,
58759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58760
58761 {&hf_ieee80211_fils_req_params_max_channel_time,
58762 {"Max Channel Time", "wlan.ext_tag.fils.req_params.max_channel_time",
58763 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58765
58766 {&hf_ieee80211_fils_req_params_fils_criteria,
58767 {"FILS Criteria", "wlan.ext_tag.fils.req_params.fils_criteria",
58768 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58770
58771 {&hf_ieee80211_fils_req_params_fils_criteria_bss_delay,
58772 {"BSS Delay", "wlan.ext_tag.fils.req_params.fils_criteria.bss_delay",
58773 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_BSS_DELAY0x07,
58774 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58775
58776 {&hf_ieee80211_fils_req_params_fils_criteria_phy_support,
58777 {"PHY Support", "wlan.ext_tag.fils.req_params.fils_criteria.phy_support",
58778 FT_BOOLEAN, 8, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_PHY_SUPPORT0x38,
58779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58780
58781 {&hf_ieee80211_fils_req_params_fils_criteria_reserved,
58782 {"Reserved", "wlan.ext_tag.fils.req_params.fils_criteria.reserved",
58783 FT_UINT8, BASE_HEX, NULL((void*)0), FILS_REQ_PARAMS_FILS_CRITERIA_RESERVED0xC0,
58784 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58785
58786 {&hf_ieee80211_fils_req_params_max_delay_limit,
58787 {"Max Delay Limit", "wlan.ext_tag.fils.req_params.max_delay_limit",
58788 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58790
58791 {&hf_ieee80211_fils_req_params_minimum_data_rate,
58792 {"Minimum Data Rate", "wlan.ext_tag.fils.req_params.minimum_data_rate",
58793 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
58794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58795
58796 {&hf_ieee80211_fils_req_params_rcpi_limit,
58797 {"RCPI Limit", "wlan.ext_tag.fils.req_params.rcpi_limit",
58798 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
58799 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58800
58801 {&hf_ieee80211_fils_req_params_oui_response_criteria,
58802 {"OUI Response Criteria", "wlan.ext_tag.fils.req_params.oui_response_criteria",
58803 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
58804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58805
58806 {&hf_ieee80211_fils_session,
58807 {"FILS Session", "wlan.ext_tag.fils.session",
58808 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58810
58811 {&hf_ieee80211_fils_encrypted_data,
58812 {"FILS Encrypted Data", "wlan.ext_tag.fils.encrypted_data",
58813 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58815
58816 {&hf_ieee80211_fils_nonce,
58817 {"FILS Nonce", "wlan.ext_tag.fils.nonce",
58818 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
58819 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58820
58821 {&hf_ieee80211_he_mac_capabilities,
58822 {"HE MAC Capabilities Information", "wlan.ext_tag.he_mac_caps",
58823 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58824
58825 {&hf_ieee80211_he_htc_he_support,
58826 {"+HTC HE Support", "wlan.ext_tag.he_mac_cap.htc_he_support",
58827 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000001,
58828 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58829
58830 {&hf_ieee80211_he_twt_requester_support,
58831 {"TWT Requester Support", "wlan.ext_tag.he_mac_cap.twt_req_support",
58832 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000002,
58833 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58834
58835 {&hf_ieee80211_he_twt_responder_support,
58836 {"TWT Responder Support", "wlan.ext_tag.he_mac_cap.twt_rsp_support",
58837 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000000004,
58838 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58839
58840 {&hf_ieee80211_he_dynamic_fragmentation_support,
58841 {"Dynamic Fragmentation Support", "wlan.ext_tag.he_mac_cap.dynamic_fragmentation_support",
58842 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58843 VALS64(he_dynamic_fragmentation_support_vals)((0 ? (const struct _val64_string*)0 : ((he_dynamic_fragmentation_support_vals
))))
, 0x000000000018,
58844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58845
58846 {&hf_ieee80211_he_max_number_fragmented_msdus,
58847 {"Maximum Number of Fragmented MSDUs", "wlan.ext_tag.he_mac_cap.max_frag_msdus",
58848 FT_UINT48, BASE_CUSTOM, CF_FUNC(max_frag_msdus_base_custom)((const void *) (size_t) (max_frag_msdus_base_custom)), 0x0000000000E0,
58849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58850
58851 {&hf_ieee80211_he_min_fragment_size,
58852 {"Minimum Fragment Size", "wlan.ext_tag.he_mac_cap.min_frag_size",
58853 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58854 VALS64(he_minimum_fragmentation_size_vals)((0 ? (const struct _val64_string*)0 : ((he_minimum_fragmentation_size_vals
))))
, 0x000000000300,
58855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58856
58857 {&hf_ieee80211_he_trigger_frame_mac_padding_dur,
58858 {"Trigger Frame MAC Padding Duration", "wlan.ext_tag.he_mac_cap.trig_frm_mac_padding_dur",
58859 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) }},
58860
58861 {&hf_ieee80211_he_multi_tid_aggregation_rx_support,
58862 {"Multi-TID Aggregation Rx Support", "wlan.ext_tag.he_mac_cap.multi_tid_agg_rx_support",
58863 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000000007000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58864
58865 {&hf_ieee80211_he_he_link_adaptation_support,
58866 {"HE Link Adaptation Support", "wlan.ext_tag.he_mac_cap.he_link_adaptation_support",
58867 FT_UINT48, BASE_DEC|BASE_VAL64_STRING0x00000400,
58868 VALS64(he_link_adaptation_support_vals)((0 ? (const struct _val64_string*)0 : ((he_link_adaptation_support_vals
))))
, 0x000000018000,
58869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58870
58871 {&hf_ieee80211_he_all_ack_support,
58872 {"All Ack Support", "wlan.ext_tag.he_mac_cap.all_ack_support",
58873 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000020000,
58874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58875
58876 {&hf_ieee80211_he_trs_support,
58877 {"TRS Support", "wlan.ext_tag.he_mac_cap.trs_support",
58878 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000040000,
58879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58880
58881 {&hf_ieee80211_he_bsr_support,
58882 {"BSR Support", "wlan.ext_tag.he_mac_cap.bsr_support",
58883 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000080000,
58884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58885
58886 {&hf_ieee80211_he_broadcast_twt_support,
58887 {"Broadcast TWT Support", "wlan.ext_tag.he_mac_cap.broadcast_twt_support",
58888 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000100000,
58889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58890
58891 {&hf_ieee80211_he_32_bit_ba_bitmap_support,
58892 {"32-bit BA Bitmap Support", "wlan.ext_tag.he_mac_cap.32_bit_ba_bitmap_support",
58893 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000200000,
58894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58895
58896 {&hf_ieee80211_he_mu_cascading_support,
58897 {"MU Cascading Support", "wlan.ext_tag.he_mac_cap.mu_cascading_support",
58898 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000400000,
58899 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58900
58901 {&hf_ieee80211_he_ack_enabled_aggregation_support,
58902 {"Ack-Enabled Aggregation Support", "wlan.ext_tag.he_mac_cap.ack_enabled_agg_support",
58903 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000000800000,
58904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58905
58906 {&hf_ieee80211_he_reserved_b24,
58907 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_b24",
58908 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000001000000,
58909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58910
58911 {&hf_ieee80211_he_om_control_support,
58912 {"OM Control Support", "wlan.ext_tag.he_mac_cap.om_control_support",
58913 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000002000000,
58914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58915
58916 {&hf_ieee80211_he_ofdma_ra_support,
58917 {"OFDMA RA Support", "wlan.ext_tag.he_mac_cap.ofdma_ra_support",
58918 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000004000000,
58919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58920
58921 {&hf_ieee80211_he_max_a_mpdu_length_exponent_ext,
58922 {"Maximum A-MPDU Length Exponent Extension",
58923 "wlan.ext_tag.he_mac_cap.max_a_mpdu_len_exp_ext",
58924 FT_UINT48, BASE_DEC, NULL((void*)0), 0x000018000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58925
58926 {&hf_ieee80211_he_a_msdu_fragmentation_support,
58927 {"A-MSDU Fragmentation Support", "wlan.ext_tag.he_mac_cap.a_msdu_frag_support",
58928 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000020000000,
58929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58930
58931 {&hf_ieee80211_he_flexible_twt_schedule_support,
58932 {"Flexible TWT Schedule Support", "wlan.ext_tag.he_mac_cap.flexible_twt_sched_support",
58933 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000040000000,
58934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58935
58936 {&hf_ieee80211_he_rx_control_frame_to_multibss,
58937 {"Rx Control Frame to MultiBSS", "wlan.ext_tag.he_mac_cap.rx_ctl_frm_multibss",
58938 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000080000000,
58939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58940
58941 {&hf_ieee80211_he_bsrp_bqrp_a_mpdu_aggregation,
58942 {"BSRP BQRP A-MPDU Aggregation", "wlan.ext_tag.he_mac_cap.bsrp_bqrp_a_mpdu_agg",
58943 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000100000000,
58944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58945
58946 {&hf_ieee80211_he_qtp_support,
58947 {"QTP Support", "wlan.ext_tag.he_mac_cap.qtp_support",
58948 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000200000000,
58949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58950
58951 {&hf_ieee80211_he_bqr_support,
58952 {"BQR Support", "wlan.ext_tag.he_mac_cap.bqr_support",
58953 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000400000000,
58954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58955
58956 {&hf_ieee80211_he_psr_responder,
58957 {"PSR Responder", "wlan.ext_tag.he_mac_cap.psr_responder",
58958 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x000800000000,
58959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58960
58961 {&hf_ieee80211_he_ndp_feedback_report_support,
58962 {"NDP Feedback Report Support", "wlan.ext_tag.he_mac_cap.ndp_feedback_report_support",
58963 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x001000000000,
58964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58965
58966 {&hf_ieee80211_he_ops_support,
58967 {"OPS Support", "wlan.ext_tag.he_mac_cap.ops_support",
58968 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x002000000000,
58969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58970
58971 {&hf_ieee80211_he_a_msdu_in_a_mpdu_support,
58972 {"A-MSDU Not Under BA in Ack-Enabled A-MPDU Support", "wlan.ext_tag.he_mac_cap.a_msdu_in_a_mpdu_support",
58973 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x004000000000,
58974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58975
58976 {&hf_ieee80211_he_multi_tid_aggregation_tx_support,
58977 {"Multi-TID Aggregation Tx Support", "wlan.ext_tag.he_mac_cap.multi_tid_agg_tx_support",
58978 FT_UINT48, BASE_DEC, NULL((void*)0), 0x038000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58979
58980 {&hf_ieee80211_he_subchannel_selective_trans_support,
58981 {"HE Subchannel Selective Transmission Support", "wlan.ext_tag.he_mac_cap.subchannel_selective_xmit_support",
58982 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58983 0x040000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58984
58985 {&hf_ieee80211_he_2_996_tone_ru_support,
58986 {"UL 2x996-tone RU Support", "wlan.ext_tag.he_mac_cap.ul_2_996_tone_ru_support",
58987 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58988 0x080000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58989
58990 {&hf_ieee80211_he_om_control_ul_mu_data_disable_rx_support,
58991 {"OM Control UL MU Data Disable RX Support", "wlan.ext_tag.he_mac_cap.om_cntl_ul_mu_data_disable_rx_support",
58992 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58993 0x100000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58994
58995 {&hf_ieee80211_he_dynamic_sm_power_save,
58996 {"HE Dynamic SM Power Save", "wlan.ext_tag.he_mac_cap.dynamic_sm_power_save",
58997 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
58998 0x200000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
58999
59000 {&hf_ieee80211_he_punctured_sounding_support,
59001 {"Punctured Sounding Support", "wlan.ext_tag.he_mac_cap.punctured_sounding_support",
59002 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
59003 0x400000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59004
59005 {&hf_ieee80211_he_ht_and_vht_trigger_frame_rx_support,
59006 {"HT And VHT Trigger Frame RX Support", "wlan.ext_tag.he_mac_cap.ht_and_vht_trigger_frame_rx_support",
59007 FT_BOOLEAN, 48, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
59008 0x800000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59009
59010 {&hf_ieee80211_he_reserved_bits_5_7,
59011 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_5_7",
59012 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0000000000E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59013
59014 {&hf_ieee80211_he_reserved_bits_8_9,
59015 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_8_9",
59016 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000000300, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59017
59018 {&hf_ieee80211_he_reserved_bits_15_16,
59019 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bits_15_16",
59020 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000018000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59021
59022 {&hf_ieee80211_he_reserved_bit_18,
59023 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_18",
59024 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000040000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59025
59026 {&hf_ieee80211_he_reserved_bit_19,
59027 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_19",
59028 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000000080000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59029
59030 {&hf_ieee80211_he_reserved_bit_25,
59031 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_25",
59032 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000002000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59033
59034 {&hf_ieee80211_he_reserved_bit_29,
59035 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_29",
59036 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000020000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59037
59038 {&hf_ieee80211_he_reserved_bit_34,
59039 {"Reserved", "wlan.ext_tag.he_mac_cap.reserved_bit_34",
59040 FT_UINT48, BASE_HEX, NULL((void*)0), 0x000400000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59041
59042 {&hf_ieee80211_he_phy_reserved_b0,
59043 {"Reserved", "wlan.ext_tag.he_phy_cap.reserved_b0",
59044 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59045
59046 {&hf_ieee80211_he_phy_cap_reserved_b0,
59047 {"Reserved", "wlan.ext_tag.he_phy_cap.fbyte.reserved_b0",
59048 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01,
59049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59050
59051 {&hf_ieee80211_he_phy_chan_width_set,
59052 {"Channel Width Set", "wlan.ext_tag.he_phy_cap.fbytes",
59053 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59054
59055 {&hf_ieee80211_he_40mhz_channel_2_4ghz,
59056 {"40 MHz in 2.4 GHz band", "wlan.ext_tag.he_phy_cap.chan_width_set.40mhz_in_2_4ghz",
59057 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) }},
59058
59059 {&hf_ieee80211_he_40_and_80_mhz_5ghz,
59060 {"40 & 80 MHz in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.40_80_in_5ghz",
59061 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) }},
59062
59063 {&hf_ieee80211_he_160_mhz_5ghz,
59064 {"160 MHz in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.160_in_5ghz",
59065 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) }},
59066
59067 {&hf_ieee80211_he_160_80_plus_80_mhz_5ghz,
59068 {"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",
59069 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) }},
59070
59071 {&hf_ieee80211_he_242_tone_rus_in_2_4ghz,
59072 {"242 tone RUs in the 2.4 GHz band", "wlan.ext_tag.he_phy_cap.chan_width_set.242_tone_in_2_4ghz",
59073 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) }},
59074
59075 {&hf_ieee80211_he_242_tone_rus_in_5ghz,
59076 {"242 tone RUs in the 5 GHz and 6 GHz bands", "wlan.ext_tag.he_phy_cap.chan_width_set.242_tone_in_5ghz",
59077 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) }},
59078
59079 {&hf_ieee80211_he_chan_width_reserved,
59080 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width_set.reserved",
59081 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59082
59083 {&hf_ieee80211_he_phy_b8_to_b23,
59084 {"Bits 8 to 23", "wlan.ext_tag.he_phy_cap.bits_8_to_23",
59085 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59086
59087 {&hf_ieee80211_he_5ghz_b0_reserved,
59088 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.5GHz_b0_reserved",
59089 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59090
59091 {&hf_ieee80211_he_5ghz_b4_reserved,
59092 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.5GHz_b4_reserved",
59093 FT_UINT8, BASE_HEX, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59094
59095 {&hf_ieee80211_he_24ghz_b1_reserved,
59096 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b1_reserved",
59097 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59098
59099 {&hf_ieee80211_he_24ghz_b2_reserved,
59100 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b2_reserved",
59101 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59102
59103 {&hf_ieee80211_he_24ghz_b3_reserved,
59104 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b3_reserved",
59105 FT_UINT8, BASE_HEX, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59106
59107 {&hf_ieee80211_he_24ghz_b5_reserved,
59108 {"Reserved", "wlan.ext_tag.he_phy_cap.chan_width.set.24GHz_b5_reserved",
59109 FT_UINT8, BASE_HEX, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59110
59111 {&hf_ieee80211_he_phy_cap_punctured_preamble_rx,
59112 {"Punctured Preamble Rx", "wlan.ext_tag.he_phy_cap.punc_preamble_rx",
59113 FT_UINT16, BASE_HEX, NULL((void*)0), 0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59114
59115 {&hf_ieee80211_he_phy_cap_device_class,
59116 {"Device Class", "wlan.ext_tag.he_phy_cap.device_class",
59117 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) }},
59118
59119 {&hf_ieee80211_he_phy_cap_ldpc_coding_in_payload,
59120 {"LDPC Coding In Payload", "wlan.ext_tag.he_phy_cap.ldpc_coding_in_payload",
59121 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) }},
59122
59123 {&hf_ieee80211_he_phy_cap_he_su_ppdu_1x_he_ltf_08us,
59124 {"HE SU PPDU With 1x HE-LTF And 0.8us GI",
59125 "wlan.ext_tag.he_phy_cap.he_su_ppdu_with_1x_he_ltf_08us",
59126 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) }},
59127
59128 {&hf_ieee80211_he_phy_cap_midamble_tx_rx_max_nsts,
59129 {"Midamble Tx/Rx Max NSTS", "wlan.ext_tag.he_phy_cap.midamble_tx_rx_max_nsts",
59130 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) }},
59131
59132 {&hf_ieee80211_he_phy_cap_ndp_with_4x_he_ltf_32us,
59133 {"NDP With 4x HE-LTF and 3.2us GI",
59134 "wlan.ext_tag.he_phy_cap.ndp_with_4x_he_ltf_4x_3.2us",
59135 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) }},
59136
59137 {&hf_ieee80211_he_phy_cap_stbc_tx_lt_80mhz,
59138 {"STBC Tx <= 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_tx_lt_80mhz",
59139 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) }},
59140
59141 {&hf_ieee80211_he_phy_cap_stbc_rx_lt_80mhz,
59142 {"STBC Rx <= 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_rx_lt_80mhz",
59143 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) }},
59144
59145 {&hf_ieee80211_he_phy_cap_doppler_tx,
59146 {"Doppler Tx", "wlan.ext_tag.he_phy_cap.doppler_tx",
59147 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) }},
59148
59149 {&hf_ieee80211_he_phy_cap_doppler_rx,
59150 {"Doppler Rx", "wlan.ext_tag.he_phy_cap.doppler_rx",
59151 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) }},
59152
59153 {&hf_ieee80211_he_phy_cap_full_bw_ul_mu_mimo,
59154 {"Full Bandwidth UL MU-MIMO", "wlan.ext_tag.he_phy_cap.full_bw_ul_mu_mimo",
59155 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) }},
59156
59157 {&hf_ieee80211_he_phy_cap_partial_bw_ul_mu_mimo,
59158 {"Partial Bandwidth UL MU-MIMO", "wlan.ext_tag.he_phy_cap.partial_bw_ul_mu_mimo",
59159 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) }},
59160
59161 {&hf_ieee80211_he_phy_b24_to_b39,
59162 {"Bits 24 to 39", "wlan.ext_tag.he_phy_cap.bits_24_to_39",
59163 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59164
59165 {&hf_ieee80211_he_phy_cap_dcm_max_constellation_tx,
59166 {"DCM Max Constellation Tx", "wlan.ext_tag.he_phy_cap.dcm_max_const_tx",
59167 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) }},
59168
59169 {&hf_ieee80211_he_phy_cap_dcm_max_nss_tx,
59170 {"DCM Max NSS Tx", "wlan.ext_tag.he_phy_cap.dcm_max_nss_tx",
59171 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) }},
59172
59173 {&hf_ieee80211_he_phy_cap_dcm_max_constellation_rx,
59174 {"DCM Max Constellation Rx", "wlan.ext_tag.he_phy_cap.dcm_max_const_rx",
59175 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) }},
59176
59177 {&hf_ieee80211_he_phy_cap_dcm_max_nss_rx,
59178 {"DCM Max NSS Rx", "wlan.ext_tag.he_phy_cap.dcm_max_nss_rx",
59179 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) }},
59180
59181 {&hf_ieee80211_he_phy_cap_rx_partial_bw_su_20mhz_he_mu_ppdu,
59182 {"Rx Partial BW SU In 20 MHz HE MU PPDU", "wlan.ext_tag.he_phy_cap.rx_partial_bw_su_20mhz_he_mu_ppdu",
59183 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) }},
59184
59185 {&hf_ieee80211_he_phy_cap_su_beamformer,
59186 {"SU Beamformer", "wlan.ext_tag.he_phy_cap.su_beamformer",
59187 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) }},
59188
59189 {&hf_ieee80211_he_phy_cap_su_beamformee,
59190 {"SU Beamformee", "wlan.ext_tag.he_phy_cap.su_beamformee",
59191 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) }},
59192
59193 {&hf_ieee80211_he_phy_cap_mu_beamformer,
59194 {"MU Beamformer", "wlan.ext_tag.he_phy_cap.mu_beamformer",
59195 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) }},
59196
59197 {&hf_ieee80211_he_phy_cap_beamformee_sts_lte_80mhz,
59198 {"Beamformee STS <= 80 MHz", "wlan.ext_tag.he_phy_cap.beamformee_sts_lte_80mhz",
59199 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1C00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59200
59201 {&hf_ieee80211_he_phy_cap_beamformee_sts_gt_80mhz,
59202 {"Beamformee STS > 80 MHz", "wlan.ext_tag.he_phy_cap.beamformee_sts_gt_80mhz",
59203 FT_UINT16, BASE_HEX, NULL((void*)0), 0xE000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59204
59205 {&hf_ieee80211_he_phy_b40_to_b55,
59206 {"Bits 40 to 55", "wlan.ext_tag.he_phy_cap.bits_40_to_55",
59207 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59208
59209 {&hf_ieee80211_he_phy_cap_number_of_sounding_dims_lte_80,
59210 {"Number Of Sounding Dimensions <= 80 MHz", "wlan.ext_tag.he_phy_cap.no_sounding_dims_lte_80",
59211 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59212
59213 {&hf_ieee80211_he_phy_cap_number_of_sounding_dims_gt_80,
59214 {"Number Of Sounding Dimensions > 80 MHz", "wlan.ext_tag.he_phy_cap.no_sounding_dims_gt_80",
59215 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59216
59217 {&hf_ieee80211_he_phy_cap_ng_eq_16_su_fb,
59218 {"Ng = 16 SU Feedback", "wlan.ext_tag.he_phy_cap.ng_eq_16_su_fb",
59219 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) }},
59220
59221 {&hf_ieee80211_he_phy_cap_ng_eq_16_mu_fb,
59222 {"Ng = 16 MU Feedback", "wlan.ext_tag.he_phy_cap.ng_eq_16_mu_fb",
59223 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) }},
59224
59225 {&hf_ieee80211_he_phy_cap_codebook_size_eq_4_2_fb,
59226 {"Codebook Size SU Feedback", "wlan.ext_tag.he_phy_cap.codebook_size_su_fb",
59227 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) }},
59228
59229 {&hf_ieee80211_he_phy_cap_codebook_size_eq_7_5_fb,
59230 {"Codebook Size MU Feedback", "wlan.ext_tag.he_phy_cap.codebook_size_mu_fb",
59231 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) }},
59232
59233 {&hf_ieee80211_he_phy_cap_triggered_su_beamforming_fb,
59234 {"Triggered SU Beamforming Feedback", "wlan.ext_tag.he_phy_cap.trig_su_bf_fb",
59235 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) }},
59236
59237 {&hf_ieee80211_he_phy_cap_triggered_mu_beamforming_fb,
59238 {"Triggered MU Beamforming Feedback", "wlan.ext_tag.he_phy_cap.trig_mu_bf_fb",
59239 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) }},
59240
59241 {&hf_ieee80211_he_phy_cap_triggered_cqi_fb,
59242 {"Triggered CQI Feedback", "wlan.ext_tag.he_phy_cap.trig_cqi_fb",
59243 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) }},
59244
59245 {&hf_ieee80211_he_phy_cap_partial_bw_extended_range,
59246 {"Partial Bandwidth Extended Range", "wlan.ext_tag.he_phy_cap.partial_bw_er",
59247 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) }},
59248
59249 {&hf_ieee80211_he_phy_cap_partial_bw_dl_mu_mimo,
59250 {"Partial Bandwidth DL MU-MIMO", "wlan.ext_tag.he_phy_cap.partial_bw_dl_mu_mimo",
59251 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) }},
59252
59253 {&hf_ieee80211_he_phy_cap_ppe_threshold_present,
59254 {"PPE Thresholds Present", "wlan.ext_tag.he_phy_cap.ppe_thres_present",
59255 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59256
59257 {&hf_ieee80211_he_phy_b56_to_b71,
59258 {"Bits 56 to 71", "wlan.ext_tag.he_phy_cap.bits_56_to_71",
59259 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59260
59261 {&hf_ieee80211_he_phy_cap_psr_based_sr_support,
59262 {"PSR-based SR Support", "wlan.ext_tag.he_phy_cap.psr_based_sr_sup",
59263 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) }},
59264
59265 {&hf_ieee80211_he_phy_cap_power_boost_factor_ar_support,
59266 {"Power Boost Factor ar Support", "wlan.ext_tag.he_phy_cap.pwr_bst_factor_ar_sup",
59267 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) }},
59268
59269 {&hf_ieee80211_he_phy_cap_he_su_ppdu_etc_gi,
59270 {"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",
59271 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) }},
59272
59273 {&hf_ieee80211_he_phy_cap_max_nc,
59274 {"Max Nc", "wlan.ext_tag.he_phy_cap.max_nc",
59275 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) }},
59276
59277 {&hf_ieee80211_he_phy_cap_stbc_tx_gt_80_mhz,
59278 {"STBC Tx > 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_tx_gt_80_mhz",
59279 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) }},
59280
59281 {&hf_ieee80211_he_phy_cap_stbc_rx_gt_80_mhz,
59282 {"STBC Rx > 80 MHz", "wlan.ext_tag.he_phy_cap.stbc_rx_gt_80_mhz",
59283 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) }},
59284
59285 {&hf_ieee80211_he_phy_cap_he_er_su_ppdu_4xxx_gi,
59286 {"HE ER SU PPDU With 4x HE-LTF And 0.8us GI", "wlan.ext_tag.he_phy_cap.he_er_su_ppdu_4xxx_gi",
59287 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) }},
59288
59289 {&hf_ieee80211_he_phy_cap_20mhz_in_40mhz_24ghz_band,
59290 {"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",
59291 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) }},
59292
59293 {&hf_ieee80211_he_phy_cap_20mhz_in_160_80p80_ppdu,
59294 {"20 MHz In 160/80+80 MHz HE PPDU", "wlan.ext_tag.he_phy_cap.20_mhz_in_160_80p80_ppdu",
59295 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) }},
59296
59297 {&hf_ieee80211_he_phy_cap_80mgz_in_160_80p80_ppdu,
59298 {"80 MHz In 160/80+80 MHz HE PPDU", "wlan.ext_tag.he_phy_cap.80_mhz_in_160_80p80_ppdu",
59299 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) }},
59300
59301 {&hf_ieee80211_he_phy_cap_he_er_su_ppdu_1xxx_gi,
59302 {"HE ER SU PPDU With 1x HE-LTF And 0.8us GI", "wlan.ext_tag.he_phy_cap.he_er_su_ppdu_1xxx_gi",
59303 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) }},
59304
59305 {&hf_ieee80211_he_phy_cap_midamble_tx_rx_2x_xxx_ltf,
59306 {"Midamble Tx/Rx 2x And 1x HE-LTF", "wlan.ext_tag.he_phy_cap.midamble_tx_rx_2x_1x_he_ltf",
59307 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) }},
59308
59309 {&hf_ieee80211_he_phy_b72_to_b87,
59310 {"Bits 72 to 87", "wlan.ext_tag.he_phy_cap.bits_72_to_87",
59311 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59312
59313 {&hf_ieee80211_he_phy_cap_dcm_max_ru,
59314 {"DCM Max RU", "wlan.ext_tag.he_phy_cap.dcm_max_ru",
59315 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) }},
59316
59317 {&hf_ieee80211_he_phy_cap_longer_than_16_he_sigb_ofdm_symbol_support,
59318 {"Longer Than 16 HE SIG-B OFDM Symbols Support", "wlan.ext_tag.he_phy_cap.longer_than_16_he_sigb_ofdm_sym_support",
59319 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) }},
59320
59321 {&hf_ieee80211_he_phy_cap_non_triggered_cqi_feedback,
59322 {"Non-Triggered CQI Feedback", "wlan.ext_tag.he_phy_cap.non_triggered_feedback",
59323 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) }},
59324
59325 {&hf_ieee80211_he_phy_cap_tx_1024_qam_242_tone_ru_support,
59326 {"Tx 1024-QAM Support < 242-tone RU Support", "wlan.ext_tag.he_phy_cap.tx_1024_qam_support_lt_242_tone_ru",
59327 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) }},
59328
59329 {&hf_ieee80211_he_phy_cap_rx_1024_qam_242_tone_ru_support,
59330 {"Rx 1024-QAM Support < 242-tone RU Support", "wlan.ext_tag.he_phy_cap.rx_1024_qam_support_lt_242_tone_ru",
59331 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) }},
59332
59333 {&hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_compressed_sigb,
59334 {"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",
59335 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) }},
59336
59337 {&hf_ieee80211_he_phy_cap_rx_full_bw_su_using_he_muppdu_w_non_compressed_sigb,
59338 {"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",
59339 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) }},
59340
59341 {&hf_ieee80211_he_phy_cap_nominal_packet_padding,
59342 {"Nominal Packet Padding", "wlan.ext_tag.he_phy_cap.nominal_packet_padding",
59343 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) }},
59344
59345 {&hf_ieee80211_he_phy_cap_he_mu_ppdu_ru_rx_max,
59346 {"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",
59347 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59348
59349 {&hf_ieee80211_he_phy_cap_b81_b87_reserved,
59350 {"Reserved", "wlan.ext_tag.he_phy_cap.reserved_b81_b87",
59351 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59352
59353 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_1_ss,
59354 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_1_ss",
59355 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) }},
59356
59357 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_2_ss,
59358 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_2_ss",
59359 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) }},
59360
59361 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_3_ss,
59362 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_3_ss",
59363 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) }},
59364
59365 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_4_ss,
59366 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_4_ss",
59367 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) }},
59368
59369 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_5_ss,
59370 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_5_ss",
59371 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) }},
59372
59373 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_6_ss,
59374 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_6_ss",
59375 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) }},
59376
59377 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_7_ss,
59378 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_7_ss",
59379 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) }},
59380
59381 {&hf_ieee80211_he_mcs_max_he_mcs_80_rx_8_ss,
59382 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_rx_8_ss",
59383 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) }},
59384
59385 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_1_ss,
59386 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_1_ss",
59387 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) }},
59388
59389 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_2_ss,
59390 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_2_ss",
59391 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) }},
59392
59393 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_3_ss,
59394 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_3_ss",
59395 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) }},
59396
59397 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_4_ss,
59398 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_4_ss",
59399 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) }},
59400
59401 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_5_ss,
59402 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_5_ss",
59403 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) }},
59404
59405 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_6_ss,
59406 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_6_ss",
59407 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) }},
59408
59409 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_7_ss,
59410 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_7_ss",
59411 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) }},
59412
59413 {&hf_ieee80211_he_mcs_max_he_mcs_80_tx_8_ss,
59414 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80_tx_8_ss",
59415 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) }},
59416
59417 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_1_ss,
59418 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_1_ss",
59419 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) }},
59420
59421 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_2_ss,
59422 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_2_ss",
59423 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) }},
59424
59425 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_3_ss,
59426 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_3_ss",
59427 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) }},
59428
59429 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_4_ss,
59430 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_4_ss",
59431 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) }},
59432
59433 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_5_ss,
59434 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_5_ss",
59435 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) }},
59436
59437 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_6_ss,
59438 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_6_ss",
59439 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) }},
59440
59441 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_7_ss,
59442 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_7_ss",
59443 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) }},
59444
59445 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_rx_8_ss,
59446 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_rx_8_ss",
59447 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) }},
59448
59449 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_1_ss,
59450 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_1_ss",
59451 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) }},
59452
59453 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_2_ss,
59454 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_2_ss",
59455 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) }},
59456
59457 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_3_ss,
59458 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_3_ss",
59459 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) }},
59460
59461 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_4_ss,
59462 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_4_ss",
59463 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) }},
59464
59465 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_5_ss,
59466 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_5_ss",
59467 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) }},
59468
59469 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_6_ss,
59470 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_6_ss",
59471 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) }},
59472
59473 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_7_ss,
59474 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_7_ss",
59475 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) }},
59476
59477 {&hf_ieee80211_he_mcs_max_he_mcs_80p80_tx_8_ss,
59478 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_80p80_tx_8_ss",
59479 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) }},
59480
59481 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_1_ss,
59482 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_1_ss",
59483 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) }},
59484
59485 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_2_ss,
59486 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_2_ss",
59487 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) }},
59488
59489 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_3_ss,
59490 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_3_ss",
59491 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) }},
59492
59493 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_4_ss,
59494 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_4_ss",
59495 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) }},
59496
59497 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_5_ss,
59498 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_5_ss",
59499 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) }},
59500
59501 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_6_ss,
59502 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_6_ss",
59503 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) }},
59504
59505 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_7_ss,
59506 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_7_ss",
59507 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) }},
59508
59509 {&hf_ieee80211_he_mcs_max_he_mcs_160_rx_8_ss,
59510 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_rx_8_ss",
59511 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) }},
59512
59513 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_1_ss,
59514 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_1_ss",
59515 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) }},
59516
59517 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_2_ss,
59518 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_2_ss",
59519 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) }},
59520
59521 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_3_ss,
59522 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_3_ss",
59523 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) }},
59524
59525 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_4_ss,
59526 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_4_ss",
59527 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) }},
59528
59529 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_5_ss,
59530 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_5_ss",
59531 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) }},
59532
59533 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_6_ss,
59534 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_6_ss",
59535 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) }},
59536
59537 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_7_ss,
59538 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_7_ss",
59539 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) }},
59540
59541 {&hf_ieee80211_he_mcs_max_he_mcs_160_tx_8_ss,
59542 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_mcs_map.max_he_mcs_160_tx_8_ss",
59543 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) }},
59544
59545 {&hf_ieee80211_he_rx_he_mcs_map_lte_80,
59546 {"Rx HE-MCS Map <= 80 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_lte_80",
59547 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59548
59549 {&hf_ieee80211_he_tx_he_mcs_map_lte_80,
59550 {"Tx HE-MCS Map <= 80 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_lte_80",
59551 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59552
59553 {&hf_ieee80211_he_rx_he_mcs_map_160,
59554 {"Rx HE-MCS Map 160 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_160",
59555 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59556
59557 {&hf_ieee80211_he_tx_he_mcs_map_160,
59558 {"Tx HE-MCS Map 160 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_160",
59559 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59560
59561 {&hf_ieee80211_he_rx_he_mcs_map_80_80,
59562 {"Rx HE-MCS Map 80+80 MHz", "wlan.ext_tag.he_mcs_map.rx_he_mcs_map_80_80",
59563 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59564
59565 {&hf_ieee80211_he_tx_he_mcs_map_80_80,
59566 {"Tx HE-MCS Map 80+80 MHz", "wlan.ext_tag.he_mcs_map.tx_he_mcs_map_80_80",
59567 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59568
59569 {&hf_ieee80211_he_ppe_thresholds_nss,
59570 {"NSS", "wlan.ext_tag.he_ppe_thresholds.nss",
59571 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59572
59573 {&hf_ieee80211_he_ppe_thresholds_ru_index_bitmask,
59574 {"RU Index Bitmask", "wlan.ext_tag.he_ppe_thresholds.ru_index_bitmask",
59575 FT_UINT8, BASE_HEX, NULL((void*)0), 0x78, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59576
59577 {&hf_ieee80211_he_ppe_ppet16,
59578 {"PPET16","wlan.ext_tag.he_ppe_thresholds.ppet16",
59579 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) }},
59580
59581 {&hf_ieee80211_he_ppe_ppet8,
59582 {"PPET8","wlan.ext_tag.he_ppe_thresholds.ppet8",
59583 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) }},
59584
59585 {&hf_ieee80211_he_operation_parameter,
59586 {"HE Operation Parameters", "wlan.ext_tag.he_operation.params",
59587 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59588
59589 {&hf_ieee80211_he_operation_default_pe_duration,
59590 {"Default PE Duration", "wlan.ext_tag.he_operation.default_pe_duration",
59591 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59592
59593 {&hf_ieee80211_he_operation_twt_required,
59594 {"TWT Required", "wlan.ext_tag.he_operation.twt_required",
59595 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) }},
59596
59597 {&hf_ieee80211_he_operation_txop_duration_rts_threshold,
59598 {"TXOP Duration RTS Threshold", "wlan.ext_tag.he_operation.txop_duration_rts_thresh",
59599 FT_UINT24, BASE_DEC, NULL((void*)0), 0x003FF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59600
59601 {&hf_ieee80211_he_operation_vht_operation_information_present,
59602 {"VHT Operation Information Present", "wlan.ext_tag.he_operation.vht_op_info_present",
59603 FT_BOOLEAN, 24, NULL((void*)0), 0x004000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59604
59605 {&hf_ieee80211_he_operation_co_hosted_bss,
59606 {"Co-Hosted BSS", "wlan.ext_tag.he_operation.co_hosted_bss",
59607 FT_BOOLEAN, 24, NULL((void*)0), 0x008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59608
59609 {&hf_ieee80211_he_operation_er_su_disable,
59610 {"ER SU Disable", "wlan.ext_tag.he_operation.er_su_disable",
59611 FT_BOOLEAN, 24, NULL((void*)0), 0x010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59612
59613 {&hf_ieee80211_he_operation_6ghz_operation_information_present,
59614 {"6 GHz Operation Information Present", "wlan.ext_tag.he_operation.6ghz_operation_information_present",
59615 FT_BOOLEAN, 24, NULL((void*)0), 0x020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59616
59617 {&hf_ieee80211_he_operation_reserved_b16_b23,
59618 {"Reserved", "wlan.ext_tag.he_operation.reserved_b16_b32",
59619 FT_UINT24, BASE_HEX, NULL((void*)0), 0xFC0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59620
59621 {&hf_ieee80211_he_bss_color_information,
59622 {"BSS Color Information", "wlan.ext_tag.bss_color_information",
59623 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59624
59625 {&hf_ieee80211_he_bss_color_info_bss_color,
59626 {"BSS Color", "wlan.ext_tag.bss_color_information.bss_color",
59627 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59628
59629 {&hf_ieee80211_he_bss_color_partial_bss_color,
59630 {"Partial BSS Color", "wlan.ext_tag.bss_color_information.partial_bss_color",
59631 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59632
59633 {&hf_ieee80211_he_bss_color_bss_color_disabled,
59634 {"BSS Color Disabled", "wlan.ext_tag.bss_color_information.bss_color_disabled",
59635 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59636
59637 {&hf_ieee80211_he_operation_basic_mcs,
59638 {"Basic HE-MCS and NSS Set", "wlan.ext_tag.he_operation.basic_he_mcs_and_nss",
59639 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59640
59641 {&hf_ieee80211_he_oper_max_he_mcs_for_1_ss,
59642 {"Max HE-MCS for 1 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_1_ss",
59643 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) }},
59644
59645 {&hf_ieee80211_he_oper_max_he_mcs_for_2_ss,
59646 {"Max HE-MCS for 2 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_2_ss",
59647 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) }},
59648
59649 {&hf_ieee80211_he_oper_max_he_mcs_for_3_ss,
59650 {"Max HE-MCS for 3 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_3_ss",
59651 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) }},
59652
59653 {&hf_ieee80211_he_oper_max_he_mcs_for_4_ss,
59654 {"Max HE-MCS for 4 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_4_ss",
59655 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) }},
59656
59657 {&hf_ieee80211_he_oper_max_he_mcs_for_5_ss,
59658 {"Max HE-MCS for 5 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_5_ss",
59659 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) }},
59660
59661 {&hf_ieee80211_he_oper_max_he_mcs_for_6_ss,
59662 {"Max HE-MCS for 6 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_6_ss",
59663 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) }},
59664
59665 {&hf_ieee80211_he_oper_max_he_mcs_for_7_ss,
59666 {"Max HE-MCS for 7 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_7_ss",
59667 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) }},
59668
59669 {&hf_ieee80211_he_oper_max_he_mcs_for_8_ss,
59670 {"Max HE-MCS for 8 SS", "wlan.ext_tag.he_operation.max_he_mcs_for_8_ss",
59671 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) }},
59672
59673 {&hf_ieee80211_he_operation_channel_width,
59674 {"Channel Width", "wlan.ext_tag.he_operation.vht_op_info.channel_width",
59675 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) }},
59676
59677 {&hf_ieee80211_he_operation_channel_center_freq_0,
59678 {"Channel Center Frequency Segment 0", "wlan.ext_tag.he_operation.vht_op_info.chan_center_freq_seg_0",
59679 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59680
59681 {&hf_ieee80211_he_operation_channel_center_freq_1,
59682 {"Channel Center Frequency Segment 1", "wlan.ext_tag.he_operation.vht_op_info.chan_center_freq_seg_1",
59683 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59684
59685 {&hf_ieee80211_he_operation_max_co_hosted_bssid_indicator,
59686 {"Max Co-Hosted BSSID Indicator", "wlan.ext_tag.he_operation.max_co_hosted_bssid_indicator",
59687 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59688
59689 {&hf_ieee80211_he_operation_6ghz_primary_channel,
59690 {"Primary Channel", "wlan.ext_tag.he_operation.6ghz.primary_channel",
59691 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59692
59693 {&hf_ieee80211_he_operation_6ghz_control,
59694 {"Control", "wlan.ext_tag.he_operation.6ghz.control",
59695 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59696
59697 {&hf_ieee80211_he_operation_6ghz_control_channel_width,
59698 {"Channel Width", "wlan.ext_tag.he_operation.6ghz.control.channel_width",
59699 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) }},
59700
59701 {&hf_ieee80211_he_operation_6ghz_control_duplicate_beacon,
59702 {"Duplicate Beacon", "wlan.ext_tag.he_operation.6ghz.control.duplicate_beacon",
59703 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59704
59705 {&hf_ieee80211_he_operation_6ghz_control_regulatory_info,
59706 {"Regulatory Info", "wlan.ext_tag.he_operation.6ghz.control.regulatory_info",
59707 FT_UINT8, BASE_DEC, NULL((void*)0), 0x78, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59708
59709 {&hf_ieee80211_he_operation_6ghz_control_reserved,
59710 {"Reserved", "wlan.ext_tag.he_operation.6ghz.control.reserved",
59711 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59712
59713 {&hf_ieee80211_he_operation_6ghz_channel_center_freq_0,
59714 {"Channel Center Frequency Segment 0", "wlan.ext_tag.he_operation.6ghz.chan_center_freq_seg_0",
59715 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59716
59717 {&hf_ieee80211_he_operation_6ghz_channel_center_freq_1,
59718 {"Channel Center Frequency Segment 1", "wlan.ext_tag.he_operation.6ghz.chan_center_freq_seg_1",
59719 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59720
59721 {&hf_ieee80211_he_operation_6ghz_minimum_rate,
59722 {"Minimum Rate", "wlan.ext_tag.he_operation.6ghz.minimum_rate",
59723 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59724
59725 {&hf_ieee80211_he_muac_aci_aifsn,
59726 {"AIC/AIFSN","wlan.ext_tag.mu_edca_parameter_set.aic_aifsn",
59727 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59728
59729 {&hf_ieee80211_he_muac_aifsn,
59730 {"AIFSN", "wlan.ext_tag.mu_edca_parameter_set.aifsn",
59731 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F,
59732 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59733
59734 {&hf_ieee80211_he_muac_acm,
59735 {"Admission Control Mandatory", "wlan.ext_tag.mu_edca_parameter_set.acm",
59736 FT_BOOLEAN, 8, TFS(&tfs_yes_no)((0 ? (const struct true_false_string*)0 : ((&tfs_yes_no)
)))
, 0x10,
59737 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59738
59739 {&hf_ieee80211_he_muac_aci,
59740 {"ACI", "wlan.ext_tag.mu_edca_parameter_set.aci",
59741 FT_UINT8, BASE_DEC, VALS(ieee80211_wfa_ie_wme_acs_vals)((0 ? (const struct _value_string*)0 : ((ieee80211_wfa_ie_wme_acs_vals
))))
, 0x60,
59742 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59743
59744 {&hf_ieee80211_he_muac_reserved,
59745 {"Reserved", "wlan.ext_tag.mu_edca_parameter_set.reserved",
59746 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
59747 "Must be Zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59748
59749 {&hf_ieee80211_he_mu_edca_timer,
59750 {"MU EDCA Timer","wlan.ext_tag.mu_edca_parameter_set.mu_edca_timer",
59751 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59752
59753 {&hf_ieee80211_he_muac_ecwmin_ecwmax,
59754 {"ECWmin/ECWmax","wlan.ext_tag.mu_edca_parameter_set.ecwmin_ecwmax",
59755 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59756
59757 {&hf_ieee80211_he_spatial_reuse_sr_control,
59758 {"SR Control", "wlan.ext_tag.spatial_reuse.sr_control",
59759 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59760
59761 {&hf_ieee80211_he_srp_disallowed,
59762 {"SRP Disallowed", "wlan.ext_tag.spatial_reuse.sr_control.srp_dis",
59763 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59764
59765 {&hf_ieee80211_he_non_srg_obss_pd_sr_disallowed,
59766 {"NON-SRG OBSS PD SR Disallowed", "wlan.ext_tag.spatial_reuse.sr_control.non_srg_obss_pd_sr_dis",
59767 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59768
59769 {&hf_ieee80211_he_non_srg_offset_present,
59770 {"Non-SRG Offset Present", "wlan.ext_tag.spatial_reuse.sr_control.non_srg_ofs_present",
59771 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59772
59773 {&hf_ieee80211_he_srg_information_present,
59774 {"SRG Information Present", "wlan.ext_tag.spatial_reuse.sr_control.srg_info_present",
59775 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59776
59777 {&hf_ieee80211_he_hesiga_spatial_reuse_value15_allowed,
59778 {"HESIGA Spatial Reuse value 15 allowed", "wlan.ext_tag.spatial_reuse.sr_control.hesiga_val_15_allowed",
59779 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59780
59781 {&hf_ieee80211_he_sr_control_reserved,
59782 {"Reserved", "wlan.ext_tag.spatial_reuse.sr_control.reserved",
59783 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59784
59785 {&hf_ieee80211_he_spatial_non_srg_obss_pd_max_offset,
59786 {"Non-SRG OBSS PD Max Offset", "wlan.ext_tag.spatial_reuse.non_srg_obss_pd_max_offset",
59787 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59788
59789 {&hf_ieee80211_he_spatial_srg_obss_pd_min_offset,
59790 {"SRG OBSS PD Min Offset", "wlan.ext_tag.spatial_reuse.srg_obss_pd_min_offset",
59791 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59792
59793 {&hf_ieee80211_he_spatial_srg_obss_pd_max_offset,
59794 {"SRG OBSS PD Max Offset", "wlan.ext_tag.spatial_reuse.srg_obss_pd_max_offset",
59795 FT_INT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59796
59797 {&hf_ieee80211_he_spatial_srg_bss_color_bitmap,
59798 {"SRG BSS Color Bitmap", "wlan.ext_tag.spatial_reuse.srg_bss_color_bitmap",
59799 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59800
59801 {&hf_ieee80211_he_spatial_srg_partial_bssid_bitmap,
59802 {"SRG Partial BSSID Bitmap", "wlan.ext_tag.spatial_reuse.srg_partial_bssid_bitmap",
59803 FT_BYTES, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59804
59805 {&hf_ieee80211_he_resource_request_buffer_thresh,
59806 {"Resource Request Buffer Threshold Exponent", "wlan.ext_tag.ndp_feedback.res_req_buf_thresh_exp",
59807 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59808
59809 {&hf_ieee80211_he_bss_color_change_new_color_info,
59810 {"New BSS Color Info", "wlan.ext_tag.bss_color_change.new_color_info",
59811 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59812
59813 {&hf_ieee80211_he_new_bss_color_info_color,
59814 {"New BSS Color", "wlan.ext_tag.bss_color_change.new_bss_color",
59815 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59816
59817 {&hf_ieee80211_he_new_bss_color_info_reserved,
59818 {"Reserved", "wlan.ext_tag.bss_color_change.new_color_reserved",
59819 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59820
59821 {&hf_ieee80211_he_bss_color_change_switch_countdown,
59822 {"BSS Color Switch Countdown", "wlan.ext_tag.bss_color_change.color_switch_countdown",
59823 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59824
59825 {&hf_ieee80211_he_ess_report_planned_ess,
59826 {"Planned ESS", "wlan.ext_tag.ess_report.ess_info.planned_ess",
59827 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59828
59829 {&hf_ieee80211_he_ess_report_edge_of_ess,
59830 {"Edge of ESS", "wlan.ext_tag.ess_report.ess_info.edge_of_ess",
59831 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59832
59833 {&hf_ieee80211_he_ess_report_info_field,
59834 {"ESS Information field", "wlan.ext_tag.ess_report.ess_info.field",
59835 FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59836
59837 {&hf_ieee80211_he_ess_report_recommend_transition_thresh,
59838 {"Recommended BSS Transition Threshold", "wlan.ext_tag.ess_report.ess_info.thresh",
59839 FT_INT8, BASE_DEC, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59840
59841 {&hf_ieee80211_he_ops_duration,
59842 {"OPS Duration", "wlan.ext_tag.ops.ops_duration",
59843 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) }},
59844
59845 {&hf_ieee80211_he_uora_field,
59846 {"UL OFDMA-based Random Access Parameter SET", "wlan.ext_tag.uora_parameter_set.field",
59847 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59848
59849 {&hf_ieee80211_he_uora_eocwmin,
59850 {"EOCWmin", "wlan.ext_tag.uora_parameter_set.eocwmin",
59851 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59852
59853 {&hf_ieee80211_he_uora_owcwmax,
59854 {"EOCWmax", "wlan.ext_tag.uora_parameter_set.eocwmax",
59855 FT_UINT8, BASE_DEC, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59856
59857 {&hf_ieee80211_he_uora_reserved,
59858 {"Reserved", "wlan.ext_tag.uora_parameter_set.reserved",
59859 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59860
59861 {&hf_ieee80211_max_channel_switch_time,
59862 {"Max Channel Switch Time",
59863 "wlan.ext_tag.max_channel_switch_time.switch_time",
59864 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) }},
59865
59866 {&hf_ieee80211_oci_operating_class,
59867 {"Operating Class", "wlan.ext_tag.oci.operating_class",
59868 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59869
59870 {&hf_ieee80211_oci_primary_channel_number,
59871 {"Primary Channel Number", "wlan.ext_tag.oci.primary_channel_number",
59872 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59873
59874 {&hf_ieee80211_oci_frequency_segment_1,
59875 {"Frequency Segment 1 Channel Number",
59876 "wlan.ext_tag.oci.frequency_segment_1_channel_number",
59877 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59878
59879 {&hf_ieee80211_oci_oct_operating_class,
59880 {"OCT Operating Class", "wlan.ext_tag.oci.oct_operating_class",
59881 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59882
59883 {&hf_ieee80211_oci_oct_primary_channel_number,
59884 {"OCT Primary Channel Number",
59885 "wlan.ext_tag.oci.oct_primary_channel_number",
59886 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59887
59888 {&hf_ieee80211_oci_oct_frequency_segment_1,
59889 {"OCT Frequency Segment 1 Channel Number",
59890 "wlan.ext_tag.oci.oct_frequency_segment_1_channel_number",
59891 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59892
59893 {&hf_ieee80211_multiple_bssid_configuration_bssid_count,
59894 {"BSSID Count", "wlan.ext_tag.multiple_bssid_configuration.bssid_count",
59895 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59896
59897 {&hf_ieee80211_non_inheritance_element_id_list_length,
59898 {"Length", "wlan.ext_tag.non_inheritance.element_id_list.length",
59899 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59900
59901 {&hf_ieee80211_non_inheritance_element_id_list_element_id,
59902 {"Element ID", "wlan.ext_tag.non_inheritance.element_id_list.element_id",
59903 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59904
59905 {&hf_ieee80211_non_inheritance_element_id_ext_list_length,
59906 {"Length", "wlan.ext_tag.non_inheritance.element_id_ext_list.length",
59907 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59908
59909 {&hf_ieee80211_non_inheritance_element_id_ext_list_element_id_ext,
59910 {"Element ID Extension", "wlan.ext_tag.non_inheritance.element_id_ext_list.element_id_ext",
59911 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59912
59913 {&hf_ieee80211_multiple_bssid_configuration_full_set_rx_periodicity,
59914 {"Full Set Rx Periodicity", "wlan.ext_tag.multiple_bssid_configuration.full_set_rx_periodicity",
59915 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59916
59917 {&hf_ieee80211_known_bssid_bitmap,
59918 {"Bitmap", "wlan.ext_tag.known_bssid.bitmap",
59919 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59920
59921 {&hf_ieee80211_short_ssid,
59922 {"Short SSID", "wlan.ext_tag.short_ssid",
59923 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59924
59925 {&hf_ieee80211_rejected_groups_group,
59926 {"Rejected Finite Cyclic Group", "wlan.ext_tag.rejected_groups.group",
59927 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59928
59929 {&hf_ieee80211_ff_s1g_action,
59930 {"S1G Action", "wlan.s1g.action",
59931 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) }},
59932
59933 {&hf_ieee80211_ff_prot_s1g_action,
59934 {"Protected S1G Action", "wlan.s1g.prot_action",
59935 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) }},
59936
59937 {&hf_ieee80211_ff_s1g_timestamp,
59938 {"Timestamp", "wlan.s1g.timestamp",
59939 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59940
59941 {&hf_ieee80211_ff_s1g_change_sequence,
59942 {"Change Sequence", "wlan.s1g.change_sequence",
59943 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59944
59945 {&hf_ieee80211_ff_s1g_next_tbtt,
59946 {"Next TBTT", "wlan.s1g.next_tbtt",
59947 FT_UINT24, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59948
59949 {&hf_ieee80211_ff_s1g_compressed_ssid,
59950 {"Compressed SSID", "wlan.s1g.compressed_ssid",
59951 FT_UINT32, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59952
59953 {&hf_ieee80211_ff_s1g_access_network_options,
59954 {"Access Network Options", "wlan.s1g.access_network_options",
59955 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59956
59957 {&hf_ieee80211_s1g_sync_control,
59958 {"Sync Control", "wlan.s1g.sync_control",
59959 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59960
59961 {&hf_ieee80211_s1g_sync_control_uplink_sync_request,
59962 {"Uplink Sync Request", "wlan.s1g.sync_control.uplink_sync_request",
59963 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59964
59965 {&hf_ieee80211_s1g_sync_control_time_slot_protection_request,
59966 {"Time Slot Protection request",
59967 "wlan.s1g.sync_control.time_slot_protection_request",
59968 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59969
59970 {&hf_ieee80211_s1g_sync_control_reserved,
59971 {"Reserved", "wlan.s1g.sync_control.reserved",
59972 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59973
59974 {&hf_ieee80211_s1g_sector_id_index,
59975 {"Sector ID Index", "wlan.s1g.sector_id_index",
59976 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59977
59978 {&hf_ieee80211_s1g_sector_id_preferred_sector_id,
59979 {"Preferred Sector ID", "wlan.s1g.sector_id_index.preferred_sector_id",
59980 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59981
59982 {&hf_ieee80211_s1g_sector_id_snr,
59983 {"SNR", "wlan.s1g.sector_id_index.snr",
59984 FT_UINT16, BASE_CUSTOM, CF_FUNC(s1g_sector_id_index_snr_custom)((const void *) (size_t) (s1g_sector_id_index_snr_custom)),
59985 0x00F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59986
59987 {&hf_ieee80211_s1g_sector_id_receive_sector_bitmap,
59988 {"Receive Sector Bitmap", "wlan.s1g.sector_id_index.receive_sector_bitmap",
59989 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59990
59991 {&hf_ieee80211_s1g_twt_information_control,
59992 {"TWT Information Control", "wlan.s1g.twt_information.control",
59993 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59994
59995 {&hf_ieee80211_s1g_twt_next_twt_32,
59996 {"Next TWT", "wlan.s1g.twt_information.next_twt32",
59997 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
59998
59999 {&hf_ieee80211_s1g_twt_next_twt_48,
60000 {"Next TWT", "wlan.s1g.twt_information.next_twt48",
60001 FT_UINT48, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60002
60003 {&hf_ieee80211_s1g_twt_next_twt_64,
60004 {"Next TWT", "wlan.s1g.twt_information.next_twt64",
60005 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60006
60007 {&hf_ieee80211_s1g_twt_flow_identifier,
60008 {"TWT Flow Identifier",
60009 "wlan.s1g.twt_information.control.twt_flow_identifier",
60010 FT_UINT8, BASE_DEC, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60011
60012 {&hf_ieee80211_s1g_twt_response_required,
60013 {"Response Requested",
60014 "wlan.s1g.twt_information.control.response_requested",
60015 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60016
60017 {&hf_ieee80211_s1g_twt_next_twt_request,
60018 {"Next TWT Request", "wlan.s1g.twt_information.control.next_twt_request",
60019 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60020
60021 {&hf_ieee80211_s1g_twt_next_twt_subfield_size,
60022 {"Next TWT Subfield Size",
60023 "wlan.s1g.twt_information.control.next_twt_subfield_size",
60024 FT_UINT8, BASE_HEX, NULL((void*)0), 0x60, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60025
60026 {&hf_ieee80211_s1g_twt_reserved,
60027 {"Reserved", "wlan.s1g.twt_information.control.reserved",
60028 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60029
60030 {&hf_ieee80211_s1g_update_edca_info,
60031 {"Update EDCA Info", "wlan.s1g.edca_param_set.update_edca_info",
60032 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60033
60034 {&hf_ieee80211_s1g_update_edca_override,
60035 {"Override", "wlan.s1g.edca_param_set.update_edca_info.override",
60036 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
60037 "Overrides the previously stored EDCAL parameters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60038
60039 {&hf_ieee80211_s1g_update_edca_ps_poll_aci,
60040 {"PS-Poll ACI", "wlan.s1g.edca_param_set.update_edca_info.pd_poll_aci",
60041 FT_UINT8, BASE_HEX, NULL((void*)0), 0x06, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60042
60043 {&hf_ieee80211_s1g_update_edca_raw_aci,
60044 {"RAW ACI", "wlan.s1g.edca_param_set.update_edca_info.raw_aci",
60045 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60046
60047 {&hf_ieee80211_s1g_update_edca_sta_type,
60048 {"STA Type", "wlan.s1g.edca_param_set.update_edca_info.sta_type",
60049 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) }},
60050
60051 {&hf_ieee80211_s1g_update_edca_reserved,
60052 {"Reserved", "wlan.s1g.edca_param_set.update_edca_info.reserved",
60053 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60054
60055 {&hf_ieee80211_twt_bcast_flow,
60056 {"TWT Flow", "wlan.twt.bcast_flow",
60057 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60058
60059 {&hf_ieee80211_twt_individual_flow,
60060 {"TWT Flow", "wlan.twt.individual_flow",
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_twt_individual_flow_id,
60064 {"Individual TWT Flow Id", "wlan.twt.individual_flow_id",
60065 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60066
60067 {&hf_ieee80211_twt_individual_reserved,
60068 {"Reserved", "wlan.twt.individual_reserved",
60069 FT_UINT8, BASE_HEX, NULL((void*)0), 0x18, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60070
60071 {&hf_ieee80211_twt_bcast_id,
60072 {"Broadcast TWT Id", "wlan.twt.bcast_flow_id",
60073 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60074
60075 {&hf_ieee80211_twt_neg_type,
60076 {"TWT Negotiation type", "wlan.twt.neg_type",
60077 FT_UINT8, BASE_DEC, VALS(twt_neg_type_vals)((0 ? (const struct _value_string*)0 : ((twt_neg_type_vals)))
)
, 0x60,
60078 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60079
60080 {&hf_ieee80211_twt_neg_type2_reserved1,
60081 {"Reserved", "wlan.twt.flow_id_reserved1",
60082 FT_UINT8, BASE_HEX, NULL((void*)0), 0x1f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60083
60084 {&hf_ieee80211_twt_neg_type2_reserved2,
60085 {"Reserved", "wlan.twt.flow_id_reserved2",
60086 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60087
60088 {&hf_ieee80211_twt_bcast_teardown_all,
60089 {"TWT Flow", "wlan.twt.bcast_flow",
60090 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60091
60092 {&hf_ieee80211_twt_bcast_twt_id_reserved,
60093 {"Reserved", "wlan.twt.bcast_flow.twt_id_reserved",
60094 FT_UINT8, BASE_HEX, NULL((void*)0), 0x1F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60095
60096 {&hf_ieee80211_twt_bcast_neg_type_reserved,
60097 {"Reserved", "wlan.twt.bcast_flow.negotiation_type_reserved",
60098 FT_UINT8, BASE_HEX, NULL((void*)0), 0x60, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60099
60100 {&hf_ieee80211_twt_bcast_teardown_all_twt,
60101 {"Teardown All TWT", "wlan.twt.bcast_flow.teardown_all_twt",
60102 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60103
60104 {&hf_ieee80211_tag_twt_control_field,
60105 {"Control Field", "wlan.twt.control_field",
60106 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60107
60108 {&hf_ieee80211_tag_twt_ndp_paging_indicator,
60109 {"NDP Paging Indicator", "wlan.twt.ndp_paging_indicator",
60110 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) }},
60111
60112 {&hf_ieee80211_tag_twt_responder_pm_mode,
60113 {"Responder PM Mode", "wlan.twt.resp_pm",
60114 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) }},
60115
60116 {&hf_ieee80211_tag_twt_neg_type,
60117 {"Negotiation type", "wlan.twt.neg_type",
60118 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) }},
60119
60120 {&hf_ieee80211_tag_twt_info_frame_disabled,
60121 {"TWT Information Frame Disabled", "wlan.twt.info_frame_disabled",
60122 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) }},
60123
60124 {&hf_ieee80211_tag_twt_wake_duration_unit,
60125 {"Wake Duration Unit", "wlan.twt.wake_duration_unit",
60126 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) }},
60127
60128 {&hf_ieee80211_tag_twt_link_id_bitmap_present,
60129 {"Link ID Bitmap Present", "wlan.twt.link_id_bitmap_present",
60130 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60131
60132 {&hf_ieee80211_tag_twt_aligned_twt,
60133 {"Aligned TWT", "wlan.twt.aligned_twt",
60134 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60135
60136 {&hf_ieee80211_tag_twt_req_type_field,
60137 {"Request Type", "wlan.twt.request_type",
60138 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60139
60140 {&hf_ieee80211_tag_twt_req_type_req,
60141 {"Requester", "wlan.twt.requester",
60142 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) }},
60143
60144 {&hf_ieee80211_tag_twt_req_type_setup_cmd,
60145 {"Setup Command", "wlan.twt.setup_cmd",
60146 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) }},
60147
60148 {&hf_ieee80211_tag_twt_req_type_trigger,
60149 {"Trigger", "wlan.twt.trigger",
60150 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) }},
60151
60152 {&hf_ieee80211_tag_twt_req_type_implicit,
60153 {"Implicit", "wlan.twt.implicit",
60154 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) }},
60155
60156 {&hf_ieee80211_tag_twt_req_type_flow_type,
60157 {"Flow type", "wlan.twt.flow_type",
60158 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) }},
60159
60160 {&hf_ieee80211_tag_twt_req_type_flow_id,
60161 {"Flow ID", "wlan.twt.flow_id",
60162 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60163
60164 {&hf_ieee80211_tag_twt_req_type_wake_int_exp,
60165 {"Wake Interval Exponent", "wlan.twt.wake_interval_exp",
60166 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7c00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60167
60168 {&hf_ieee80211_tag_twt_req_type_prot,
60169 {"Protection", "wlan.twt.prot",
60170 FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60171
60172 {&hf_ieee80211_tag_twt_req_type_last_bcst_parm_set,
60173 {"Last Broadcast Parameter Set",
60174 "wlan.twt.last_broadcast_parameter_set",
60175 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60176
60177 {&hf_ieee80211_tag_twt_req_type_bcst_twt_recom,
60178 {"Broadcast TWT Recommendation", "wlan.twt.broadcast_twt_recommendation",
60179 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60180
60181 {&hf_ieee80211_tag_twt_req_type_aligned,
60182 {"Aligned", "wlan.twt.aligned",
60183 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60184
60185 {&hf_ieee80211_tag_twt_ndp_paging_field,
60186 {"NDP Paging", "wlan.twt.ndp_paging",
60187 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60188
60189 {&hf_ieee80211_tag_twt_ndp_paging_p_id,
60190 {"P-ID", "wlan.twt.ndp_paging.p_id",
60191 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60192
60193 {&hf_ieee80211_tag_twt_ndp_max_ndp_paging_period,
60194 {"Max NDP Paging Period", "wlan.twt.ndp_paging.max_ndp_paging_period",
60195 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0001FE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60196
60197 {&hf_ieee80211_tag_twt_ndp_partial_tsf_offset,
60198 {"Partial TSF Offset", "wlan.twt.ndp_paging.partial_tsf_offset",
60199 FT_UINT32, BASE_DEC, NULL((void*)0), 0x001E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60200
60201 {&hf_ieee80211_tag_twt_ndp_action,
60202 {"Action", "wlan.twt.ndp_paging.action",
60203 FT_UINT32, BASE_DEC, VALS(twt_ndp_action_vals)((0 ? (const struct _value_string*)0 : ((twt_ndp_action_vals)
)))
,
60204 0x00E00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60205
60206 {&hf_ieee80211_tag_twt_ndp_min_sleep_duration,
60207 {"Min Sleep Duration", "wlan.twt.ndp_paging.min_sleep_duration",
60208 FT_UINT32, BASE_DEC, NULL((void*)0), 0x3C000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60209
60210 {&hf_ieee80211_tag_twt_ndp_reserved,
60211 {"Reserved", "wlan.twt.ndp_paging.reserved",
60212 FT_UINT32, BASE_HEX, NULL((void*)0), 0xC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60213
60214 {&hf_ieee80211_tag_twt_link_id_bitmap,
60215 {"Link ID Bitmap", "wlan.twt.link_id_bitmap",
60216 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60217
60218 {&hf_ieee80211_tag_twt_aligned_twt_link_bitmap,
60219 {"Aligned TWT Link Bitmap", "wlan.twt.aligned_twt_link_bitmap",
60220 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60221
60222 {&hf_ieee80211_tag_twt_broadcast_info,
60223 {"Broadcast TWT Info", "wlan.twt.broadcast_twt_info",
60224 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60225
60226 {&hf_ieee80211_tag_twt_bcast_info_persistence,
60227 {"Broadcast TWT Persistence",
60228 "wlan.twt.bcast_twt_info.broadcast_twt_persistence",
60229 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60230
60231 {&hf_ieee80211_tag_twt_bcast_info_id,
60232 {"Broadcast TWT ID", "wlan.twt.bcast_twt_info.broadcast_twt_id",
60233 FT_UINT16, BASE_HEX, NULL((void*)0), 0x00F8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60234
60235 {&hf_ieee80211_tag_twt_bcast_info_rtwt_sche_info,
60236 {"Restricted TWT Schedule Info", "wlan.twt.bcast_twt_info.rtwt_schedule_info",
60237 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0006, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60238
60239 {&hf_ieee80211_tag_twt_bcast_info_rtwt_traffic_present,
60240 {"Restricted TWT Traffic Info Present", "wlan.twt.bcast_twt_info.rtwt_traffic_info_present",
60241 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60242
60243 {&hf_ieee80211_tag_twt_traffic_info_control,
60244 {"Traffic Info Control", "wlan.twt.traffic_info.control",
60245 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60246
60247 {&hf_ieee80211_tag_twt_traffic_info_dl_bitmap_valid,
60248 {"DL TID Bitmap Valid", "wlan.twt.traffic_info.dl_tid_bitmap_valid",
60249 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60250
60251 {&hf_ieee80211_tag_twt_traffic_info_ul_bitmap_valid,
60252 {"UL TID Bitmap Valid", "wlan.twt.traffic_info.ul_tid_bitmap_valid",
60253 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60254
60255 {&hf_ieee80211_tag_twt_traffic_info_reserved,
60256 {"Reserved", "wlan.twt.traffic_info.reserved",
60257 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60258
60259 {&hf_ieee80211_tag_twt_traffic_info_rtwt_dl_bitmap,
60260 {"Restricted TWT DL TID Bitmap", "wlan.twt.traffic_info.dl_tid_bitmap",
60261 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60262
60263 {&hf_ieee80211_tag_twt_traffic_info_rtwt_ul_bitmap,
60264 {"Restricted TWT UL TID Bitmap", "wlan.twt.traffic_info.ul_tid_bitmap",
60265 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60266
60267 {&hf_ieee80211_tag_twt_target_wake_time,
60268 {"Target Wake Time", "wlan.twt.target_wake_time",
60269 FT_UINT64, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60270
60271 {&hf_ieee80211_tag_twt_target_wake_time_short,
60272 {"Target Wake Time", "wlan.twt.target_wake_time_short",
60273 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60274
60275 {&hf_ieee80211_tag_twt_nom_min_twt_wake_dur,
60276 {"Nominal Minimum TWT Wake duration", "wlan.twt.nom_min_twt_wake_duration",
60277 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60278
60279 {&hf_ieee80211_tag_twt_wake_interval_mantissa,
60280 {"TWT Wake Interval Mantissa", "wlan.twt.wake_interval_mantissa",
60281 FT_UINT16, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60282
60283 {&hf_ieee80211_tag_twt_channel,
60284 {"TWT Channel", "wlan.twt.channel",
60285 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60286
60287 {&hf_ieee80211_tag_rsnx,
60288 {"RSNX", "wlan.rsnx",
60289 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60290
60291 {&hf_ieee80211_wfa_ie_transition_disable_bitmap,
60292 {"Transition Disable Bitmap", "wlan.transition_disable_bitmap",
60293 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60294
60295 {&hf_ieee80211_wfa_ie_transition_disable_wpa3_personal,
60296 {"WPA3-Personal", "wlan.transition_disable.wpa3_personal",
60297 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) }},
60298
60299 {&hf_ieee80211_wfa_ie_transition_disable_sae_pk,
60300 {"SAE-PK", "wlan.transition_disable.sae_pk",
60301 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) }},
60302
60303 {&hf_ieee80211_wfa_ie_transition_disable_wpa3_enterprise,
60304 {"WPA3-Enterprise", "wlan.transition_disable.wpa3_enterprise",
60305 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) }},
60306
60307 {&hf_ieee80211_wfa_ie_transition_disable_enhanced_open,
60308 {"Wi-Fi Enhanced Open", "wlan.transition_disable.enhanced_open",
60309 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) }},
60310
60311 {&hf_ieee80211_wfa_ie_transition_disable_reserved_b4thru7,
60312 {"Reserved", "wlan.transition_disable.reserved.b4thru7",
60313 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) }},
60314
60315 {&hf_ieee80211_wfa_ie_transition_disable_reserved,
60316 {"Reserved", "wlan.transition_disable.reserved",
60317 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60318
60319 {&hf_ieee80211_tag_rsnx_length,
60320 {"RSNX Length", "wlan.rsnx.length",
60321 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60322
60323 {&hf_ieee80211_tag_rsnx_protected_twt_operations_support,
60324 {"Protected TWT Operations Support", "wlan.rsnx.protected_twt_operations_support",
60325 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60326
60327 {&hf_ieee80211_tag_rsnx_sae_hash_to_element,
60328 {"SAE Hash to element", "wlan.rsnx.sae_hash_to_element",
60329 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60330
60331 {&hf_ieee80211_tag_rsnx_sae_pk,
60332 {"SAE-PK", "wlan.rsnx.sae_pk",
60333 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60334
60335 {&hf_ieee80211_tag_rsnx_protected_wur_frame_support,
60336 {"Protected WUR Frame Support", "wlan.rsnx.protected_wur_frame_support",
60337 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60338
60339 {&hf_ieee80211_tag_rsnx_secure_ltf_support,
60340 {"Secure LTF Support", "wlan.rsnx.secure_ltf_support",
60341 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) }},
60342
60343 {&hf_ieee80211_tag_rsnx_secure_rtt_supported,
60344 {"Secure RTT Supported", "wlan.rsnx.secure_rtt_supported",
60345 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) }},
60346
60347 {&hf_ieee80211_tag_rsnx_urnm_mfpr_x20,
60348 {"URNM-MFPR-X20", "wlan.rsnx.urnm_mfpr_x20",
60349 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60350
60351 {&hf_ieee80211_tag_rsnx_protected_announce_support,
60352 {"Protected Announce Support", "wlan.rsnx.protected_announce_support",
60353 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60354
60355 {&hf_ieee80211_tag_rsnx_pbac,
60356 {"PBAC", "wlan.rsnx.pbac",
60357 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60358
60359 {&hf_ieee80211_tag_rsnx_extended_s1g_action_protection,
60360 {"Extended S1G Action Protection", "wlan.rsnx.extended_s1g_action_protection",
60361 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60362
60363 {&hf_ieee80211_tag_rsnx_spp_amsdu_capable,
60364 {"SPP AMSDU Capable", "wlan.rsnx.spp_amsdu_capable",
60365 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60366
60367 {&hf_ieee80211_tag_rsnx_urnm_mfpr,
60368 {"URNM-MFPR", "wlan.rsnx.urnm_mfpr",
60369 FT_BOOLEAN, 8, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60370
60371 {&hf_ieee80211_tag_rsnx_kek_in_pasn,
60372 {"KEK in PASN", "wlan.rsnx.kek_in_pasn",
60373 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60374
60375 {&hf_ieee80211_tag_rsnx_assoc_encryption,
60376 {"(Re)Association Frame Encryption", "wlan.rsnx.assoc_encryption",
60377 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60378
60379 {&hf_ieee80211_tag_rsnx_pmksa_privacy,
60380 {"PMKSA Caching Privacy", "wlan.rsnx.pmksa_caching_privacy",
60381 FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60382
60383 {&hf_ieee80211_tag_rsnx_reserved,
60384 {"Reserved", "wlan.rsnx.reserved",
60385 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60386
60387 {&hf_ieee80211_owe_dh_parameter_group,
60388 {"Group", "wlan.ext_tag.owe_dh_parameter.group",
60389 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) }},
60390
60391 {&hf_ieee80211_owe_dh_parameter_public_key,
60392 {"Public Key", "wlan.ext_tag.owe_dh_parameter.public_key",
60393 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60394
60395 {&hf_ieee80211_tag_pasn_parameters_control,
60396 {"Control", "wlan.etag.pasn_params.control",
60397 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60398
60399 {&hf_ieee80211_tag_pasn_params_comeback_info_present,
60400 {"Comeback Info Present", "wlan.etag.pasn_params.comeback_info_present",
60401 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60402
60403 {&hf_ieee80211_tag_pasn_params_group_and_key_present,
60404 {"Group and Key Present", "wlan.etag.pasn_params.group_and_key_present",
60405 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60406
60407 {&hf_ieee80211_tag_pasn_parameters_reserved,
60408 {"Reserved", "wlan.etag.pasn_parameters.reserved",
60409 FT_UINT8, BASE_HEX, NULL((void*)0), 0xFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60410
60411 {&hf_ieee80211_tag_pasn_parameters_wrapped_fmt,
60412 {"Wrapped Data Format", "wlan.etag.pasn_parameters.wrapped_data_format",
60413 FT_UINT8, BASE_HEX|BASE_RANGE_STRING0x00000100, RVALS(wrapped_data_fmt_rvals)((0 ? (const struct _range_string*)0 : ((wrapped_data_fmt_rvals
))))
,
60414 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60415
60416 {&hf_ieee80211_tag_pasn_comeback_after,
60417 {"Comeback After", "wlan.etag.pasn_parameters.comeback_after",
60418 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) }},
60419
60420 {&hf_ieee80211_tag_pasn_cookie_length,
60421 {"Cookie length", "wlan.etag.pasn_parameters.cookie_length",
60422 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60423
60424 {&hf_ieee80211_tag_pasn_cookie,
60425 {"Cookie", "wlan.etag.pasn_parameters.cookie",
60426 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60427
60428 {&hf_ieee80211_tag_pasn_finite_cyclic_group_id,
60429 {"Finite Cyclic Group ID",
60430 "wlan.etag.pasn_parameters.finite_cyclic_group_id",
60431 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60432
60433 {&hf_ieee80211_tag_pasn_ephemeral_public_key_len,
60434 {"Ephemeral Public Key Length",
60435 "wlan.etag.pasn_parameters.ephemeral_public_key_len",
60436 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60437
60438 {&hf_ieee80211_tag_pasn_ephemeral_public_key,
60439 {"Ephemeral Public Key",
60440 "wlan.etag.pasn_parameters.ephemeral_public_key",
60441 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60442
60443 {&hf_ieee80211_pasn_auth1_frame_len,
60444 {"Auth Frame 1 Length", "wlan.pasn_wrapped_data.auth_frame_1_len",
60445 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60446
60447 {&hf_ieee80211_pasn_auth2_frame_len,
60448 {"Auth Frame 2 Length", "wlan.pasn_wrapped_data.auth_frame_2_len",
60449 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60450
60451 {&hf_ieee80211_eht_eml_control_field,
60452 {"EML Control Field", "wlan.eht.eml_control",
60453 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60454
60455 {&hf_ieee80211_eht_eml_control_emlsr_mode,
60456 {"EMLSR Mode", "wlan.eht.eml_control.emlsr_mode",
60457 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60458
60459 {&hf_ieee80211_eht_eml_control_emlmr_mode,
60460 {"EMLMR Mode", "wlan.eht.eml_control.emlmr_mode",
60461 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60462
60463 {&hf_ieee80211_eht_eml_control_emlsr_para_update_control,
60464 {"EMLSR Parameter Update Control", "wlan.eht.eml_control.emlsr_para_update_control",
60465 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60466
60467 {&hf_ieee80211_eht_eml_control_device_coexist_activities,
60468 {"In-Device Coexistence Activities",
60469 "wlan.eht.eml_control.in_device_coexist_activities",
60470 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60471
60472 {&hf_ieee80211_eht_eml_control_reserved,
60473 {"Reserved", "wlan.eht.eml_control.reserved",
60474 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60475
60476 {&hf_ieee80211_eht_eml_control_link_bitmap,
60477 {"Link Bitmap", "wlan.eht.eml_control.link_bitmap",
60478 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60479
60480 {&hf_ieee80211_eht_eml_control_link_enable_id,
60481 {"Enable Link ID",
60482 "wlan.eht.eml_control.link_map.enable_id",
60483 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60484
60485 {&hf_ieee80211_eht_eml_control_mcs_map_count,
60486 {"MCS Map Count Control", "wlan.eht.eml_control.mcs_map_count",
60487 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60488
60489 {&hf_ieee80211_eht_eml_control_mcs_map_count_bw,
60490 {"MCS Map Count Control BW", "wlan.eht.eml_control.mcs_map_count.bw",
60491 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) }},
60492
60493 {&hf_ieee80211_eht_eml_control_mcs_map_count_reserved,
60494 {"Reserved", "wlan.eht.eml_control.mcs_map_count.reserved",
60495 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60496
60497 {&hf_ieee80211_eht_emlsr_para_update,
60498 {"EMLSR Parameter Update", "wlan.eht.emlsr_parameter_update",
60499 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60500
60501 {&hf_ieee80211_eht_emlsr_para_update_padding_delay,
60502 {"EMLSR Padding Delay", "wlan.eht.emlsr_parameter_update.padding_delay",
60503 FT_UINT8, BASE_HEX, NULL((void*)0), 0x07, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60504
60505 {&hf_ieee80211_eht_emlsr_para_update_tran_delay,
60506 {"EMLSR Transition Delay", "wlan.eht.emlsr_parameter_update.transition_delay",
60507 FT_UINT8, BASE_HEX, NULL((void*)0), 0x38, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60508
60509 {&hf_ieee80211_eht_emlsr_para_update_reserved,
60510 {"Reserved", "wlan.eht.emlsr_parameter_update.reserved",
60511 FT_UINT8, BASE_HEX, NULL((void*)0), 0xc0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60512
60513 {&hf_ieee80211_eht_multi_link_control,
60514 {"Multi-Link Control", "wlan.eht.multi_link.control",
60515 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60516
60517 {&hf_ieee80211_eht_multi_link_control_type,
60518 {"Type", "wlan.eht.multi_link.control.type",
60519 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) }},
60520
60521 {&hf_ieee80211_eht_multi_link_control_reserved,
60522 {"Reserved", "wlan.eht.multi_link.control.reserved",
60523 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60524
60525 {&hf_ieee80211_eht_multi_link_control_link_id_present,
60526 {"Link ID Info Present",
60527 "wlan.eht.multi_link.control.basic.link_id_info_present",
60528 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60529
60530 {&hf_ieee80211_eht_multi_link_control_bss_parms_ch_count,
60531 {"BSS Parameters Change Count Present",
60532 "wlan.eht.multi_link.control.basic.bss_parameters_change_count_present",
60533 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60534
60535 {&hf_ieee80211_eht_multi_link_control_medium_sync_delay,
60536 {"Medium Synchronization Delay Info Present",
60537 "wlan.eht.multi_link.control.basic.medium_sync_delayinfo_present",
60538 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60539
60540 {&hf_ieee80211_eht_multi_link_control_eml_capa,
60541 {"EML Capabilities Present",
60542 "wlan.eht.multi_link.control.basic.eml_capabilities_present",
60543 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60544
60545 {&hf_ieee80211_eht_multi_link_control_mld_capa,
60546 {"MLD Capabilities Present",
60547 "wlan.eht.multi_link.control.basic.mld_capabilities_present",
60548 FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60549
60550 {&hf_ieee80211_eht_multi_link_control_basic_mld_id_present,
60551 {"AP MLD ID Present",
60552 "wlan.eht.multi_link.control.basic.mld_id_present",
60553 FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60554
60555 {&hf_ieee80211_eht_multi_link_control_ext_mld_capa,
60556 {"Extended MLD Capabilities and Operations Present",
60557 "wlan.eht.multi_link.control.basic.ext_mld_capabilities_present",
60558 FT_BOOLEAN, 16, NULL((void*)0), 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60559
60560 {&hf_ieee80211_eht_multi_link_control_bitmap_reserved,
60561 {"Reserved", "wlan.eht.multi_link.control.basic.reserved",
60562 FT_UINT16, BASE_HEX, NULL((void*)0), 0xF800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60563
60564 {&hf_ieee80211_eht_multi_link_control_probe_mld_id_present,
60565 {"AP MLD ID Present",
60566 "wlan.eht.multi_link.control.probe.mld_id_present",
60567 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60568
60569 {&hf_ieee80211_eht_multi_link_control_probe_mld_mac_addr_present,
60570 {"MLD MAC Address Present",
60571 "wlan.eht.multi_link.control.probe.mld_mac_addr_present",
60572 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60573
60574 {&hf_ieee80211_eht_multi_link_control_probe_reserved,
60575 {"Reserved", "wlan.eht.multi_link.control.probe.reserved",
60576 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60577
60578 {&hf_ieee80211_eht_multi_link_control_tdls_reserved,
60579 {"Reserved", "wlan.eht.multi_link.control.tdls.reserved",
60580 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60581
60582 {&hf_ieee80211_eht_multi_link_control_prio_access_reserved,
60583 {"Reserved", "wlan.eht.multi_link.control.prio_access.reserved",
60584 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60585
60586 {&hf_ieee80211_eht_multi_link_control_reconfig_mld_mac,
60587 {"MLD MAC Address Present",
60588 "wlan.eht.multi_link.control.reconfig.mld_mac_addr_present",
60589 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60590
60591 {&hf_ieee80211_eht_multi_link_control_reconfig_eml_capa,
60592 {"EML Capabilities Present",
60593 "wlan.eht.multi_link.control.reconfig.eml_capabilities_present",
60594 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60595
60596 {&hf_ieee80211_eht_multi_link_control_reconfig_mld_capa_oper,
60597 {"MLD Capabilities And Operations Present",
60598 "wlan.eht.multi_link.control.reconfig.mld_capabilities_present",
60599 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60600
60601 {&hf_ieee80211_eht_multi_link_control_reconfig_ext_mld_capa_oper,
60602 {"Extended MLD Capabilities And Operations Present",
60603 "wlan.eht.multi_link.control.reconfig.ext_mld_capa_oper_present",
60604 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60605
60606 {&hf_ieee80211_eht_multi_link_control_reconfig_reserved,
60607 {"Reserved",
60608 "wlan.eht.multi_link.control.reconfig.reserved",
60609 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60610
60611 {&hf_ieee80211_eht_common_field_length,
60612 {"Common Info Length", "wlan.eht.multi_link.common_info.length",
60613 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60614
60615 {&hf_ieee80211_eht_common_field_mld_mac,
60616 {"MLD MAC Address", "wlan.eht.multi_link.common_info.mld_mac_address",
60617 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60618
60619 {&hf_ieee80211_eht_common_field_link_id_field,
60620 {"Link ID subfield", "wlan.eht.multi_link.common_info.link_id_subfield",
60621 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60622
60623 {&hf_ieee80211_eht_common_info_link_id,
60624 {"Link ID", "wlan.eht.multi_link.common_info.link_id_subfield.link_id",
60625 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60626
60627 {&hf_ieee80211_eht_common_info_link_id_reserved,
60628 {"Reserved", "wlan.eht.multi_link.common_info.link_id_subfield.reserved",
60629 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60630
60631 {&hf_ieee80211_eht_common_field_bss_param_change_count,
60632 {"BSS Parameters Change Count",
60633 "wlan.eht.multi_link.common_info.bss_parameters_change_count",
60634 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60635
60636 {&hf_ieee80211_eht_common_field_medium_sync_field,
60637 {"Medium Sync Field", "wlan.eht.multi_link.common_info.medium_sync_field",
60638 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60639
60640 {&hf_ieee80211_eht_common_info_medium_sync_duration,
60641 {"Medium Synchronization Duration",
60642 "wlan.eht.multi_link.common_info.medium_sync.sync_duration",
60643 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60644
60645 {&hf_ieee80211_eht_common_info_medium_sync_threshold,
60646 {"Medium Synchronization OFDM ED Threshold",
60647 "wlan.eht.multi_link.common_info.medium_sync.ofdm_ed_threshold",
60648 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60649
60650 {&hf_ieee80211_eht_common_info_medium_sync_max_txops,
60651 {"Medium Synchronization Maximum Number of TXOPs",
60652 "wlan.eht.multi_link.common_info.medium_sync.max_number_of_txops",
60653 FT_UINT16, BASE_DEC, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60654
60655 {&hf_ieee80211_eht_common_field_eml_capabilities,
60656 {"EML Capabilities", "wlan.eht.multi_link.common_info.eml_capabilities",
60657 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60658
60659 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_support,
60660 {"EMLSR Support",
60661 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_support",
60662 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60663
60664 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_emlmr_padding_delay,
60665 {"EMLSR/EMLMR Padding Delay",
60666 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_emlmr_padding_delay",
60667 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60668
60669 {&hf_ieee80211_eht_common_info_eml_capa_emlsr_emlmr_transition_delay,
60670 {"EMLSR/EMLMR Transition Delay",
60671 "wlan.eht.multi_link.common_info.eml_capabilities.emlsr_emlmr_transition_delay",
60672 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0070, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60673
60674 {&hf_ieee80211_eht_common_info_eml_capa_emlmr_support,
60675 {"EMLMR Support",
60676 "wlan.eht.multi_link.common_info.eml_capabilities.emlmr_support",
60677 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60678
60679 {&hf_ieee80211_eht_common_info_eml_capa_reserved1,
60680 {"Reserved",
60681 "wlan.eht.multi_link.common_info.eml_capabilities.capa_reserved1",
60682 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60683
60684 {&hf_ieee80211_eht_common_info_eml_capa_transition_timeout,
60685 {"Transition Timeout",
60686 "wlan.eht.multi_link.common_info.eml_capabilities.transition_timeout",
60687 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60688
60689 {&hf_ieee80211_eht_common_info_eml_capa_reserved2,
60690 {"Reserved",
60691 "wlan.eht.multi_link.common_info.eml_capabilities.capa_reserved2",
60692 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60693
60694 {&hf_ieee80211_eht_common_field_mld_capabilities,
60695 {"MLD Capabilities", "wlan.eht.multi_link.common_info.mld_capabilities",
60696 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60697
60698 {&hf_ieee80211_eht_common_info_mld_max_simul_links,
60699 {"Maximum Number of Simultaneous Links",
60700 "wlan.eht.multi_link.common_info.mld_capabilities.max_simultaneous_links",
60701 FT_UINT16, BASE_DEC, NULL((void*)0), 0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60702
60703 {&hf_ieee80211_eht_common_info_mld_srs_support,
60704 {"SRS Support",
60705 "wlan.eht.multi_link.common_info.mld_capabilities.srs_support",
60706 FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60707
60708 {&hf_ieee80211_eht_common_info_mld_tid_to_link_map_neg,
60709 {"TID-To-Link Mapping Negotiation Support",
60710 "wlan.eht.multi_link.common_info.mld_capabilities.tid_to_link_neg_sup",
60711 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0060, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60712
60713 {&hf_ieee80211_eht_common_info_mld_freq_sep_for_str,
60714 {"Frequency Separation For STR/AP MLD Type Indication",
60715 "wlan.eht.multi_link.common_info.mld_capabilities.freq_sep_for_str",
60716 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0F80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60717
60718 {&hf_ieee80211_eht_common_info_mld_aar_support,
60719 {"AAR Support",
60720 "wlan.eht.multi_link.common_info.mld_capabilities.aar_support",
60721 FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60722
60723 {&hf_ieee80211_eht_common_info_mld_link_reconf_op_support,
60724 {"Link Reconfiguration Operation Support",
60725 "wlan.eht.multi_link.common_info.mld_capabilities.link_reconfig_op_support",
60726 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60727
60728 {&hf_ieee80211_eht_common_info_mld_aligned_twt_support,
60729 {"Aligned TWT Support",
60730 "wlan.eht.multi_link.common_info.mld_capabilities.aligned_twt_support",
60731 FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60732
60733 {&hf_ieee80211_eht_common_info_mld_reserved,
60734 {"Reserved", "wlan.eht.multi_link.common_info.mld_capabilities.reserved",
60735 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60736
60737 {&hf_ieee80211_eht_common_field_ap_mld_mac,
60738 {"AP MLD MAC Address",
60739 "wlan.eht.multi_link.common_info.ap_mld_mac_address",
60740 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60741
60742 {&hf_ieee80211_eht_common_field_mld_id,
60743 {"AP MLD ID", "wlan.eht.multi_link.common_info.mld_id",
60744 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60745
60746 {&hf_ieee80211_eht_common_field_ext_mld_capabilities,
60747 {"Extended MLD Capabilities and Operations",
60748 "wlan.eht.multi_link.common_info.ext_mld_capabilities",
60749 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60750
60751 {&hf_ieee80211_eht_common_info_ext_mld_op_update_support,
60752 {"Operation Parameter Update Support",
60753 "wlan.eht.multi_link.common_info.ext_mld_capabilities.op_param_update_support",
60754 FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60755
60756 {&hf_ieee80211_eht_common_info_ext_mld_max_simul_links,
60757 {"Recommended Max Simultaneous Links",
60758 "wlan.eht.multi_link.common_info.ext_mld_capabilities.max_simultaneous_links",
60759 FT_UINT16, BASE_DEC, NULL((void*)0), 0x001E, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60760
60761 {&hf_ieee80211_eht_common_info_ext_mld_nstr_status_support,
60762 {"NSTR Status Update Support",
60763 "wlan.eht.multi_link.common_info.ext_mld_capabilities.nstr_status_update_support",
60764 FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60765
60766 {&hf_ieee80211_eht_common_info_ext_mld_emlsr_enable_one_link_support,
60767 {"EMLSR Enablement On One Link Support",
60768 "wlan.eht.multi_link.common_info.ext_mld_capabilities.emlsr_enable_one_link_support",
60769 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60770
60771 {&hf_ieee80211_eht_common_info_ext_mld_btm_mld_recom_aps_support,
60772 {"BTM MLD Recommendation For Multiple APs Support",
60773 "wlan.eht.multi_link.common_info.ext_mld_capabilities.btm_mld_recom_multiple_aps_support",
60774 FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60775
60776 {&hf_ieee80211_eht_common_info_ext_mld_reserved,
60777 {"Reserved", "wlan.eht.multi_link.common_info.ext_mld_capabilities.reserved",
60778 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60779
60780 {&hf_ieee80211_eht_profile_sta_control,
60781 {"STA Control", "wlan.eht.multi_link.sta_profile.sta_control",
60782 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60783
60784 {&hf_ieee80211_eht_multi_link_subelt_tag,
60785 {"Subelement ID", "wlan.eht.multi_link.sta_profile.subelt_id",
60786 FT_UINT8, BASE_HEX | BASE_RANGE_STRING0x00000100, RVALS(multi_link_sub_elt_string)((0 ? (const struct _range_string*)0 : ((multi_link_sub_elt_string
))))
,
60787 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60788
60789 {&hf_ieee80211_eht_multi_link_subelt_len,
60790 {"Subelement Length", "wlan.eht.multi_link.sta_profile.subelt_len",
60791 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60792
60793 {&hf_ieee80211_eht_multi_link_type_0_link_count,
60794 {"Basic STA Profile Count", "wlan.eht.multi_link.type_0.sta_profile_count",
60795 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60796
60797 {&hf_ieee80211_eht_multi_link_type_1_link_count,
60798 {"Probe Request STA Profile Count", "wlan.eht.multi_link.type_1.sta_profile_count",
60799 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60800
60801 {&hf_ieee80211_eht_multi_link_type_2_link_count,
60802 {"Reconfiguration STA Profile Count", "wlan.eht.multi_link.type_2.sta_profile_count",
60803 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60804
60805 {&hf_ieee80211_eht_multi_link_type_3_link_count,
60806 {"TDLS STA Profile Count", "wlan.eht.multi_link.type_3.sta_profile_count",
60807 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60808
60809 {&hf_ieee80211_eht_multi_link_type_4_link_count,
60810 {"Priority Access STA Profile Count", "wlan.eht.multi_link.type_4.sta_profile_count",
60811 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60812
60813 {&hf_ieee80211_eht_multi_link_link_id_list,
60814 {"STA Profiles LinkIds", "wlan.eht.multi_link.sta_profile_id_list",
60815 FT_STRINGZ, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60816
60817 {&hf_ieee80211_eht_profile_link_id,
60818 {"Link ID", "wlan.eht.multi_link.sta_profile.sta_control.link_id",
60819 FT_UINT16, BASE_HEX, NULL((void*)0), STA_CTRL_LINK_ID0x000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60820
60821 {&hf_ieee80211_eht_profile_complete_profile,
60822 {"Complete Profile",
60823 "wlan.eht.multi_link.sta_profile.sta_control.complete_profile",
60824 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_COMPLETE_PROFILE0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60825
60826 {&hf_ieee80211_eht_profile_mac_address_present,
60827 {"STA MAC Address Present",
60828 "wlan.eht.multi_link.sta_profile.sta_control.mac_address_present",
60829 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_MAC_ADDR_PRESENT0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60830
60831 {&hf_ieee80211_eht_profile_beacon_interval_present,
60832 {"Beacon Interval Present",
60833 "wlan.eht.multi_link.sta_profile.sta_control.beacon_interval_present",
60834 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_BEACON_INT_PRESENT0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60835
60836 {&hf_ieee80211_eht_profile_tsf_offset_present,
60837 {"TSF Offset Present",
60838 "wlan.eht.multi_link.sta_profile.sta_control.tsf_offset_present",
60839 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_TSF_OFFSET_PRESENT0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60840
60841 {&hf_ieee80211_eht_profile_dtim_info_present,
60842 {"DTIM Info Present",
60843 "wlan.eht.multi_link.sta_profile.sta_control.dtim_info_present",
60844 FT_BOOLEAN, 16, NULL((void*)0), STA_CTRL_DTIM_INFO_PRESENT0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60845
60846 {&hf_ieee80211_eht_profile_nstr_link_pair_present,
60847 {"NSTR Link Pair Present",
60848 "wlan.eht.multi_link.sta_profile.sta_control.nstr_link_pair_present",
60849 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) }},
60850
60851 {&hf_ieee80211_eht_profile_nstr_bitmap_size,
60852 {"NSTR Bitmap Size",
60853 "wlan.eht.multi_link.sta_profile.sta_control.nstr_bitmap_size",
60854 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) }},
60855
60856 {&hf_ieee80211_eht_profile_bss_params_change_count_present,
60857 {"BSS Parameters Change Count Present",
60858 "wlan.eht.multi_link.sta_profile.sta_control.bss_params_change_count_present",
60859 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) }},
60860
60861 {&hf_ieee80211_eht_profile_reserved,
60862 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.reserved",
60863 FT_UINT16, BASE_HEX, NULL((void*)0), STA_CTRL_RESERVED0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60864
60865 {&hf_ieee80211_eht_profile_probe_reserved,
60866 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.probe_reserved",
60867 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60868
60869 {&hf_ieee80211_eht_profile_removal_timer_present,
60870 {"AP Removal Timer Present",
60871 "wlan.eht.multi_link.sta_profile.sta_control.ap_removal_timer_present",
60872 FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60873
60874 {&hf_ieee80211_eht_profile_reconfig_operation_type,
60875 {"Reconfiguration Operation Type",
60876 "wlan.eht.multi_link.sta_profile.sta_control.reconfig_operation_type",
60877 FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100, RVALS(eht_reconfig_op_type_rvals)((0 ? (const struct _range_string*)0 : ((eht_reconfig_op_type_rvals
))))
,
60878 0x0780, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60879
60880 {&hf_ieee80211_eht_profile_operation_para_present,
60881 {"Operation Parameters Present",
60882 "wlan.eht.multi_link.sta_profile.sta_control.operation_parameters_present",
60883 FT_BOOLEAN, 16, NULL((void*)0), 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60884
60885 {&hf_ieee80211_eht_profile_reconfig_nstr_bitmap_size,
60886 {"NSTR Bitmap Size",
60887 "wlan.eht.multi_link.sta_profile.sta_control.reconfig_nstr_bitmap_size",
60888 FT_UINT16, BASE_DEC, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60889
60890 {&hf_ieee80211_eht_profile_reconfig_nstr_bitmap_present,
60891 {"NSTR Indication Bitmap Present",
60892 "wlan.eht.multi_link.sta_control.reconfig_nstr_bitmap_present",
60893 FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60894
60895 {&hf_ieee80211_eht_profile_reconfig_reserved,
60896 {"Reserved", "wlan.eht.multi_link.sta_profile.sta_control.reconfig_reserved",
60897 FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60898
60899 {&hf_ieee80211_eht_profile_prio_acc_reserved,
60900 {"Reserved",
60901 "wlan.eht.multi_link.sta_profile.sta_control.priority_access_reserved",
60902 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60903
60904 {&hf_ieee80211_eht_sta_profile_info_len,
60905 {"STA Info Length",
60906 "wlan.eht.multi_link.sta_profile.sta_info.len",
60907 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60908
60909 {&hf_ieee80211_eht_sta_profile_info_mac,
60910 {"STA MAC Address",
60911 "wlan.eht.multi_link.sta_profile.sta_info.sta_mac_addr",
60912 FT_ETHER, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60913
60914 {&hf_ieee80211_eht_sta_profile_info_beacon,
60915 {"Beacon Interval",
60916 "wlan.eht.multi_link.sta_profile.sta_info.beacon_interval",
60917 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60918
60919 {&hf_ieee80211_eht_sta_profile_info_tsf_offset,
60920 {"TSF Offset",
60921 "wlan.eht.multi_link.sta_profile.sta_info.tsf_offset",
60922 FT_INT64, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60923
60924 {&hf_ieee80211_eht_sta_profile_info_dtim_count,
60925 {"DTIM Count",
60926 "wlan.eht.multi_link.sta_profile.sta_info.dtim_count",
60927 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60928
60929 {&hf_ieee80211_eht_sta_profile_info_dtim_period,
60930 {"DTIM Period",
60931 "wlan.eht.multi_link.sta_profile.sta_info.dtim_period",
60932 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60933
60934 {&hf_ieee80211_eht_sta_profile_info_bitmap,
60935 {"NSTR Indication Bitmap",
60936 "wlan.eht.multi_link.sta_profile.sta_info.nstr_bitmap",
60937 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60938
60939 {&hf_ieee80211_eht_sta_profile_bss_params_change_count,
60940 {"BSS Parameters Change Count",
60941 "wlan.eht.multi_link.sta_profile.sta_info.bss_params_change_count",
60942 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60943
60944 {&hf_ieee80211_eht_sta_profile_removal_timer,
60945 {"AP Removal Timer",
60946 "wlan.eht.multi_link.sta_profile.sta_info.ap_removal_timer",
60947 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60948
60949 {&hf_ieee80211_eht_sta_profile_presence_indi,
60950 {"Presence Indication",
60951 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication",
60952 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60953
60954 {&hf_ieee80211_eht_sta_profile_presence_indi_max_mpdu_length_present,
60955 {"Maximum MPDU Length Present",
60956 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.max_mpdu_length_present",
60957 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60958
60959 {&hf_ieee80211_eht_sta_profile_presence_indi_max_amsdu_length_present,
60960 {"Maximum A-MSDU Length Present",
60961 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.max_amsdu_length_present",
60962 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60963
60964 {&hf_ieee80211_eht_sta_profile_presence_indi_reserved,
60965 {"Reserved",
60966 "wlan.eht.multi_link.sta_profile.sta_info.presence_indication.reserved",
60967 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60968
60969 {&hf_ieee80211_eht_sta_profile_operation_para_info,
60970 {"Operation Parameter Info",
60971 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info",
60972 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60973
60974 {&hf_ieee80211_eht_sta_profile_operation_para_info_max_mpdu_length,
60975 {"Maximum MPDU Length",
60976 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.max_mpdu_length",
60977 FT_UINT16, BASE_HEX, VALS(vht_max_mpdu_length_flag)((0 ? (const struct _value_string*)0 : ((vht_max_mpdu_length_flag
))))
, 0x0003,
60978 "In Octets unit", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60979
60980 {&hf_ieee80211_eht_sta_profile_operation_para_info_amsdu_length,
60981 {"Maximum A-MSDU length",
60982 "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.amsdu_length",
60983 FT_BOOLEAN, 16, TFS(&ht_max_amsdu_flag)((0 ? (const struct true_false_string*)0 : ((&ht_max_amsdu_flag
))))
, 0x0004,
60984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60985
60986 {&hf_ieee80211_eht_sta_profile_operation_para_info_pad,
60987 {"Pad", "wlan.eht.multi_link.sta_profile.sta_info.operation_parameter_info.pad",
60988 FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF8,
60989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60990
60991 {&hf_ieee80211_eht_operation_parameters,
60992 {"EHT Operation Parameters",
60993 "wlan.eht.eht_operation_parameters",
60994 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
60995
60996 {&hf_ieee80211_eht_basic_eht_mcs_nss_set,
60997 {"Basic EHT-MCS And Nss Set",
60998 "wlan.eht.basic_eht_mcs_and_nss_set",
60999 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61000
61001 {&hf_ieee80211_eht_operation_control_chan_width,
61002 {"Channel Width",
61003 "wlan.eht.eht_operation_information.control.channel_width",
61004 FT_UINT8, BASE_DEC, VALS(eht_operation_control_chan_wid_vals)((0 ? (const struct _value_string*)0 : ((eht_operation_control_chan_wid_vals
))))
,
61005 0x7, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61006
61007 {&hf_ieee80211_eht_operation_control_reserved,
61008 {"Reserved", "wlan.eht.eht_operation_information.control.reserved",
61009 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61010
61011 {&hf_ieee80211_eht_operation_info_present,
61012 {"EHT Operation Information Present",
61013 "wlan.eht.eht_operation_parameters.eht_operation_information_present",
61014 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61015
61016 {&hf_ieee80211_eht_operation_subchannel_bitmap_present,
61017 {"Disabled Subchannel Bitmap Present",
61018 "wlan.eht.eht_operation_parameters.disabled_subchannel_bitmap_present",
61019 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61020
61021 {&hf_ieee80211_eht_operation_default_pe_duration,
61022 {"EHT Default PE Duration",
61023 "wlan.eht.eht_operation_parameters.eht_default_pe_duration",
61024 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61025
61026 {&hf_ieee80211_eht_operation_group_addressed_bu_indication_limit,
61027 {"Group Addressed BU Indication Limit",
61028 "wlan.eht.eht_operation_parameters.group_addressed_bu_indication_limit",
61029 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61030
61031 {&hf_ieee80211_eht_operation_group_addressed_bu_indication_exp,
61032 {"Group Addressed BU Indication Exponent",
61033 "wlan.eht.eht_operation_parameters.group_addressed_bu_indication_exponent",
61034 FT_UINT8, BASE_DEC, NULL((void*)0), 0x30, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61035
61036 {&hf_ieee80211_eht_operation_mcs15_disable,
61037 {"MCS15 Disable",
61038 "wlan.eht.eht_operation_parameters.mcs_15_disable",
61039 FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61040
61041 {&hf_ieee80211_eht_operation_reserved,
61042 {"Reserved", "wlan.eht.eht_operation_parameters.reserved",
61043 FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61044
61045 {&hf_ieee80211_eht_operation_control,
61046 {"Control", "wlan.eht.eht_operation_information.control",
61047 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61048
61049 {&hf_ieee80211_eht_operation_ccfs0,
61050 {"CCFS0", "wlan.eht.eht_operation_information.ccfs0",
61051 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61052
61053 {&hf_ieee80211_eht_operation_ccfs1,
61054 {"CCFS1", "wlan.eht.eht_operation_information.ccfs1",
61055 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61056
61057 {&hf_ieee80211_eht_operation_disabled_bitmap,
61058 {"Disabled Subchannel Bitmap",
61059 "wlan.eht.eht_operation_information.disabled_subchannel_bitmap",
61060 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61061
61062 {&hf_ieee80211_eht_mac_capabilities,
61063 {"EHT MAC Capabilities Information", "wlan.eht.mac_capabilities_info",
61064 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61065
61066 {&hf_ieee80211_eht_mac_capa_epcs_prio_access_support,
61067 {"EPCS Priority Access Support",
61068 "wlan.eht.mac_capabilities.epcs_priority_access_support",
61069 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) }},
61070
61071 {&hf_ieee80211_eht_mac_capa_eht_om_control_support,
61072 {"EHT OM Control Support",
61073 "wlan.eht.mac_capabilities.eht_om_control_support",
61074 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) }},
61075
61076 {&hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_1_support,
61077 {"Triggered TXOP Sharing Mode 1 Support",
61078 "wlan.eht.mac_capabilities.triggered_txop_sharing_mode_1_support",
61079 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) }},
61080
61081 {&hf_ieee80211_eht_mac_capa_trig_txop_sharing_mode_2_support,
61082 {"Triggered TXOP Sharing Mode 2 Support",
61083 "wlan.eht.mac_capabilities.triggered_txop_sharing_mode_2_support",
61084 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) }},
61085
61086 {&hf_ieee80211_eht_mac_capa_restricted_twt_support,
61087 {"Restricted TWT Support",
61088 "wlan.eht.mac_capabilities.restricted_twt_support",
61089 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) }},
61090
61091 {&hf_ieee80211_eht_mac_capa_scs_traffic_description_support,
61092 {"SCS Traffic Description Support",
61093 "wlan.eht.mac_capabilities.scs_traffic_description_support",
61094 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) }},
61095
61096 {&hf_ieee80211_eht_mac_capa_maximum_mpdu_length,
61097 {"Maximum MPDU Length",
61098 "wlan.eht.mac_capabilities.maximum_mpdu_length",
61099 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) }},
61100
61101 {&hf_ieee80211_eht_mac_capa_maximum_ampdu_length_exp_ext,
61102 {"Maximum A-MPDU Length Exponent Extension",
61103 "wlan.eht.mac_capabilities.maximum_a_mpdu_length_exponent_extension",
61104 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61105
61106 {&hf_ieee80211_eht_mac_capa_eht_trs_support,
61107 {"EHT TRS Support",
61108 "wlan.eht.mac_capabilities.eht_trs_support",
61109 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) }},
61110
61111 {&hf_ieee80211_eht_mac_capa_txop_return_support_txop_sha_mode,
61112 {"TXOP Return Support In TXOP Sharing Mode 2",
61113 "wlan.eht.mac_capabilities.txop_return_support_in_txop_sharing_mode_2",
61114 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) }},
61115
61116 {&hf_ieee80211_eht_mac_capa_two_bqrs_support,
61117 {"Two BQRs Support",
61118 "wlan.eht.mac_capabilities.two_bqrs_support",
61119 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) }},
61120
61121 {&hf_ieee80211_eht_mac_capa_eht_link_adaptation_support,
61122 {"EHT Link Adaptation Support",
61123 "wlan.eht.mac_capabilities.eht_link_adaptation_support",
61124 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) }},
61125
61126 {&hf_ieee80211_eht_mac_capa_unsolicited_epcs_update,
61127 {"Unsolicited EPCS Priority Access Parameter Update",
61128 "wlan.eht.mac_capabilities.unsolicited_epcs_prio_access_para_update",
61129 FT_UINT16, BASE_DEC, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61130
61131 {&hf_ieee80211_eht_mac_capa_reserved,
61132 {"Reserved",
61133 "wlan.eht.mac_capabilities.reserved",
61134 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61135
61136 {&hf_ieee80211_eht_phy_bits_0_15,
61137 {"EHT PHY Bits 0-15", "wlan.eht.phy_capabilities.bits_0_15",
61138 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61139
61140 {&hf_ieee80211_eht_phy_bits_0_15_reserved,
61141 {"Reserved", "wlan.eht.phy_capabilities.bits_0_15.reserved",
61142 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61143
61144 {&hf_ieee80211_eht_phy_bits_0_15_320_mhz_in_6ghz,
61145 {"Support For 320 MHz in 6 GHz",
61146 "wlan.eht.phy_capabilities.bits_0_15.support_for_320mhz_in_6ghz",
61147 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) }},
61148
61149 {&hf_ieee80211_eht_phy_bits_0_15_242_tone_ru_bw_wider_20mhz,
61150 {"Support for 242-tone RU in BW Wider than 20 MHz",
61151 "wlan.eht.phy_capabilities.bits_0_15.support_for_242_tone_ru_in_bw_wider_20mhz",
61152 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) }},
61153
61154 {&hf_ieee80211_eht_phy_bits_0_15_ndp_and_3_2_us_gi,
61155 {"NDP With 4x EHT-LTF And 3.2 us GI",
61156 "wlan.eht.phy_capabilities.bits_0_15.ndp_with_4x_eht_ltf_and_3_2_us_gi",
61157 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) }},
61158
61159 {&hf_ieee80211_eht_phy_bits_0_15_partial_bw_ul_mu_mimo,
61160 {"Partial Bandwidth UL MU-MIMO",
61161 "wlan.eht.phy_capabilities.bits_0_15.partial_bandwidth_ul_mu_mimo",
61162 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) }},
61163
61164 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformer,
61165 {"SU Beamformer", "wlan.eht.phy_capabilities.bits_0_15.su_beamformer",
61166 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) }},
61167
61168 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee,
61169 {"SU Beamformee", "wlan.eht.phy_capabilities.bits_0_15.su_beamformee",
61170 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) }},
61171
61172 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_le_80mhz,
61173 {"Beamformee SS (<= 80 MHz)",
61174 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_le_80mhz",
61175 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0380, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61176
61177 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_160mhz,
61178 {"Beamformee SS (= 160 MHz)",
61179 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_eq_160mhz",
61180 FT_UINT16, BASE_HEX, NULL((void*)0), 0x1c00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61181
61182 {&hf_ieee80211_eht_phy_bits_0_15_su_beamformee_eq_320mhz,
61183 {"Beamformee SS (= 320 MHz)",
61184 "wlan.eht.phy_capabilities.bits_0_15.beamformee_ss_eq_320_mhz",
61185 FT_UINT16, BASE_HEX, NULL((void*)0), 0xe000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61186
61187 {&hf_ieee80211_eht_phy_bits_16_31,
61188 {"EHT PHY Bits 16-31", "wlan.eht.phy_capabilities.bits_16_31",
61189 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61190
61191 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_lt_80mhz,
61192 {"Number Of Sounding Dimensions (<= 80 MHz)",
61193 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_le_80_mhz",
61194 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61195
61196 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_160mhz,
61197 {"Number Of Sounding Dimensions (= 160 MHz)",
61198 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_eq_160_mhz",
61199 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0038, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61200
61201 {&hf_ieee80211_eht_phy_bits_16_31_num_sounding_dims_eq_320mhz,
61202 {"Number Of Sounding Dimensions (= 320 MHz)",
61203 "wlan.eht.phy_capabilities.bits_16_31.number_of_sounding_dims_eq_320_mhz",
61204 FT_UINT16, BASE_HEX, NULL((void*)0), 0x01c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61205
61206 {&hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_su_feedback,
61207 {"Ng = 16 SU Feedback",
61208 "wlan.eht.phy_capabilities.bits_16_31.ng_eq_16_su_fbck",
61209 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) }},
61210
61211 {&hf_ieee80211_eht_phy_bits_16_31_num_ng_eq_16_mu_feedback,
61212 {"Ng = 16 MU Feedback",
61213 "wlan.eht.phy_capabilities.bits_16_31.ng_eq_16_mu_fbck",
61214 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) }},
61215
61216 {&hf_ieee80211_eht_phy_bits_16_31_codebook_size_4_2_su_fbck,
61217 {"Codebook Size = (4,2) SU Feedback",
61218 "wlan.eht.phy_capabilities.bits_16_31.codebook_size_eq_4_2_su_fbck",
61219 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) }},
61220
61221 {&hf_ieee80211_eht_phy_bits_16_31_codebook_size_7_5_mu_fbck,
61222 {"Codebook Size = (7,5) MU Feedback",
61223 "wlan.eht.phy_capabilities.bits_16_31.codebook_size_eq_7_5_mu_fbck",
61224 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) }},
61225
61226 {&hf_ieee80211_eht_phy_bits_16_31_triggered_su_beemform_fbck,
61227 {"Triggered SU Beamforming Feedback",
61228 "wlan.eht.phy_capabilities.bits_16_31.triggered_su_beamforming_fbck",
61229 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) }},
61230
61231 {&hf_ieee80211_eht_phy_bits_16_31_triggered_mu_beemform_p_bw_fbck,
61232 {"Triggered MU Beamforming Partial BW Feedback",
61233 "wlan.eht.phy_capabilities.bits_16_31.triggered_mu_beamforming_partial_fbck",
61234 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) }},
61235
61236 {&hf_ieee80211_eht_phy_bits_16_31_triggered_cqi_feedback,
61237 {"Triggered CQI Feedback",
61238 "wlan.eht.phy_capabilities.bits_16_31.triggered_cqi_fbck",
61239 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) }},
61240
61241 {&hf_ieee80211_eht_phy_bits_32_39,
61242 {"EHT PHY Bits 32-39", "wlan.eht.phy_capabilities.bits_32_39",
61243 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61244
61245 {&hf_ieee80211_eht_phy_bits_32_39_partial_bw_dl_mu_mimo,
61246 {"Partial Bandwidth DL MU-MIMO",
61247 "wlan.eht.phy_capabilities.bits_32_39.partial_bw_dl_mu_mimo",
61248 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) }},
61249
61250 {&hf_ieee80211_eht_phy_bits_32_39_eht_psr_based_sr_support,
61251 {"EHT PSR-Based SR support",
61252 "wlan.eht.phy_capabilities.bits_32_39.eht_psr_based_sr_support",
61253 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) }},
61254
61255 {&hf_ieee80211_eht_phy_bits_32_39_power_boost_factor_support,
61256 {"Power Boost Factor Support",
61257 "wlan.eht.phy_capabilities.bits_32_39.power_boost_factor_support",
61258 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) }},
61259
61260 {&hf_ieee80211_eht_phy_bits_32_39_eht_mu_ppdu_w_4x_eht_ltf_08_gi,
61261 {"EHT MU PPDU With 4x EHT-LTF and 0.8 us GI",
61262 "wlan.eht.phy_capabilities.bits_32_39.eht_mu_ppdu_w_4x_eht_ltf_08_us_gi",
61263 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) }},
61264
61265 {&hf_ieee80211_eht_phy_bits_32_39_max_nc,
61266 {"Max Nc", "wlan.eht.phy_capabilities.bits_32_39.max_nc",
61267 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61268
61269 {&hf_ieee80211_eht_phy_bits_40_63,
61270 {"EHT PHY Bits 40-63", "wlan.eht.phy_capabilities.bits_40_63",
61271 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61272
61273 {&hf_ieee80211_eht_phy_bits_40_63_non_triggered_cqi_fbck,
61274 {"Non-Triggered CQI Feedback",
61275 "wlan.eht.phy_capabilities.bits_40_63.non_triggered_cqi_fbck",
61276 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61277 0x000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61278
61279 {&hf_ieee80211_eht_phy_bits_40_63_tx_1024_4096_qam_lt_242_ru_support,
61280 {"Tx 1024-QAM & 4096-QAM < 242-tone RU Support",
61281 "wlan.eht.phy_capabilities.bits_40_63.tx_1024_4096_qam_lt_242_ru_support",
61282 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61283 0x000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61284
61285 {&hf_ieee80211_eht_phy_bits_40_63_rx_1024_4096_qam_lt_242_ru_support,
61286 {"Rx 1024-QAM & 4096-QAM < 242-tone-RU Support",
61287 "wlan.eht.phy_capabilities.bits_40_63.rx_1024_4096_qam_lt_242_ru_support",
61288 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61289 0x000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61290
61291 {&hf_ieee80211_eht_phy_bits_40_63_ppe_thresholds_present,
61292 {"PPE Thresholds Present",
61293 "wlan.eht.phy_capabilities.bits_40_63.ppe_thresholds_present",
61294 FT_BOOLEAN, 24, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
,
61295 0x000008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61296
61297 {&hf_ieee80211_eht_phy_bits_40_63_common_nominal_packet_padding,
61298 {"Common Nominal Packet Padding",
61299 "wlan.eht.phy_capabilities.bits_40_63.common_nominal_packet_padding",
61300 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000030, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61301
61302 {&hf_ieee80211_eht_phy_bits_40_63_max_num_supported_eht_ltfs,
61303 {"Maximum Number Of Supported EHT-LTFs",
61304 "wlan.eht.phy_capabilities.bits_40_63.max_num_supported_eht_ltfs",
61305 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0007c0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61306
61307 {&hf_ieee80211_eht_phy_bits_40_63_support_of_mcx_15,
61308 {"Support Of MCS 15 In MRU",
61309 "wlan.eht.phy_capabilities.bits_40_63.support_of_mcs_15",
61310 FT_UINT24, BASE_DEC, NULL((void*)0), 0x007800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61311
61312 {&hf_ieee80211_eht_phy_bits_40_63_support_of_eht_dup_in_6_ghz,
61313 {"Support Of EHT DUP (MCS 14) in 6 GHz",
61314 "wlan.eht.phy_capabilities.bits_40_63.support_eht_dup_6_ghz",
61315 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61316 0x008000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61317 {&hf_ieee80211_eht_phy_bits_40_63_support_20_mhz_sta_ndp_wide_bw,
61318 {"Support For 20 MHz Operating STA Receiving NDP With Wider BW",
61319 "wlan.eht.phy_capabilities.bits_40_63.support_20_mhz_sta_recv_ndp_wider_bw",
61320 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61321 0x010000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61322
61323 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_le_80_mhz,
61324 {"Non-OFDMA UL MU-MIMO (BW <= 80 MHz)",
61325 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_lt_80_mhz",
61326 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61327 0x020000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61328
61329 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_160_mhz,
61330 {"Non-OFDMA UL MU-MIMO (BW = 160 MHz)",
61331 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_eq_160_mhz",
61332 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61333 0x040000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61334
61335 {&hf_ieee80211_eht_phy_bits_40_63_non_ofdma_ul_mu_bw_eq_320_mhz,
61336 {"Non-OFDMA UL MU-MIMO (BW = 320 MHz)",
61337 "wlan.eht.phy_capabilities.bits_40_63.non_ofdma_ul_mu_mimo_bw_eq_320_mhz",
61338 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61339 0x080000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61340
61341 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_le_80_mhz,
61342 {"MU Beamformer (BW <= 80 MHz)",
61343 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_le_80_mhz",
61344 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61345 0x100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61346
61347 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_160_mhz,
61348 {"MU Beamformer (BW = 160 MHz)",
61349 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_eq_160_mhz",
61350 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61351 0x200000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61352
61353 {&hf_ieee80211_eht_phy_bits_40_63_mu_beamformer_bw_eq_320_mhz,
61354 {"MU Beamformer (BW = 320 MHz)",
61355 "wlan.eht.phy_capabilities.bits_40_63.mu_beamformer_bw_eq_320_mhz",
61356 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61357 0x400000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61358
61359 {&hf_ieee80211_eht_phy_bits_40_63_tb_sounding_feedback_rate_limit,
61360 {"TB Sounding Feedback Rate Limit",
61361 "wlan.eht.phy_capabilities.bits_40_63.tb_sounding_fbck_rate_limit",
61362 FT_BOOLEAN, 24, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61363 0x800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61364
61365 {&hf_ieee80211_eht_phy_bits_64_71,
61366 {"EHT PHY Bits 64-71", "wlan.eht.phy_capabilities.bits_64_71",
61367 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61368
61369 {&hf_ieee80211_eht_phy_bits_64_71_rx_1024_qam_wid_bw_dl_ofdma_sup,
61370 {"Rx 1024-QAM In Wider Bandwidth DL OFDMA Support",
61371 "wlan.eht.phy_capabilities.bits_64_71.rx_1024_qam_in_wider_bw_dl_ofdma",
61372 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61373 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61374
61375 {&hf_ieee80211_eht_phy_bits_64_71_rx_4096_qam_wid_bw_dl_ofdma_sup,
61376 {"Rx 4096-QAM In Wider Bandwidth DL OFDMA Support",
61377 "wlan.eht.phy_capabilities.bits_64_71.rx_4096_qam_in_wider_bw_dl_ofdma",
61378 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61379 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61380
61381 {&hf_ieee80211_eht_phy_bits_64_71_20m_limit_capa_support,
61382 {"20 MHz-Only Limited Capabilities Support",
61383 "wlan.eht.phy_capabilities.bits_64_71.20m_only_limited_capabilities",
61384 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61385 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61386
61387 {&hf_ieee80211_eht_phy_bits_64_71_20m_mu_beam_feedback_dl_mu_mimo,
61388 {"20 MHz-Only Triggered MU Beamforming Full BW Feedback And DL MU-MIMO",
61389 "wlan.eht.phy_capabilities.bits_64_71.20m_only_trig_mu_beamforming_dl_mu_mimo",
61390 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61391 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61392
61393 {&hf_ieee80211_eht_phy_bits_64_71_20m_mru_support,
61394 {"20 MHz-Only MRU Support",
61395 "wlan.eht.phy_capabilities.bits_64_71.20m_only_mru_support",
61396 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
,
61397 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61398
61399 {&hf_ieee80211_eht_phy_bits_64_71_reserved,
61400 {"Reserved", "wlan.eht.phy_capabilities.bits_64_71.reserved",
61401 FT_UINT8, BASE_HEX, NULL((void*)0), 0xE0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61402
61403 {&hf_ieee80211_eht_mcs_and_nss_non_ap,
61404 {"EHT-MCS Map (20 MHz-Only Non-AP STA)",
61405 "wlan.eht.supported_eht_mcs_bss_set.20_mhz_only_non_sta",
61406 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61407
61408 {&hf_ieee80211_eht_rx_max_nss_20mhz_0_7,
61409 {"RX Max NSS That Supports EHT-MCS 0-7",
61410 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_0_7",
61411 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61412
61413 {&hf_ieee80211_eht_tx_max_nss_20mhz_0_7,
61414 {"TX Max NSS That Supports EHT-MCS 0-7",
61415 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_0_7",
61416 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61417
61418 {&hf_ieee80211_eht_rx_max_nss_20mhz_8_9,
61419 {"RX Max NSS That Supports EHT-MCS 8-9",
61420 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_8_9",
61421 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61422
61423 {&hf_ieee80211_eht_tx_max_nss_20mhz_8_9,
61424 {"TX Max NSS That Supports EHT-MCS 8-9",
61425 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_8_9",
61426 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61427
61428 {&hf_ieee80211_eht_rx_max_nss_20mhz_10_11,
61429 {"RX Max NSS That Supports EHT-MCS 10-11",
61430 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_10_11",
61431 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61432
61433 {&hf_ieee80211_eht_tx_max_nss_20mhz_10_11,
61434 {"TX Max NSS That Supports EHT-MCS 10-11",
61435 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_10_11",
61436 FT_UINT32, BASE_HEX, NULL((void*)0), 0x00F00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61437
61438 {&hf_ieee80211_eht_rx_max_nss_20mhz_12_13,
61439 {"RX Max NSS That Supports EHT-MCS 12-13",
61440 "wlan.eht.supported_eht_mcs_bss_non_sta.rx_max_nss_supports_eht_mcs_12_13",
61441 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0F000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61442
61443 {&hf_ieee80211_eht_tx_max_nss_20mhz_12_13,
61444 {"TX Max NSS That Supports EHT-MCS 12-13",
61445 "wlan.eht.supported_eht_mcs_bss_non_sta.tx_max_nss_supports_eht_mcs_12_13",
61446 FT_UINT32, BASE_HEX, NULL((void*)0), 0xF0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61447
61448 {&hf_ieee80211_eht_mcs_and_nss_le_80mhz,
61449 {"EHT-MCS Map (BW <= 80MHz)",
61450 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_le_80_mhz",
61451 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61452
61453 {&hf_ieee80211_eht_le_80_rx_max_nss_0_9,
61454 {"Rx Max Nss That Supports EHT-MCS 0-9",
61455 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_0_9",
61456 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61457
61458 {&hf_ieee80211_eht_le_80_tx_max_nss_0_9,
61459 {"Tx Max Nss That Supports EHT-MCS 0-9",
61460 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_0_9",
61461 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61462
61463 {&hf_ieee80211_eht_le_80_rx_max_nss_10_11,
61464 {"Rx Max Nss That Supports EHT-MCS 10-11",
61465 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_10_11",
61466 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61467
61468 {&hf_ieee80211_eht_le_80_tx_max_nss_10_11,
61469 {"Tx Max Nss That Supports EHT-MCS 10-11",
61470 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_10_11",
61471 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61472
61473 {&hf_ieee80211_eht_le_80_rx_max_nss_12_13,
61474 {"Rx Max Nss That Supports EHT-MCS 12-13",
61475 "wlan.eht.supported_eht_mcs_bss_set.le_80.rx_max_nss_supports_eht_mcs_12_13",
61476 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61477
61478 {&hf_ieee80211_eht_le_80_tx_max_nss_12_13,
61479 {"Tx Max Nss That Supports EHT-MCS 12-13",
61480 "wlan.eht.supported_eht_mcs_bss_set.le_80.tx_max_nss_supports_eht_mcs_12_13",
61481 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61482
61483 {&hf_ieee80211_eht_mcs_and_nss_eq_160mhz,
61484 {"EHT-MCS Map (BW = 160MHz)",
61485 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_eq_160_mhz",
61486 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61487
61488 {&hf_ieee80211_eht_160_rx_max_nss_0_9,
61489 {"Rx Max Nss That Supports EHT-MCS 0-9",
61490 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_0_9",
61491 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61492
61493 {&hf_ieee80211_eht_160_tx_max_nss_0_9,
61494 {"Tx Max Nss That Supports EHT-MCS 0-9",
61495 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_0_9",
61496 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61497
61498 {&hf_ieee80211_eht_160_rx_max_nss_10_11,
61499 {"Rx Max Nss That Supports EHT-MCS 10-11",
61500 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_10_11",
61501 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61502
61503 {&hf_ieee80211_eht_160_tx_max_nss_10_11,
61504 {"Tx Max Nss That Supports EHT-MCS 10-11",
61505 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_10_11",
61506 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61507
61508 {&hf_ieee80211_eht_160_rx_max_nss_12_13,
61509 {"Rx Max Nss That Supports EHT-MCS 12-13",
61510 "wlan.eht.supported_eht_mcs_bss_set.160.rx_max_nss_supports_eht_mcs_12_13",
61511 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61512
61513 {&hf_ieee80211_eht_160_tx_max_nss_12_13,
61514 {"Tx Max Nss That Supports EHT-MCS 12-13",
61515 "wlan.eht.supported_eht_mcs_bss_set.160.tx_max_nss_supports_eht_mcs_12_13",
61516 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61517
61518 {&hf_ieee80211_eht_mcs_and_nss_eq_320mhz,
61519 {"EHT-MCS Map (BW = 320MHz)",
61520 "wlan.eht.supported_eht_mcs_bss_set.eht_mcs_map_bw_eq_320_mhz",
61521 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61522
61523 {&hf_ieee80211_eht_320_rx_max_nss_0_9,
61524 {"Rx Max Nss That Supports EHT-MCS 0-9",
61525 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_0_9",
61526 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61527
61528 {&hf_ieee80211_eht_320_tx_max_nss_0_9,
61529 {"Tx Max Nss That Supports EHT-MCS 0-9",
61530 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_0_9",
61531 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61532
61533 {&hf_ieee80211_eht_320_rx_max_nss_10_11,
61534 {"Rx Max Nss That Supports EHT-MCS 10-11",
61535 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_10_11",
61536 FT_UINT24, BASE_DEC, NULL((void*)0), 0x000F00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61537
61538 {&hf_ieee80211_eht_320_tx_max_nss_10_11,
61539 {"Tx Max Nss That Supports EHT-MCS 10-11",
61540 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_10_11",
61541 FT_UINT24, BASE_DEC, NULL((void*)0), 0x00F000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61542
61543 {&hf_ieee80211_eht_320_rx_max_nss_12_13,
61544 {"Rx Max Nss That Supports EHT-MCS 12-13",
61545 "wlan.eht.supported_eht_mcs_bss_set.320.rx_max_nss_supports_eht_mcs_12_13",
61546 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0F0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61547
61548 {&hf_ieee80211_eht_320_tx_max_nss_12_13,
61549 {"Tx Max Nss That Supports EHT-MCS 12-13",
61550 "wlan.eht.supported_eht_mcs_bss_set.320.tx_max_nss_supports_eht_mcs_12_13",
61551 FT_UINT24, BASE_DEC, NULL((void*)0), 0xF00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61552
61553 {&hf_ieee80211_eht_supported_mcs_nss_bytes,
61554 {"Supported EHT-MCS and NSS Set bytes",
61555 "wlan.eht.supported_eht_mcs_nss_set.bytes",
61556 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61557
61558 {&hf_ieee80211_eht_ppe_thresholds,
61559 {"EHT PPE Thresholds", "wlan.eht.ppe_thresholds",
61560 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61561
61562 {&hf_ieee80211_eht_ttl_mapping_control,
61563 {"TID-To-Link Mapping Control",
61564 "wlan.eht.tid_to_link_mapping.control",
61565 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61566
61567 {&hf_ieee80211_eht_ttl_mapping_direction,
61568 {"Direction", "wlan.eht.tid_to_link_mapping.control.direction",
61569 FT_UINT8, BASE_HEX, VALS(tid_to_link_mapping_dirn_vals)((0 ? (const struct _value_string*)0 : ((tid_to_link_mapping_dirn_vals
))))
, 0x03,
61570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61571
61572 {&hf_ieee80211_eht_ttl_default_link_mapping,
61573 {"Default Link Mapping",
61574 "wlan.eht.tid_to_link_mapping.control.default_link_mapping",
61575 FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61576
61577 {&hf_ieee80211_eht_ttl_mapping_switch_time_pres,
61578 {"Mapping Switch Time Present",
61579 "wlan.eht.tid_to_link_mapping.control.mapping_switch_time",
61580 FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61581
61582 {&hf_ieee80211_eht_ttl_expected_dura_pres,
61583 {"Expected Duration Present",
61584 "wlan.eht.tid_to_link_mapping.control.expected_duration",
61585 FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61586
61587 {&hf_ieee80211_eht_ttl_link_mapping_size,
61588 {"Link Mapping Size",
61589 "wlan.eht.tid_to_link_mapping.control.link_mapping_size",
61590 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) }},
61591
61592 {&hf_ieee80211_eht_ttl_mapping_reserved,
61593 {"Reserved", "wlan.eht.tid_to_link_mapping.control.reserved",
61594 FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61595
61596 {&hf_ieee80211_eht_ttl_mapping_presence,
61597 {"Link Mapping Presence Bitmap",
61598 "wlan.eht.tid_to_link_mapping.control.link_mapping_presence_indicator",
61599 FT_UINT8, BASE_HEX, NULL((void*)0), 0x00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61600
61601 {&hf_ieee80211_eht_ttl_mapping_switch_time,
61602 {"Mapping Switch Time", "wlan.eht.tid_to_link_mapping.switch_time",
61603 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61604
61605 {&hf_ieee80211_eht_ttl_mapping_expected_duration,
61606 {"Expected Duration", "wlan.eht.tid_to_link_mapping.expected_duration",
61607 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61608
61609 {&hf_ieee80211_eht_ttl_mapping_tid_0_link_mapping,
61610 {"Link Mapping Of TID 0", "wlan.eht.tid_to_link_mapping.tid_0.link_mapping",
61611 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61612
61613 {&hf_ieee80211_eht_ttl_mapping_tid_1_link_mapping,
61614 {"Link Mapping Of TID 1", "wlan.eht.tid_to_link_mapping.tid_1.link_mapping",
61615 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61616
61617 {&hf_ieee80211_eht_ttl_mapping_tid_2_link_mapping,
61618 {"Link Mapping Of TID 2", "wlan.eht.tid_to_link_mapping.tid_2.link_mapping",
61619 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61620
61621 {&hf_ieee80211_eht_ttl_mapping_tid_3_link_mapping,
61622 {"Link Mapping Of TID 3", "wlan.eht.tid_to_link_mapping.tid_3.link_mapping",
61623 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61624
61625 {&hf_ieee80211_eht_ttl_mapping_tid_4_link_mapping,
61626 {"Link Mapping Of TID 4", "wlan.eht.tid_to_link_mapping.tid_4.link_mapping",
61627 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61628
61629 {&hf_ieee80211_eht_ttl_mapping_tid_5_link_mapping,
61630 {"Link Mapping Of TID 5", "wlan.eht.tid_to_link_mapping.tid_5.link_mapping",
61631 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61632
61633 {&hf_ieee80211_eht_ttl_mapping_tid_6_link_mapping,
61634 {"Link Mapping Of TID 6", "wlan.eht.tid_to_link_mapping.tid_6.link_mapping",
61635 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61636
61637 {&hf_ieee80211_eht_ttl_mapping_tid_7_link_mapping,
61638 {"Link Mapping Of TID 7", "wlan.eht.tid_to_link_mapping.tid_7.link_mapping",
61639 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61640
61641 {&hf_ieee80211_eht_multi_link_traffic_control,
61642 {"Multi-Link Traffic Indication Control",
61643 "wlan.eht.multi_link_traffic.traffic_control",
61644 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61645
61646 {&hf_ieee80211_eht_multi_link_tc_bitmap_size,
61647 {"Bitmap Size", "wlan.eht.multi_link_traffic.traffic_control.bitmap_size",
61648 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) }},
61649
61650 {&hf_ieee80211_eht_multi_link_tc_aid_offset,
61651 {"AID Offset", "wlan.eht.multi_link_traffic.traffic_control.aid_offset",
61652 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7FF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61653
61654 {&hf_ieee80211_eht_multi_link_tc_reserved,
61655 {"Reserved", "wlan.eht.multi_link_traffic.traffic_control.reserved",
61656 FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61657
61658 {&hf_ieee80211_eht_multi_link_traffic_indication,
61659 {"Per-Link Traffic Indication List",
61660 "wlan.eht.multi_link_traffic.traffic_indication_list",
61661 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61662
61663 {&hf_ieee80211_eht_qos_chars_dirn,
61664 {"Direction", "wlan.eht.qos_characteristics.control.direction",
61665 FT_UINT32, BASE_HEX, VALS(qos_chars_dirn_vals)((0 ? (const struct _value_string*)0 : ((qos_chars_dirn_vals)
)))
,
61666 0x00000003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61667
61668 {&hf_ieee80211_eht_qos_chars_tid,
61669 {"TID", "wlan.eht.qos_characteristics.control.tid",
61670 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000003C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61671
61672 {&hf_ieee80211_eht_qos_chars_user_prio,
61673 {"User Priority", "wlan.eht.qos_characteristics.control.user_priority",
61674 FT_UINT32, BASE_HEX, NULL((void*)0), 0x000001C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61675
61676 {&hf_ieee80211_eht_qos_chars_bitmap,
61677 {"Presence Bitmap of Additional Parameters",
61678 "wlan.eht.qos_characteristics.control.presence_bitmap",
61679 FT_UINT32, BASE_HEX, NULL((void*)0), 0x01FFFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61680
61681 {&hf_ieee80211_eht_qos_chars_linkid,
61682 {"LinkID", "wlan.eht.qos_characteristics.control.linkid",
61683 FT_UINT32, BASE_HEX, NULL((void*)0), 0x1E000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61684
61685 {&hf_ieee80211_eht_qos_chars_resrvd,
61686 {"Reserved", "wlan.eht.qos_characteristics.control.reserved",
61687 FT_UINT32, BASE_HEX, NULL((void*)0), 0xE0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61688
61689 {&hf_ieee80211_eht_qos_chars_min_svc_interval,
61690 {"Minimum Service Interval",
61691 "wlan.eht.qos_characteristics.minimum_service_interval",
61692 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61693
61694 {&hf_ieee80211_eht_qos_chars_max_svc_interval,
61695 {"Maximum Service Interval",
61696 "wlan.eht.qos_characteristics.maximum_service_interval",
61697 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61698
61699 {&hf_ieee80211_eht_qos_chars_min_data_rate,
61700 {"Minimum Data Rate",
61701 "wlan.eht.qos_characteristics.minimal_data_rate",
61702 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61703
61704 {&hf_ieee80211_eht_qos_chars_delay_bound,
61705 {"Delay Bound",
61706 "wlan.eht.qos_characteristics.delay_bound",
61707 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61708
61709 {&hf_ieee80211_eht_qos_chars_max_msdu_size,
61710 {"Maximum MSDU Size", "wlan.eht.qos_characteristics.max_msdu_size",
61711 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61712
61713 {&hf_ieee80211_eht_qos_chars_service_start_time,
61714 {"Service Start Time", "wlan.eht.qos_characteristics.service_start_time",
61715 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61716
61717 {&hf_ieee80211_eht_qos_chars_service_start_time_linkid,
61718 {"Service Start Time LinkID", "wlan.eht.qos_characteristics.service_start_time_linkid",
61719 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61720
61721 {&hf_ieee80211_eht_qos_chars_mean_data_rate,
61722 {"Mean Data Rate", "wlan.eht.qos_characteristics.mean_data_rate",
61723 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61724
61725 {&hf_ieee80211_eht_qos_chars_burst_size,
61726 {"Delay Bounded Burst Size", "wlan.eht.qos_characteristics.burst_size",
61727 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61728
61729 {&hf_ieee80211_eht_qos_chars_msdu_lifetime,
61730 {"MSDU Lifetime", "wlan.eht.qos_characteristics.msdu_lifetime",
61731 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61732
61733 {&hf_ieee80211_eht_qos_chars_msdu_delivery_ratio,
61734 {"MSDU Delivery Ratio", "wlan.eht.qos_characteristics.msdu_delivery_ratio",
61735 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61736
61737 {&hf_ieee80211_eht_qos_chars_msdu_count_exponent,
61738 {"MSDU Count Exponent", "wlan.eht.qos_characteristics.msdu_count_exponent",
61739 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61740
61741 {&hf_ieee80211_eht_qos_chars_medium_time,
61742 {"Medium Time", "wlan.eht.qos_characteristics.medium_time",
61743 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61744
61745 {&hf_ieee80211_eht_link_id_bitmap,
61746 {"Link ID Bitmap", "wlan.eht.link_id_bitmap",
61747 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61748
61749 {&hf_ieee80211_eht_aid_bitmap_length,
61750 {"Partial AID Bitmap Length", "wlan.eht.aid_bitmap.length",
61751 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61752
61753 {&hf_ieee80211_eht_aid_bitmap_control,
61754 {"Bitmap Control", "wlan.eht.aid_bitmap.control",
61755 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61756
61757 {&hf_ieee80211_eht_aid_bitmap_control_offset,
61758 {"Bitmap Offset", "wlan.eht.aid_bitmap.control.offset",
61759 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfe, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61760
61761 {&hf_ieee80211_eht_aid_bitmap_control_reserved,
61762 {"Reserved", "wlan.eht.aid_bitmap.control.reserved",
61763 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61764
61765 {&hf_ieee80211_eht_aid_bitmap_partial_aid_bitmap,
61766 {"Partial AID Bitmap", "wlan.eht.aid_bitmap.partial_aid_bitmap",
61767 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61768
61769 {&hf_ieee80211_eht_aid_bitmap_aid,
61770 {"Association ID", "wlan.eht.aid_bitmap.aid",
61771 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61772
61773 {&hf_ieee80211_eht_bw_indi_param,
61774 {"Bandwidth Indication Parameters", "wlan.eht.bw_indication_params",
61775 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61776
61777 {&hf_ieee80211_eht_bw_indi_param_reserved,
61778 {"Reserved", "wlan.eht.bw_indication_params.reserved",
61779 FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61780
61781 {&hf_ieee80211_eht_bw_indi_param_disabled_subchan_bitmap,
61782 {"Disabled Subchannel Bitmap Present", "wlan.eht.bw_indication_params.disabled_subchan_bitmap",
61783 FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61784
61785 {&hf_ieee80211_eht_bw_indi_param_reserved1,
61786 {"Reserved", "wlan.eht.bw_indication_params.reserved1",
61787 FT_UINT8, BASE_HEX, NULL((void*)0), 0xfc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61788
61789 {&hf_ieee80211_eht_bw_indi_diabled_bitmap,
61790 {"Disabled Subchannel Bitmap",
61791 "wlan.eht.bw_indication.disabled_subchannel_bitmap",
61792 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61793
61794 {&hf_ieee80211_eht_mimo_ctrl_field,
61795 {"EHT MIMO Control", "wlan.eht.mimo.control",
61796 FT_UINT40, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61797
61798 {&hf_ieee80211_eht_mimo_ctrl_nc_index,
61799 {"Nc Index", "wlan.eht.mimo.control.nc_index",
61800 FT_UINT40, BASE_DEC, NULL((void*)0), 0x000000000F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61801
61802 {&hf_ieee80211_eht_mimo_ctrl_nr_index,
61803 {"Nr Index", "wlan.eht.mimo.control.nr_index",
61804 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000000F0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61805
61806 {&hf_ieee80211_eht_mimo_ctrl_bw,
61807 {"BW", "wlan.eht.mimo.control.bw",
61808 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_mimo_bw_vals)((0 ? (const struct _val64_string*)0 : ((eht_mimo_bw_vals)))),
61809 0x0000000700, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61810
61811 {&hf_ieee80211_eht_mimo_ctrl_grouping,
61812 {"Grouping", "wlan.eht.mimo.control.grouping",
61813 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_mimo_grouping_vals)((0 ? (const struct _val64_string*)0 : ((eht_mimo_grouping_vals
))))
,
61814 0x0000000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61815
61816 {&hf_ieee80211_eht_mimo_ctrl_feedback_type,
61817 {"Feedback Type", "wlan.eht.mimo.control.feedback_type",
61818 FT_UINT40, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(eht_feedback_type_vals)((0 ? (const struct _val64_string*)0 : ((eht_feedback_type_vals
))))
,
61819 0x0000003000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61820
61821 {&hf_ieee80211_eht_mimo_ctrl_reserved1,
61822 {"Reserved", "wlan.eht.mimo.control.reserved1",
61823 FT_UINT40, BASE_HEX, NULL((void*)0), 0x000001C000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61824
61825 {&hf_ieee80211_eht_mimo_ctrl_remaining_feedback_segments,
61826 {"Remaining Feedback Segments",
61827 "wlan.eht.mimo.control.remaining_feedback_segments",
61828 FT_UINT40, BASE_DEC, NULL((void*)0), 0x00000E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61829
61830 {&hf_ieee80211_eht_mimo_ctrl_first_feedback_segment,
61831 {"First Feedback Segment", "wlan.eht.mimo.control.first_feedback_segment",
61832 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0000100000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61833
61834 {&hf_ieee80211_eht_mimo_ctrl_partial_bw_info,
61835 {"Partial BW Info", "wlan.eht.mimo.control.partial_bw_info",
61836 FT_UINT40, BASE_HEX, NULL((void*)0), 0x003FE00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61837
61838 {&hf_ieee80211_eht_mimo_ctrl_sounding_dialog_token_number,
61839 {"Sounding Dialog Token Number",
61840 "wlan.eht.mimo.control.sounding_dialog_token_number",
61841 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0FC0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61842
61843 {&hf_ieee80211_eht_mimo_ctrl_codebook_info,
61844 {"Codebook Information", "wlan.eht.mimo.control.codebook_info",
61845 FT_UINT40, BASE_DEC, NULL((void*)0), 0x1000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61846
61847 {&hf_ieee80211_eht_mimo_ctrl_reserved2,
61848 {"Reserved", "wlan.eht.mimo.control.reserved2",
61849 FT_UINT40, BASE_HEX, NULL((void*)0), 0xE000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61850
61851 {&hf_ieee80211_eht_compressed_beamforming_report_snr,
61852 {"AgvSNR", "wlan.eht.mimo.beamforming_report.avgsnr",
61853 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61854
61855 {&hf_ieee80211_eht_compressed_beamform_scidx,
61856 {"SCIDX", "wlan.eht.mimo.beamforming_report.scidx",
61857 FT_STRING, BASE_NONE, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61858
61859 {&hf_ieee80211_eht_mu_exclusive_beamforming_report_delta_snr,
61860 {"Delta SNR", "wlan.eht.mu.exclusive_beamforming_report.delta_snr",
61861 FT_INT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61862
61863 {&hf_ieee80211_eht_group_key_data_length,
61864 {"Key Data Length", "wlan.eht.group_key_data.length",
61865 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61866
61867 {&hf_ieee80211_eht_reconfig_link_id_info,
61868 {"Link ID Info", "wlan.eht.reconfig.link_id_info",
61869 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61870
61871 {&hf_ieee80211_eht_reconfig_link_id,
61872 {"Link ID", "wlan.eht.reconfig.link_id_info.link_id",
61873 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61874
61875 {&hf_ieee80211_eht_reconfig_link_id_reserved,
61876 {"Reserved", "wlan.eht.reconfig.link_id_info.reserved",
61877 FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61878
61879 {&hf_ieee80211_eht_reconfig_status_code,
61880 {"Status code", "wlan.eht.reconfig.status_code",
61881 FT_UINT16, BASE_HEX|BASE_EXT_STRING0x00000200, &ieee80211_status_code_ext, 0,
61882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61883
61884 {&hf_ieee80211_wfa_rsn_selection,
61885 {"RSNE Variant", "wlan.wfa_rsn_selection.variant",
61886 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) }},
61887
61888 {&hf_ieee80211_wfa_rsn_or_link_kde_link_id,
61889 {"Link ID", "wlan.wfa_rsn_or_link_kde.link_id",
61890 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61891
61892 {&hf_ieee80211_nonap_sta_regulatory_conn,
61893 {"Regulatory Connectivity", "wlan.nonap_sta_regulatory_connect",
61894 FT_UINT8, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61895
61896 {&hf_ieee80211_nonap_sta_regu_conn_indoor_ap_valid,
61897 {"Connectivity With Indoor AP Valid", "wlan.nonap_sta_regulatory_connect.indoor_ap_valid",
61898 FT_UINT8, BASE_HEX, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61899
61900 {&hf_ieee80211_nonap_sta_regu_conn_indoor_ap,
61901 {"Connectivity With Indoor AP", "wlan.nonap_sta_regulatory_connect.indoor_ap",
61902 FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61903
61904 {&hf_ieee80211_nonap_sta_regu_conn_sp_ap_valid,
61905 {"Connectivity With SP AP Valid", "wlan.nonap_sta_regulatory_connect.sp_ap_valid",
61906 FT_UINT8, BASE_HEX, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61907
61908 {&hf_ieee80211_nonap_sta_regu_conn_sp_ap,
61909 {"Connectivity With SP AP", "wlan.nonap_sta_regulatory_connect.sp_ap",
61910 FT_UINT8, BASE_HEX, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61911
61912 {&hf_ieee80211_nonap_sta_regu_conn_reserved,
61913 {"Reserved", "wlan.nonap_sta_regulatory_connect.reserved",
61914 FT_UINT8, BASE_HEX, NULL((void*)0), 0xf0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61915
61916 {&hf_ieee80211_tag_channel_usage_mode,
61917 {"Usage Mode", "wlan.channel_usage.mode",
61918 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61919 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) }},
61920
61921 {&hf_ieee80211_ff_count,
61922 {"Count", "wlan.fixed.count",
61923 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61924
61925 {&hf_ieee80211_tag_dms_id,
61926 {"DMS ID", "wlan.dms.id",
61927 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61928
61929 {&hf_ieee80211_tag_dms_length,
61930 {"DMS Length", "wlan.dms.length",
61931 FT_UINT8, BASE_DEC, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61932
61933 {&hf_ieee80211_tag_dms_req_type,
61934 {"Request Type", "wlan.dms.request_type",
61935 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61936 RVALS(dms_req_type)((0 ? (const struct _range_string*)0 : ((dms_req_type)))), 0,
61937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61938
61939 {&hf_ieee80211_tag_dms_resp_type,
61940 {"Response Type", "wlan.dms.response_type",
61941 FT_UINT8, BASE_DEC|BASE_RANGE_STRING0x00000100,
61942 RVALS(dms_resp_type)((0 ? (const struct _range_string*)0 : ((dms_resp_type)))), 0,
61943 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61944
61945 {&hf_ieee80211_tag_dms_last_seq_control,
61946 {"Last Sequence Control", "wlan.dms.last_sequence_control",
61947 FT_UINT16, BASE_HEX, NULL((void*)0), 0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61948 };
61949
61950 static hf_register_info aggregate_fields[] = {
61951 {&hf_ieee80211_amsdu_subframe,
61952 {"A-MSDU Subframe", "wlan_aggregate.a_msdu.subframe",
61953 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
61954 "Aggregate MAC Service Data Unit (MSDU) Subframe", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61955
61956 {&hf_ieee80211_amsdu_length,
61957 {"A-MSDU Length", "wlan_aggregate.a_msdu.length",
61958 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
61959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61960
61961 {&hf_ieee80211_amsdu_padding,
61962 {"A-MSDU Padding", "wlan_aggregate.a_msdu.padding",
61963 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
61964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
61965 };
61966
61967 static uat_field_t wep_uat_flds[] = {
61968
61969 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)}
61970 "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)}
,
61971 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>[:<AP-MLD-MAC>:<STA-MLD-MAC>]\n"
"msk:<hexadecimal key>\n",((void*)0)}
61972 "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>[:<AP-MLD-MAC>:<STA-MLD-MAC>]\n"
"msk:<hexadecimal key>\n",((void*)0)}
61973 "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>[:<AP-MLD-MAC>:<STA-MLD-MAC>]\n"
"msk:<hexadecimal key>\n",((void*)0)}
61974 "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>[:<AP-MLD-MAC>:<STA-MLD-MAC>]\n"
"msk:<hexadecimal key>\n",((void*)0)}
61975 "tk:<hexadecimal key>[:<AP-MLD-MAC>:<STA-MLD-MAC>]\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>[:<AP-MLD-MAC>:<STA-MLD-MAC>]\n"
"msk:<hexadecimal key>\n",((void*)0)}
61976 "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>[:<AP-MLD-MAC>:<STA-MLD-MAC>]\n"
"msk:<hexadecimal key>\n",((void*)0)}
,
61977 UAT_END_FIELDS{((void*)0),((void*)0),PT_TXTMOD_NONE,{0,0,0},{0,0,0},0,0,((void
*)0)}
61978 };
61979
61980 static int *ett[] = {
61981 &ett_80211,
61982 &ett_proto_flags,
61983 &ett_cap_tree,
61984 &ett_fc_tree,
61985 &ett_cntrl_wrapper_fc,
61986 &ett_cntrl_wrapper_payload,
61987 &ett_fragments,
61988 &ett_fragment,
61989 &ett_block_ack,
61990 &ett_block_ack_tid,
61991 &ett_block_ack_request_control,
61992 &ett_block_ack_bitmap,
61993 &ett_block_ack_request_multi_sta_aid_tid,
61994 &ett_multi_sta_block_ack,
61995 &ett_ath_cap_tree,
61996 &ett_extreme_mesh_services_tree,
61997 &ett_addr,
61998
61999 &ett_80211_mgt,
62000 &ett_fixed_parameters,
62001 &ett_tagged_parameters,
62002 &ett_tag_bmapctl_tree,
62003 &ett_s1g_pvb_tree,
62004 &ett_s1g_pvb_eb_tree,
62005 &ett_s1g_pvb_block_control_byte,
62006 &ett_s1g_pvb_block_bitmap_tree,
62007 &ett_s1g_pvb_subblock_tree,
62008 &ett_s1g_pvb_olb_tree,
62009 &ett_s1g_pvb_ade_control,
62010 &ett_s1g_pvb_ade_tree,
62011 &ett_s1g_pvb_olb_subblock,
62012 &ett_tag_country_fnm_tree,
62013 &ett_tag_country_rcc_tree,
62014 &ett_qos_parameters,
62015 &ett_qos_ps_buf_state,
62016 &ett_wep_parameters,
62017 &ett_msh_control,
62018 &ett_hwmp_targ_flags_tree,
62019 &ett_mesh_chswitch_flag_tree,
62020 &ett_mesh_config_cap_tree,
62021 &ett_mesh_formation_info_tree,
62022 &ett_bcn_timing_rctrl_tree,
62023 &ett_bcn_timing_info_tree,
62024 &ett_gann_flags_tree,
62025 &ett_pxu_proxy_info_tree,
62026 &ett_pxu_proxy_info_flags_tree,
62027
62028 &ett_rsn_gcs_tree,
62029 &ett_rsn_pcs_tree,
62030 &ett_rsn_sub_pcs_tree,
62031 &ett_rsn_akms_tree,
62032 &ett_rsn_sub_akms_tree,
62033 &ett_rsn_cap_tree,
62034 &ett_rsn_pmkid_tree,
62035 &ett_rsn_gmcs_tree,
62036
62037 &ett_kde_mlo_link_info,
62038
62039 &ett_wpa_mcs_tree,
62040 &ett_wpa_ucs_tree,
62041 &ett_wpa_sub_ucs_tree,
62042 &ett_wpa_akms_tree,
62043 &ett_wpa_sub_akms_tree,
62044 &ett_wme_ac,
62045 &ett_wme_aci_aifsn,
62046 &ett_wme_ecw,
62047 &ett_wme_qos_info,
62048
62049 &ett_update_edca_info,
62050
62051 &ett_ht_cap_tree,
62052 &ett_ampduparam_tree,
62053 &ett_mcsset_tree,
62054 &ett_mcsbit_tree,
62055 &ett_htex_cap_tree,
62056 &ett_txbf_tree,
62057 &ett_antsel_tree,
62058 &ett_hta_cap_tree,
62059 &ett_hta_cap1_tree,
62060 &ett_hta_cap2_tree,
62061
62062 &ett_s1g_ndp,
62063 &ett_s1g_ndp_ack,
62064 &ett_s1g_ndp_cts,
62065 &ett_s1g_ndp_cf_end,
62066 &ett_s1g_ndp_ps_poll,
62067 &ett_s1g_ndp_ps_poll_ack,
62068 &ett_s1g_ndp_block_ack,
62069 &ett_s1g_ndp_beamforming_report_poll,
62070 &ett_s1g_ndp_paging,
62071 &ett_s1g_ndp_probe,
62072 &ett_pv1_sid,
62073 &ett_pv1_sid_field,
62074 &ett_pv1_seq_control,
62075 &ett_ieee80211_s1g_capabilities_info,
62076 &ett_ieee80211_s1g_capabilities,
62077 &ett_s1g_cap_byte1,
62078 &ett_s1g_cap_byte2,
62079 &ett_s1g_cap_byte3,
62080 &ett_s1g_cap_byte4,
62081 &ett_s1g_cap_byte5,
62082 &ett_s1g_cap_byte6,
62083 &ett_s1g_cap_byte7,
62084 &ett_s1g_cap_byte8,
62085 &ett_s1g_cap_byte9,
62086 &ett_s1g_cap_byte10,
62087 &ett_ieee80211_s1g_sup_mcs_and_nss_set,
62088 &ett_s1g_mcs_and_mcs_set,
62089 &ett_s1g_operation_info,
62090 &ett_s1g_channel_width,
62091 &ett_s1g_subchannel_selective_transmission,
62092 &ett_s1g_raw_assignment,
62093 &ett_s1g_raw_assn_tree,
62094 &ett_s1g_raw_control,
62095 &ett_s1g_raw_slot_def,
62096 &ett_s1g_raw_group_subfield,
62097 &ett_s1g_raw_channel_indication,
62098 &ett_s1g_page_slice_control,
62099 &ett_s1g_aid_request_mode,
62100 &ett_s1g_aid_characteristic,
62101 &ett_s1g_sector_operation,
62102 &ett_tack_info,
62103 &ett_ieee80211_s1g_auth_control,
62104 &ett_s1g_relay_control,
62105 &ett_s1g_relay_function,
62106 &ett_ieee80211_s1g_addr_list,
62107 &ett_ieee80211_s1g_reach_addr,
62108 &ett_s1g_relay_discovery_control,
62109 &ett_ieee80211_s1g_aid_entry,
62110 &ett_s1g_probe_resp_subfield_0,
62111 &ett_s1g_header_comp_control,
62112 &ett_pv1_mgmt_action,
62113 &ett_pv1_mgmt_action_no_ack,
62114 &ett_pv1_cntl_stack,
62115 &ett_pv1_cntl_bat,
62116
62117 &ett_htc_tree,
62118 &ett_htc_he_a_control,
62119 &ett_mfb_subtree,
62120 &ett_lac_subtree,
62121 &ett_ieee80211_a_control_padding,
62122 &ett_ieee80211_a_control_ones,
62123 &ett_ieee80211_triggered_response_schedule,
62124 &ett_ieee80211_control_om,
62125 &ett_ieee80211_hla_control,
62126 &ett_ieee80211_buffer_status_report,
62127 &ett_ieee80211_control_uph,
62128 &ett_ieee80211_buffer_control_bqr,
62129 &ett_ieee80211_control_cci,
62130 &ett_ieee80211_control_eht_om,
62131 &ett_ieee80211_control_srs,
62132 &ett_ieee80211_control_aar,
62133
62134 &ett_vht_cap_tree,
62135 &ett_vht_mcsset_tree,
62136 &ett_vht_rx_mcsbit_tree,
62137 &ett_vht_tx_mcsbit_tree,
62138 &ett_vht_basic_mcsbit_tree,
62139 &ett_vht_op_tree,
62140 &ett_vht_tpe_info_tree,
62141 &ett_tpe_psd,
62142
62143 &ett_vht_ranging_annc,
62144
62145 &ett_ff_he_action,
62146 &ett_ff_protected_he_action,
62147 &ett_ff_protected_eht_action,
62148 &ett_ff_he_mimo_control,
62149 &ett_ff_he_mimo_beamforming_report_snr,
62150 &ett_ff_he_mimo_feedback_matrices,
62151
62152 &ett_ff_vhtmimo_cntrl,
62153 &ett_ff_vhtmimo_beamforming_report,
62154 &ett_ff_vhtmimo_beamforming_report_snr,
62155 &ett_ff_vhtmimo_beamforming_angle,
62156 &ett_ff_vhtmimo_beamforming_report_feedback_matrices,
62157 &ett_ff_vhtmu_exclusive_beamforming_report_matrices,
62158
62159 &ett_vht_grpidmgmt,
62160 &ett_vht_msa,
62161 &ett_vht_upa,
62162
62163 &ett_ht_operation_info_delimiter1_tree,
62164 &ett_ht_operation_info_delimiter2_tree,
62165 &ett_ht_operation_info_delimiter3_tree,
62166
62167 &ett_ff_ftm_param_delim1,
62168 &ett_ff_ftm_param_delim2,
62169 &ett_ff_ftm_param_delim3,
62170 &ett_ff_ftm_tod_err1,
62171 &ett_ff_ftm_toa_err1,
62172 &ett_tag_ranging,
62173 &ett_tag_ranging_ntb,
62174 &ett_tag_ranging_secure_he_ltf,
62175
62176 &ett_ranging_subelement_tree,
62177
62178 &ett_tag_direct_meas_results,
62179
62180 &ett_rsta_avail_header,
62181 &ett_rsta_avail_tree,
62182 &ett_rsta_avail_subfield,
62183
62184 &ett_pasn_parameters,
62185 &ett_pasn_comeback_tree,
62186 &ett_pasn_auth_frame,
62187
62188 /* 802.11be tree */
62189 &ett_eht_multi_link_control,
62190 &ett_eht_multi_link_common_info,
62191 &ett_eht_multi_link_common_info_link_id,
62192 &ett_eht_multi_link_common_info_medium_sync,
62193 &ett_eht_multi_link_common_info_eml_capa,
62194 &ett_eht_multi_link_common_info_mld_capa,
62195 &ett_eht_multi_link_common_info_ext_mld_capa,
62196 &ett_eht_multi_link_per_sta,
62197 &ett_eht_multi_link_subelt,
62198 &ett_eht_multi_link_sta_control,
62199 &ett_eht_multi_link_per_sta_info,
62200 &ett_eht_multi_link_sta_dtim,
62201 &ett_eht_multi_link_reconf_oper_param,
62202 &ett_eht_multi_link_reconfig_presence_indi,
62203 &ett_eht_multi_link_reconfig_operation_para_info,
62204 &ett_eht_operation_params,
62205 &ett_eht_operation_control,
62206 &ett_eht_mac_capa,
62207 &ett_eht_phy_capa,
62208 &ett_eht_phy_bits_0_15,
62209 &ett_eht_phy_bits_16_31,
62210 &ett_eht_phy_bits_32_39,
62211 &ett_eht_phy_bits_40_63,
62212 &ett_eht_phy_bits_64_71,
62213 &ett_eht_phy_mcs_nss,
62214 &ett_eht_phy_mcs_nss_set,
62215 &ett_eht_ttl_mapping,
62216 &ett_eht_ttl_mapping_link_mapping,
62217 &ett_eht_eht_multi_link_tc,
62218 &ett_eht_qos_characteristics,
62219 &ett_eht_aid_bmapctl_tree,
62220 &ett_eht_bw_indication_param,
62221 &ett_eht_eml_control,
62222 &ett_eht_eml_control_link_map,
62223 &ett_eht_eml_control_mcs_map_count,
62224 &ett_eht_emlsr_para_update,
62225 &ett_eht_mimo_ctrl,
62226 &ett_eht_beamforming_rpt_ru_index,
62227 &ett_eht_beamforming_feedback_tree,
62228 &ett_ff_eht_mimo_beamforming_report_snr,
62229 &ett_ff_eht_mimo_mu_exclusive_report,
62230 &ett_eht_mu_exclusive_beamforming_rpt_ru_index,
62231 &ett_eht_reconfig_status_list,
62232 &ett_eht_group_key_data,
62233
62234 &ett_tag_measure_request_mode_tree,
62235 &ett_tag_measure_request_type_tree,
62236 &ett_tag_measure_request_sub_element_tree,
62237 &ett_tag_measure_report_mode_tree,
62238 &ett_tag_measure_report_type_tree,
62239 &ett_tag_measure_report_basic_map_tree,
62240 &ett_tag_measure_report_rpi_tree,
62241 &ett_tag_measure_report_frame_tree,
62242 &ett_tag_measure_report_sub_element_tree,
62243 &ett_tag_measure_reported_frame_tree,
62244 &ett_tag_measure_reported_frame_frag_id_tree,
62245 &ett_tag_measure_reported_lci_z_tree,
62246 &ett_tag_measure_reported_lci_urp_tree,
62247 &ett_tag_bss_bitmask_tree,
62248 &ett_tag_dfs_map_tree,
62249 &ett_tag_dfs_map_flags_tree,
62250 &ett_tag_erp_info_tree,
62251 &ett_tag_ex_cap1,
62252 &ett_tag_ex_cap2,
62253 &ett_tag_ex_cap3,
62254 &ett_tag_ex_cap4,
62255 &ett_tag_ex_cap5,
62256 &ett_tag_ex_cap6,
62257 &ett_tag_ex_cap7,
62258 &ett_tag_ex_cap8,
62259 &ett_tag_ex_cap89,
62260 &ett_tag_ex_cap10,
62261 &ett_tag_ex_cap11,
62262 &ett_tag_ex_cap12,
62263 &ett_tag_ex_cap13,
62264 &ett_tag_ex_cap14,
62265
62266 &ett_tag_rm_cap1,
62267 &ett_tag_rm_cap2,
62268 &ett_tag_rm_cap3,
62269 &ett_tag_rm_cap4,
62270 &ett_tag_rm_cap5,
62271
62272 &ett_tag_rsnx_octet1,
62273 &ett_tag_rsnx_octet2,
62274 &ett_tag_rsnx_octet3,
62275 &ett_tag_rsnx_octet4,
62276
62277 &ett_tag_multiple_bssid_subelem_tree,
62278
62279 &ett_tag_20_40_bc,
62280
62281 &ett_tag_intolerant_tree,
62282
62283 &ett_tag_tclas_mask_tree,
62284
62285 &ett_tag_supported_channels,
62286
62287 &ett_tag_neighbor_report_bssid_info_tree,
62288 &ett_tag_neighbor_report_bssid_info_capability_tree,
62289 &ett_tag_neighbor_report_subelement_tree,
62290 &ett_tag_neighbor_report_sub_tag_tree,
62291
62292 &ett_tag_wapi_param_set_akm_tree,
62293 &ett_tag_wapi_param_set_ucast_tree,
62294 &ett_tag_wapi_param_set_mcast_tree,
62295 &ett_tag_wapi_param_set_preauth_tree,
62296
62297 &ett_max_idle_period_options,
62298
62299 &ett_tag_time_adv_tree,
62300
62301 &ett_tag_he_6ghz_cap_inf_tree,
62302
62303 &ett_ff_ba_param_tree,
62304 &ett_ff_ba_ssc_tree,
62305 &ett_ff_delba_param_tree,
62306 &ett_ff_qos_info,
62307 &ett_ff_psmp_param_set,
62308 &ett_ff_mimo_cntrl,
62309 &ett_ff_ant_sel,
62310 &ett_mimo_report,
62311 &ett_ff_sm_pwr_save,
62312 &ett_ff_chan_switch_announce,
62313 &ett_ff_ht_info,
62314 &ett_ff_psmp_sta_info,
62315
62316 &ett_tpc,
62317
62318 &ett_msdu_aggregation_parent_tree,
62319 &ett_msdu_aggregation_subframe_tree,
62320
62321 &ett_80211_mgt_ie,
62322 &ett_tsinfo_tree,
62323 &ett_sched_tree,
62324
62325 &ett_fcs,
62326
62327 &ett_hs20_osu_providers_list,
62328 &ett_hs20_osu_provider_tree,
62329 &ett_hs20_friendly_names_list,
62330 &ett_hs20_friendly_name_tree,
62331 &ett_hs20_osu_provider_method_list,
62332 &ett_osu_icons_avail_list,
62333 &ett_hs20_osu_icon_tree,
62334 &ett_hs20_osu_service_desc_list,
62335 &ett_hs20_osu_service_desc_tree,
62336 &ett_hs20_venue_url,
62337 &ett_hs20_advice_of_charge,
62338 &ett_hs20_aoc_plan,
62339
62340 &ett_hs20_ofn_tree,
62341
62342 &ett_adv_proto,
62343 &ett_adv_proto_tuple,
62344 &ett_gas_query,
62345 &ett_gas_anqp,
62346 &ett_nai_realm,
62347 &ett_nai_realm_eap,
62348 &ett_tag_ric_data_desc_ie,
62349 &ett_anqp_vendor_capab,
62350
62351 &ett_osen_group_data_cipher_suite,
62352 &ett_osen_pairwise_cipher_suites,
62353 &ett_osen_pairwise_cipher_suite,
62354 &ett_osen_akm_cipher_suites,
62355 &ett_osen_akm_cipher_suite,
62356 &ett_osen_rsn_cap_tree,
62357 &ett_osen_pmkid_list,
62358 &ett_osen_pmkid_tree,
62359 &ett_osen_group_management_cipher_suite,
62360
62361 &ett_hs20_cc_proto_port_tuple,
62362
62363 &ett_tag_no_bssid_capability_dmg_bss_control_tree,
62364 &ett_ssid_list,
62365
62366 &ett_sgdsn,
62367 &ett_nintendo,
62368
62369 &ett_routerboard,
62370
62371 &ett_meru,
62372
62373 &ett_wisun_gtkl,
62374 &ett_wisun_lgtkl,
62375
62376 &ett_qos_map_set_exception,
62377 &ett_qos_map_set_range,
62378
62379 &ett_wnm_notif_subelt,
62380
62381 &ett_tag_mobility_domain_ft_capab_tree,
62382
62383 &ett_tag_ft_mic_control_tree,
62384 &ett_tag_ft_subelem_tree,
62385
62386 /* 802.11ad trees */
62387 &ett_dynamic_alloc_tree,
62388 &ett_ssw_tree,
62389 &ett_bf_tree,
62390 &ett_sswf_tree,
62391 &ett_brp_tree,
62392 &ett_blm_tree,
62393 &ett_bic_tree,
62394 &ett_dmg_params_tree,
62395 &ett_cc_tree,
62396 &ett_rcsi_tree,
62397 &ett_80211_ext,
62398 &ett_allocation_tree,
62399 &ett_sta_info,
62400
62401 &ett_ieee80211_esp,
62402 &ett_ieee80211_wfa_60g_attr,
62403 &ett_ieee80211_wfa_transition_disable_tree,
62404 &ett_gas_resp_fragment,
62405 &ett_gas_resp_fragments,
62406
62407 &ett_mbo_oce_attr,
62408 &ett_mbo_ap_cap,
62409 &ett_oce_cap,
62410 &ett_oce_metrics_cap,
62411
62412 /* 802.11 ah trees */
62413 &ett_s1g_sync_control_tree,
62414 &ett_s1g_twt_information_control,
62415 &ett_s1g_sector_id_index,
62416 &ett_twt_tear_down_tree,
62417 &ett_twt_control_field_tree,
62418 &ett_twt_req_type_tree,
62419 &ett_twt_ndp_paging_field_tree,
62420 &ett_twt_broadcast_info_tree,
62421 &ett_twt_traffic_info_tree,
62422 &ett_twt_traffic_info_control_tree,
62423
62424 /* 802.11ax trees */
62425 &ett_he_mac_capabilities,
62426 &ett_he_phy_capabilities,
62427 &ett_he_phy_cap_first_byte,
62428 &ett_he_phy_cap_chan_width_set,
62429 &ett_he_phy_cap_b8_to_b23,
62430 &ett_he_phy_cap_b24_to_b39,
62431 &ett_he_phy_cap_b40_to_b55,
62432 &ett_he_phy_cap_b56_to_b71,
62433 &ett_he_phy_cap_b72_to_b87,
62434 &ett_he_mcs_and_nss_set,
62435 &ett_he_rx_tx_he_mcs_map_lte_80,
62436 &ett_he_rx_mcs_map_lte_80,
62437 &ett_he_tx_mcs_map_lte_80,
62438 &ett_he_rx_tx_he_mcs_map_160,
62439 &ett_he_rx_mcs_map_160,
62440 &ett_he_tx_mcs_map_160,
62441 &ett_he_rx_tx_he_mcs_map_80_80,
62442 &ett_he_rx_mcs_map_80_80,
62443 &ett_he_tx_mcs_map_80_80,
62444 &ett_he_ppe_threshold,
62445 &ett_he_ppe_nss,
62446 &ett_he_ppe_ru_alloc,
62447 &ett_he_operation_params,
62448 &ett_he_bss_color_information,
62449 &ett_he_oper_basic_mcs,
62450 &ett_he_operation_vht_op_info,
62451 &ett_he_operation_6ghz,
62452 &ett_he_operation_6ghz_control,
62453 &ett_he_mu_edca_param,
62454 &ett_he_uora_tree,
62455 &ett_he_aic_aifsn,
62456 &ett_he_spatial_reuse_control,
62457 &ett_he_ess_report_info_field,
62458 &ett_he_bss_new_color_info,
62459 &ett_he_trigger_common_info,
62460 &ett_he_trigger_ranging,
62461 &ett_he_trigger_ranging_poll,
62462 &ett_he_trigger_packet_extension,
62463 &ett_he_trigger_base_common_info,
62464 &ett_he_trigger_bar_ctrl,
62465 &ett_he_trigger_bar_info,
62466 &ett_he_trigger_user_info,
62467 &ett_he_trigger_base_user_info,
62468 &ett_he_trigger_dep_basic_user_info,
62469 &ett_he_trigger_dep_nfrp_user_info,
62470 &ett_ndp_annc,
62471 &ett_ndp_vht_annc_sta_list,
62472 &ett_ndp_vht_annc_sta_info_tree,
62473 &ett_ndp_he_annc_sta_list,
62474 &ett_ndp_he_annc_sta_item,
62475 &ett_ndp_he_annc_sta_info,
62476 &ett_ndp_eht_annc_sta_list,
62477 &ett_ndp_eht_annc_sta_info,
62478 &ett_ndp_ranging_annc_sta_list,
62479 &ett_ndp_ranging_annc_sta_info,
62480 &ett_non_inheritance_element_id_list,
62481 &ett_non_inheritance_element_id_ext_list,
62482 &ett_mscs_user_prio,
62483 &ett_ieee80211_user_prio_bitmap,
62484 &ett_ieee80211_intra_access_prio,
62485
62486 &ett_ieee80211_3gpp_plmn,
62487
62488 /* 802.11ai trees */
62489 &ett_fils_indication_realm_list,
62490 &ett_fils_indication_public_key_list,
62491
62492 &ett_neighbor_ap_info,
62493 &ett_tbtt_infos,
62494 &ett_rnr_bss_params_tree,
62495 &ett_rnr_mld_params_tree,
62496
62497 &ett_qos_mgmt_dscp_policy_capabilities,
62498 &ett_qos_mgmt_pol_capa,
62499 &ett_qos_mgmt_attributes,
62500 &ett_qos_mgmt_dscp_policy,
62501 &ett_qos_mgmt_tclas,
62502 &ett_qos_mgmt_domain_name,
62503 &ett_qos_mgmt_unknown_attribute,
62504 &ett_dscp_policy_status_list,
62505 &ett_pol_rqst_cont_tree,
62506 &ett_pol_resp_cont_tree,
62507
62508 &ett_ff_fils_discovery_frame_control,
62509 &ett_ff_fils_discovery_capability,
62510
62511 &ett_ff_fils_req_params,
62512 &ett_ff_fils_req_params_fils_criteria,
62513
62514 &ett_nonap_sta_regulatory_conn,
62515
62516 &ett_chan_usage,
62517
62518 &ett_wfa_capa,
62519 &ett_wfa_capa_attributes,
62520 &ett_wfa_capa_supp_gene,
62521 &ett_wfa_capa_cert_gene,
62522
62523 &ett_ieee80211_vs_aruba_ap_health,
62524 };
62525
62526 static ei_register_info ei[] = {
62527 { &ei_ieee80211_bad_length,
62528 { "ieee80211.bad_length", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62529 "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)}}
}},
62530
62531 { &ei_ieee80211_inv_val,
62532 { "ieee80211.invalid_value", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62533 "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)}}
}},
62534
62535 { &ei_ieee80211_tag_number,
62536 { "wlan.tag.number.unexpected_ie", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62537 "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)}}
}},
62538
62539 { &ei_ieee80211_tag_length,
62540 { "wlan.tag.length.bad", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62541 "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)}}
}},
62542
62543 { &ei_ieee80211_extra_data,
62544 { "ieee80211.extra_data", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62545 "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)}}
}},
62546
62547 { &ei_ieee80211_ff_anqp_capability,
62548 { "wlan.fixed.anqp.capability.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62549 "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)}}
}},
62550
62551 { &ei_ieee80211_ff_anqp_venue_length,
62552 { "wlan.fixed.anqp.venue.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62553 "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)}}
}},
62554
62555 { &ei_ieee80211_ff_anqp_roaming_consortium_oi_len,
62556 { "wlan.fixed.anqp.roaming_consortium.oi_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62557 "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)}}
}},
62558
62559 { &ei_ieee80211_ff_anqp_nai_field_len,
62560 { "wlan.fixed.anqp.nai_realm_list.field_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62561 "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)}}
}},
62562
62563 { &ei_ieee80211_ff_anqp_nai_realm_eap_len,
62564 { "wlan.fixed.anqp_nai_realm_list.eap_method_len.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62565 "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)}}
}},
62566
62567 { &ei_hs20_anqp_ofn_length,
62568 { "wlan.hs20.anqp.ofn.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62569 "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)}}
}},
62570
62571 { &ei_hs20_anqp_nai_hrq_length,
62572 { "wlan.hs20.anqp.nai_hrq.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62573 "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)}}
}},
62574
62575 { &ei_ieee80211_ff_anqp_info_length,
62576 { "wlan.fixed.anqp.info_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62577 "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)}}
}},
62578
62579 { &ei_ieee80211_not_enough_room_for_anqp_header,
62580 { "wlan.fixed.query_length_invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62581 "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)}}
}},
62582
62583 { &ei_ieee80211_ff_query_request_length,
62584 { "wlan.fixed.query_request_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62585 "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)}}
}},
62586
62587 { &ei_ieee80211_ff_query_response_length,
62588 { "wlan.fixed.query_response_length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62589 "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)}}
}},
62590
62591 { &ei_ieee80211_tag_wnm_sleep_mode_no_key_data,
62592 { "wlan.wnm_sleep_mode.no_key_data", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62593 "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)}}
}},
62594
62595 { &ei_ieee80211_tdls_setup_response_malformed,
62596 { "wlan.tdls_setup_response_malformed", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62597 "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)}}
}},
62598
62599 { &ei_ieee80211_tdls_setup_confirm_malformed,
62600 { "wlan.tdls_setup_confirm_malformed", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62601 "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)}}
}},
62602
62603 { &ei_ieee80211_wfa_ie_wme_qos_info_bad_ftype,
62604 { "wlan.wfa.ie.wme.qos_info.bad_ftype", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62605 "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)}}
}},
62606
62607 { &ei_ieee80211_qos_info_bad_ftype,
62608 { "wlan.qos_info.bad_ftype", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62609 "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)}}
}},
62610
62611 { &ei_ieee80211_qos_bad_aifsn,
62612 { "wlan.qos_info.bad_aifsn", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62613 "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)}}
}},
62614
62615 { &ei_ieee80211_rsn_pcs_count,
62616 { "wlan.rsn.pcs.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62617 "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)}}
}},
62618
62619 { &ei_ieee80211_rsn_pmkid_count,
62620 { "wlan.rsn.akms.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62621 "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)}}
}},
62622
62623 { &ei_ieee80211_pmkid_count_too_large,
62624 { "wlan.rsn.pmkid.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62625 "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)}}
}},
62626
62627 { &ei_ieee80211_vht_tpe_pwr_info_count,
62628 { "wlan.vht.tpe.pwr_info.count.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62629 "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)}}
}},
62630
62631 { &ei_ieee80211_vht_tpe_pwr_info_unit,
62632 { "wlan.vht.tpe.pwr_info.unit.unknown", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62633 "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)}}
}},
62634
62635 { &ei_ieee80211_missing_data,
62636 { "ieee80211.missing_data", PI_MALFORMED0x07000000, PI_WARN0x00600000,
62637 "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)}}
}},
62638
62639 { &ei_ieee80211_fc_retry,
62640 { "wlan.fc.retry.expert", PI_SEQUENCE0x02000000, PI_NOTE0x00400000,
62641 "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)}}
}},
62642
62643 { &ei_ieee80211_tag_measure_request_unknown,
62644 { "wlan.measure.req.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62645 "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)}}
}},
62646
62647 { &ei_ieee80211_tag_measure_request_beacon_unknown,
62648 { "wlan.measure.req.beacon.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62649 "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)}}
}},
62650
62651 { &ei_ieee80211_tag_measure_report_unknown,
62652 { "wlan.measure.rep.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62653 "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)}}
}},
62654
62655 { &ei_ieee80211_tag_measure_report_beacon_unknown,
62656 { "wlan.measure.rep.beacon.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62657 "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)}}
}},
62658
62659 { &ei_ieee80211_tag_measure_report_lci_unknown,
62660 { "wlan.measure.rep.lci.unknown.expert", PI_UNDECODED0x05000000, PI_WARN0x00600000,
62661 "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)}}
}},
62662
62663 { &ei_ieee80211_tag_data,
62664 { "wlan.tag.data.undecoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000,
62665 "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)}}
}},
62666
62667 { &ei_ieee80211_dmg_subtype,
62668 { "wlan.dmg_subtype.bad", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62669 "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)}}
}},
62670
62671 { &ei_ieee80211_wfa_60g_attr_len_invalid,
62672 { "wlan.60g.attr.length.invalid", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62673 "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)}}
}},
62674
62675 { &ei_ieee80211_vht_action,
62676 { "wlan.vht.action.undecoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000,
62677 "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)}}
}},
62678
62679 { &ei_ieee80211_mesh_peering_unexpected,
62680 { "wlan.peering.unexpected", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62681 "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)}}
}},
62682
62683 { &ei_ieee80211_wfa_60g_unknown_attribute,
62684 { "wlan.attr.unknown", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62685 "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)}}
}},
62686
62687 { &ei_ieee80211_fcs,
62688 { "wlan.fcs.bad_checksum", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
62689 "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)}}
}},
62690
62691 { &ei_ieee80211_mismatched_akm_suite,
62692 { "wlan.rsn.akms.mismatched", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62693 "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)}}
}},
62694
62695 { &ei_ieee80211_vs_routerboard_unexpected_len,
62696 { "wlan.vs.routerboard.unexpected_len", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62697 "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)}}
}},
62698
62699 { &ei_ieee80211_vs_sgdsn_serialnumber_invalid_len_val,
62700 { "wlan.vs.sgdsn.tag.serialnumber.invalid_len_val", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62701 "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)}}
}},
62702
62703 { &ei_ieee80211_vs_sgdsn_serialnumber_unexpected_len_val,
62704 { "wlan.vs.sgdsn.tag.serialnumber.unexpected_len_val", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62705 "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)}}
}},
62706
62707 { &ei_ieee80211_twt_tear_down_bad_neg_type,
62708 { "wlan.twt.tear_down_bad_neg_type", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62709 "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)}}
}},
62710
62711 { &ei_ieee80211_twt_setup_bad_command,
62712 { "wlan.twt.setup_bad_command", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62713 "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)}}
}},
62714
62715 { &ei_ieee80211_twt_bcast_info_no_term,
62716 { "wlan.twt.incorrect_length", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62717 "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)}}
}},
62718
62719 { &ei_ieee80211_invalid_control_word,
62720 { "wlan.htc.he.a_control.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62721 "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)}}
}},
62722
62723 { &ei_ieee80211_invalid_control_id,
62724 { "wlan.htc.he.a_control.ctrl_id.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62725 "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)}}
}},
62726
62727 { &ei_ieee80211_invalid_control_length,
62728 { "wlan.htc.he.a_control.ctrl_length.invalid", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62729 "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)}}
}},
62730
62731 { &ei_ieee80211_htc_in_dmg_packet,
62732 { "wlan.htc_in_dmg_packet", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62733 "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)}}
}},
62734
62735 { &ei_ieee80211_eht_invalid_subelement,
62736 { "wlan.eht.invalid_subelement", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62737 "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)}}
}},
62738
62739 { &ei_ieee80211_eht_invalid_action,
62740 { "wlan.eht.invalid_action", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62741 "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)}}
}},
62742
62743 { &ei_ieee80211_eht_invalid_multi_link,
62744 { "wlan.eht.invalid_multi_link", PI_PROTOCOL0x09000000, PI_ERROR0x00800000,
62745 "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)}}
}},
62746
62747 {&ei_ieee80211_eht_invalid_nc_nr,
62748 { "wlan.eht.invalid_nc_nr", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
62749 "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)}}
}},
62750 };
62751
62752 expert_module_t *expert_ieee80211;
62753
62754 module_t *wlan_module;
62755
62756 memset(&wlan_stats, 0, sizeof wlan_stats);
62757
62758 proto_aggregate = proto_register_protocol("IEEE 802.11 wireless LAN aggregate frame",
62759 "IEEE 802.11 Aggregate Data", "wlan_aggregate");
62760 proto_register_field_array(proto_aggregate, aggregate_fields, array_length(aggregate_fields)(sizeof (aggregate_fields) / sizeof (aggregate_fields)[0]));
62761
62762 proto_wlan = proto_register_protocol("IEEE 802.11 wireless LAN", "IEEE 802.11", "wlan");
62763
62764 heur_subdissector_list = register_heur_dissector_list_with_description("wlan_data", "IEEE 802.11 WLAN v0 data", proto_wlan);
62765
62766 /* Created to remove Decode As confusion */
62767 proto_centrino = proto_register_protocol("IEEE 802.11 wireless LAN (Centrino)", "IEEE 802.11 (Centrino)", "wlan_centrino");
62768 proto_register_field_array(proto_wlan, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
62769 centrino_handle = register_dissector("wlan_centrino", dissect_ieee80211_centrino, proto_centrino );
62770
62771 proto_wlan_ext = proto_register_protocol("IEEE 802.11 wireless LAN extension frame",
62772 "IEEE 802.11 EXT", "wlan_ext");
62773
62774 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
62775
62776 expert_ieee80211 = expert_register_protocol(proto_wlan);
62777 expert_register_field_array(expert_ieee80211, ei, array_length(ei)(sizeof (ei) / sizeof (ei)[0]));
62778
62779 /*
62780 * Create the hash table we will use for holding STA properties that
62781 * track newer protocol variants like S1G, DMG, etc. Use the existing
62782 * retransmit hash and equal functions.
62783 */
62784 sta_prop_hash = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(),
62785 sta_prop_hash_fn, sta_prop_equal_fn);
62786
62787 ieee80211_handle = register_dissector("wlan", dissect_ieee80211, proto_wlan);
62788 register_dissector("wlan_withfcs", dissect_ieee80211_withfcs, proto_wlan);
62789 wlan_withoutfcs_handle = register_dissector("wlan_withoutfcs", dissect_ieee80211_withoutfcs, proto_wlan);
62790 register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
62791 register_dissector("wlan_noqos", dissect_ieee80211_noqos, proto_wlan);
62792
62793 register_capture_dissector("ieee80211", capture_ieee80211, proto_wlan);
62794 register_capture_dissector("ieee80211_datapad", capture_ieee80211_datapad, proto_wlan);
62795
62796 reassembly_table_register(&wlan_reassembly_table,
62797 &addresses_reassembly_table_functions);
62798 register_init_routine(wlan_retransmit_init);
62799 reassembly_table_register(&gas_reassembly_table,
62800 &addresses_reassembly_table_functions);
62801
62802 wlan_tap = register_tap("wlan");
62803 register_conversation_table(proto_wlan, true1, wlan_conversation_packet, wlan_endpoint_packet);
62804
62805 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,
62806 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62807 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,
62808 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62809
62810 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,
62811 ether_len, ether_name_resolution_str, ether_name_resolution_len);
62812
62813 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));
62814
62815 tagged_field_table = register_dissector_table("wlan.tag.number", "IEEE 802.11 Fields", proto_wlan, FT_UINT8, BASE_DEC);
62816 vendor_specific_action_table = register_dissector_table("wlan.action.vendor_specific", "IEEE802.11 Vendor Specific Action", proto_wlan, FT_UINT24, BASE_HEX);
62817 wifi_alliance_action_subtype_table = register_dissector_table("wlan.action.wifi_alliance.subtype", "Wi-Fi Alliance Action Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62818 vendor_specific_anqp_info_table = register_dissector_table("wlan.anqp.vendor_specific", "IEEE802.11 ANQP information Vendor Specific", proto_wlan, FT_UINT24, BASE_HEX);
62819 wifi_alliance_anqp_info_table = register_dissector_table("wlan.anqp.wifi_alliance.subtype", "Wi-Fi Alliance ANQP Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62820 wifi_alliance_ie_table = register_dissector_table("wlan.ie.wifi_alliance.subtype", "Wi-Fi Alliance IE Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62821 wifi_alliance_public_action_table = register_dissector_table("wlan.pa.wifi_alliance.subtype", "Wi-Fi Alliance PA Subtype", proto_wlan, FT_UINT8, BASE_HEX);
62822
62823 /* Register configuration options */
62824 wlan_module = prefs_register_protocol(proto_wlan, init_wepkeys);
62825 prefs_register_bool_preference(wlan_module, "defragment",
62826 "Reassemble fragmented 802.11 datagrams",
62827 "Whether fragmented 802.11 datagrams should be reassembled",
62828 &wlan_defragment);
62829
62830 prefs_register_bool_preference(wlan_module, "ignore_draft_ht",
62831 "Ignore vendor-specific HT elements",
62832 "Don't dissect 802.11n draft HT elements (which might contain duplicate information).",
62833 &wlan_ignore_draft_ht);
62834
62835 prefs_register_bool_preference(wlan_module, "retransmitted",
62836 "Call subdissector for retransmitted 802.11 frames",
62837 "Whether retransmitted 802.11 frames should be subdissected",
62838 &wlan_subdissector);
62839
62840 prefs_register_bool_preference(wlan_module, "check_fcs",
62841 "Assume packets have FCS",
62842 "Some 802.11 cards include the FCS at the end of a packet, others do not.",
62843 &wlan_check_fcs);
62844
62845 prefs_register_bool_preference(wlan_module, "check_checksum",
62846 "Validate the FCS checksum if possible",
62847 "Whether to validate the FCS checksum or not.",
62848 &wlan_check_checksum);
62849
62850 prefs_register_enum_preference(wlan_module, "ignore_wep",
62851 "Ignore the Protection bit",
62852 "Some 802.11 cards leave the Protection bit set even though the packet is decrypted, "
62853 "and some also leave the IV (initialization vector).",
62854 &wlan_ignore_prot, wlan_ignore_prot_options, true1);
62855
62856 prefs_register_bool_preference(wlan_module, "wpa_key_mic_len_enable",
62857 "Enable WPA Key MIC Length override",
62858 "Whether to enable MIC Length override or not.",
62859 &wlan_key_mic_len_enable);
62860
62861 prefs_register_uint_preference(wlan_module, "wpa_key_mic_len",
62862 "WPA Key MIC Length override",
62863 "Some Key MIC lengths are greater than 16 bytes, so set the length you require",
62864 10, &wlan_key_mic_len);
62865
62866 prefs_register_bool_preference(wlan_module, "treat_as_s1g",
62867 "Treat as S1G", "Treat all WiFi packets as S1G",
62868 &treat_as_s1g);
62869
62870 prefs_register_obsolete_preference(wlan_module, "wep_keys");
62871
62872 prefs_register_bool_preference(wlan_module, "enable_decryption",
62873 "Enable decryption", "Enable WEP and WPA/WPA2 decryption",
62874 &enable_decryption);
62875
62876 wep_uat = uat_new("WEP and WPA Decryption Keys",
62877 sizeof(uat_wep_key_record_t), /* record size */
62878 "80211_keys", /* filename */
62879 true1, /* from_profile */
62880 &uat_wep_key_records, /* data_ptr */
62881 &num_wepkeys_uat, /* numitems_ptr */
62882 UAT_AFFECTS_DISSECTION0x00000001, /* affects dissection of packets, but not set of named fields */
62883 "Ch80211Keys", /* help */
62884 uat_wep_key_record_copy_cb, /* copy callback */
62885 uat_wep_key_record_update_cb, /* update callback */
62886 uat_wep_key_record_free_cb, /* free callback */
62887 init_wepkeys, /* post update callback - update the WEP/WPA keys */
62888 NULL((void*)0), /* reset callback */
62889 wep_uat_flds); /* UAT field definitions */
62890
62891 prefs_register_uat_preference(wlan_module,
62892 "wep_key_table",
62893 "Decryption keys",
62894 "WEP and pre-shared WPA keys\n"
62895 "Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
62896 "010203040506070809101111213 (104/128-bit WEP),\n"
62897 "MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
62898 "0102030405...6061626364 (WPA + 256-bit key)."
62899 "Invalid keys will be ignored.",
62900 wep_uat);
62901}
62902
62903void
62904proto_register_wlan_rsna_eapol(void)
62905{
62906
62907 static hf_register_info hf[] = {
62908 {&hf_wlan_rsna_eapol_wpa_keydes_msgnr,
62909 {"Message number", "wlan_rsna_eapol.keydes.msgnr",
62910 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
62911 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62912
62913 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo,
62914 {"Key Information", "wlan_rsna_eapol.keydes.key_info",
62915 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
62916 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62917
62918 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_keydes_version,
62919 {"Key Descriptor Version", "wlan_rsna_eapol.keydes.key_info.keydes_version",
62920 FT_UINT16, BASE_DEC, VALS(keydes_version_vals)((0 ? (const struct _value_string*)0 : ((keydes_version_vals)
)))
, KEY_INFO_KEYDES_VERSION_MASK0x0007,
62921 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62922
62923 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_type,
62924 {"Key Type", "wlan_rsna_eapol.keydes.key_info.key_type",
62925 FT_BOOLEAN, 16, TFS(&keyinfo_key_type_tfs)((0 ? (const struct true_false_string*)0 : ((&keyinfo_key_type_tfs
))))
, KEY_INFO_KEY_TYPE_MASK0x0008,
62926 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62927
62928 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_index,
62929 {"Key Index", "wlan_rsna_eapol.keydes.key_info.key_index",
62930 FT_UINT16, BASE_DEC, NULL((void*)0), KEY_INFO_KEY_INDEX_MASK0x0030,
62931 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62932
62933 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_install,
62934 {"Install", "wlan_rsna_eapol.keydes.key_info.install",
62935 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_INSTALL_MASK0x0040,
62936 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62937
62938 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_ack,
62939 {"Key ACK", "wlan_rsna_eapol.keydes.key_info.key_ack",
62940 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_KEY_ACK_MASK0x0080,
62941 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62942
62943 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_key_mic,
62944 {"Key MIC", "wlan_rsna_eapol.keydes.key_info.key_mic",
62945 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_KEY_MIC_MASK0x0100,
62946 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62947
62948 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_secure,
62949 {"Secure", "wlan_rsna_eapol.keydes.key_info.secure",
62950 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_SECURE_MASK0x0200,
62951 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62952
62953 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_error,
62954 {"Error", "wlan_rsna_eapol.keydes.key_info.error",
62955 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_ERROR_MASK0x0400,
62956 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62957
62958 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_request,
62959 {"Request", "wlan_rsna_eapol.keydes.key_info.request",
62960 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_REQUEST_MASK0x0800,
62961 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62962
62963 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_encrypted_key_data,
62964 {"Encrypted Key Data", "wlan_rsna_eapol.keydes.key_info.encrypted_key_data",
62965 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_ENCRYPTED_KEY_DATA_MASK0x1000,
62966 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62967
62968 {&hf_wlan_rsna_eapol_wpa_keydes_keyinfo_smk_message,
62969 {"SMK Message", "wlan_rsna_eapol.keydes.key_info.smk_message",
62970 FT_BOOLEAN, 16, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, KEY_INFO_SMK_MESSAGE_MASK0x2000,
62971 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62972
62973 {&hf_wlan_rsna_eapol_keydes_key_len,
62974 {"Key Length", "eapol.keydes.key_len",
62975 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
62976 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62977
62978 {&hf_wlan_rsna_eapol_keydes_replay_counter,
62979 {"Replay Counter", "eapol.keydes.replay_counter",
62980 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
62981 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62982
62983 {&hf_wlan_rsna_eapol_keydes_key_iv,
62984 {"Key IV", "eapol.keydes.key_iv",
62985 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62986 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62987
62988 {&hf_wlan_rsna_eapol_wpa_keydes_nonce,
62989 {"WPA Key Nonce", "wlan_rsna_eapol.keydes.nonce",
62990 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62991 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62992
62993 {&hf_wlan_rsna_eapol_wpa_keydes_rsc,
62994 {"WPA Key RSC", "wlan_rsna_eapol.keydes.rsc",
62995 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
62996 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
62997
62998 {&hf_wlan_rsna_eapol_wpa_keydes_id,
62999 {"WPA Key ID", "wlan_rsna_eapol.keydes.id",
63000 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
63001 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
63002
63003 {&hf_wlan_rsna_eapol_wpa_keydes_mic,
63004 {"WPA Key MIC", "wlan_rsna_eapol.keydes.mic",
63005 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
63006 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
63007
63008 {&hf_wlan_rsna_eapol_wpa_keydes_data_len,
63009 {"WPA Key Data Length", "wlan_rsna_eapol.keydes.data_len",
63010 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
63011 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
63012
63013 {&hf_wlan_rsna_eapol_wpa_keydes_data,
63014 {"WPA Key Data", "wlan_rsna_eapol.keydes.data",
63015 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
63016 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
63017
63018 {&hf_wlan_rsna_eapol_wpa_keydes_padding,
63019 {"WPA Key Data Padding", "wlan_rsna_eapol.keydes.padding",
63020 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
63021 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
63022
63023 {&hf_wlan_rsna_eapol_wpa_extraneous,
63024 {"WPA EAPOL Extraneous Data", "wlan_rsna_eapol.extraneous",
63025 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
63026 };
63027
63028 static int *ett[] = {
63029 &ett_keyinfo,
63030 &ett_wlan_rsna_eapol_keydes_data,
63031 };
63032
63033 proto_wlan_rsna_eapol = proto_register_protocol("IEEE 802.11 RSNA EAPOL key",
63034 "802.11 RSNA EAPOL", "wlan_rsna_eapol");
63035 proto_register_field_array(proto_wlan_rsna_eapol, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
63036
63037 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
63038}
63039
63040void
63041proto_reg_handoff_ieee80211(void)
63042{
63043 dissector_handle_t data_encap_handle;
63044 dissector_handle_t wlan_rsna_eapol_wpa_key_handle, wlan_rsna_eapol_rsn_key_handle;
63045 capture_dissector_handle_t ieee80211_cap_handle;
63046
63047 dissector_add_for_decode_as_with_preference("udp.port", ieee80211_handle);
63048 /*
63049 * Get handles for the 802.2 (LPD) LLC, EPD LLC, IPX and Ethernet
63050 * dissectors.
63051 */
63052 llc_handle = find_dissector_add_dependency("llc", proto_wlan);
63053 epd_llc_handle = find_dissector_add_dependency("epd_llc", proto_wlan);
63054 ipx_handle = find_dissector_add_dependency("ipx", proto_wlan);
63055 eth_withoutfcs_handle = find_dissector_add_dependency("eth_withoutfcs", proto_wlan);
63056
63057 proto_eapol = proto_get_id_by_filter_name("eapol");
63058
63059 /*
63060 * Get the Ethertype dissector table.
63061 */
63062 ethertype_subdissector_table = find_dissector_table("ethertype");
63063
63064 llc_cap_handle = find_capture_dissector("llc");
63065 ipx_cap_handle = find_capture_dissector("ipx");
63066
63067 dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_1120, ieee80211_handle);
63068
63069 dissector_add_uint("ethertype", ETHERTYPE_CENTRINO_PROMISC0x2452, centrino_handle);
63070
63071 ieee80211_cap_handle = find_capture_dissector("ieee80211");
63072 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_1120, ieee80211_cap_handle);
63073 capture_dissector_add_uint("wtap_encap", WTAP_ENCAP_IEEE_802_11_WITH_RADIO22, ieee80211_cap_handle);
63074 capture_dissector_add_uint("ppi", 105 /* DLT_DLT_IEEE802_11 */, ieee80211_cap_handle);
63075
63076 /* Register handoff to Aruba GRE */
63077 dissector_add_uint("gre.proto", GRE_ARUBA_82000x8200, wlan_withoutfcs_handle);
63078 dissector_add_uint("gre.proto", GRE_ARUBA_82100x8210, wlan_withoutfcs_handle);
63079 dissector_add_uint("gre.proto", GRE_ARUBA_82200x8220, wlan_withoutfcs_handle);
63080 dissector_add_uint("gre.proto", GRE_ARUBA_82300x8230, wlan_withoutfcs_handle);
63081 dissector_add_uint("gre.proto", GRE_ARUBA_82400x8240, wlan_withoutfcs_handle);
63082 dissector_add_uint("gre.proto", GRE_ARUBA_82500x8250, wlan_withoutfcs_handle);
63083 dissector_add_uint("gre.proto", GRE_ARUBA_82600x8260, wlan_withoutfcs_handle);
63084 dissector_add_uint("gre.proto", GRE_ARUBA_82700x8270, wlan_withoutfcs_handle);
63085 dissector_add_uint("gre.proto", GRE_ARUBA_82800x8280, wlan_withoutfcs_handle);
63086 dissector_add_uint("gre.proto", GRE_ARUBA_82900x8290, wlan_withoutfcs_handle);
63087 dissector_add_uint("gre.proto", GRE_ARUBA_82A00x82A0, wlan_withoutfcs_handle);
63088 dissector_add_uint("gre.proto", GRE_ARUBA_82B00x82B0, wlan_withoutfcs_handle);
63089 dissector_add_uint("gre.proto", GRE_ARUBA_82C00x82C0, wlan_withoutfcs_handle);
63090 dissector_add_uint("gre.proto", GRE_ARUBA_82D00x82D0, wlan_withoutfcs_handle);
63091 dissector_add_uint("gre.proto", GRE_ARUBA_82E00x82E0, wlan_withoutfcs_handle);
63092 dissector_add_uint("gre.proto", GRE_ARUBA_82F00x82F0, wlan_withoutfcs_handle);
63093 dissector_add_uint("gre.proto", GRE_ARUBA_83000x8300, wlan_withoutfcs_handle);
63094 dissector_add_uint("gre.proto", GRE_ARUBA_83100x8310, wlan_withoutfcs_handle);
63095 dissector_add_uint("gre.proto", GRE_ARUBA_83200x8320, wlan_withoutfcs_handle);
63096 dissector_add_uint("gre.proto", GRE_ARUBA_83300x8330, wlan_withoutfcs_handle);
63097 dissector_add_uint("gre.proto", GRE_ARUBA_83400x8340, wlan_withoutfcs_handle);
63098 dissector_add_uint("gre.proto", GRE_ARUBA_83500x8350, wlan_withoutfcs_handle);
63099 dissector_add_uint("gre.proto", GRE_ARUBA_83600x8360, wlan_withoutfcs_handle);
63100 dissector_add_uint("gre.proto", GRE_ARUBA_83700x8370, wlan_withoutfcs_handle);
63101 dissector_add_uint("gre.proto", GRE_ARUBA_91000x9100, wlan_withoutfcs_handle);
63102 dissector_add_uint("gre.proto", GRE_ARUBA_91100x9110, wlan_withoutfcs_handle);
63103 dissector_add_uint("gre.proto", GRE_ARUBA_91200x9120, wlan_withoutfcs_handle);
63104 dissector_add_uint("gre.proto", GRE_ARUBA_91300x9130, wlan_withoutfcs_handle);
63105 dissector_add_uint("gre.proto", GRE_ARUBA_91400x9140, wlan_withoutfcs_handle);
63106 dissector_add_uint("gre.proto", GRE_ARUBA_91500x9150, wlan_withoutfcs_handle);
63107 dissector_add_uint("gre.proto", GRE_ARUBA_91600x9160, wlan_withoutfcs_handle);
63108 dissector_add_uint("gre.proto", GRE_ARUBA_91700x9170, wlan_withoutfcs_handle);
63109 dissector_add_uint("gre.proto", GRE_ARUBA_91800x9180, wlan_withoutfcs_handle);
63110 dissector_add_uint("gre.proto", GRE_ARUBA_91900x9190, wlan_withoutfcs_handle);
63111 dissector_add_uint("gre.proto", GRE_ARUBA_91A00x91A0, wlan_withoutfcs_handle);
63112 dissector_add_uint("gre.proto", GRE_ARUBA_91B00x91B0, wlan_withoutfcs_handle);
63113 dissector_add_uint("gre.proto", GRE_ARUBA_91C00x91C0, wlan_withoutfcs_handle);
63114 dissector_add_uint("gre.proto", GRE_ARUBA_91D00x91D0, wlan_withoutfcs_handle);
63115 dissector_add_uint("gre.proto", GRE_ARUBA_91E00x91E0, wlan_withoutfcs_handle);
63116 dissector_add_uint("gre.proto", GRE_ARUBA_91F00x91F0, wlan_withoutfcs_handle);
63117
63118 data_encap_handle = create_dissector_handle(dissect_data_encap, proto_wlan);
63119 dissector_add_uint("ethertype", ETHERTYPE_IEEE80211_DATA_ENCAP0x890d,
63120 data_encap_handle);
63121
63122 /*
63123 * EAPOL key descriptor types.
63124 */
63125 wlan_rsna_eapol_wpa_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
63126 proto_wlan_rsna_eapol);
63127 dissector_add_uint("eapol.keydes.type", EAPOL_WPA_KEY254, wlan_rsna_eapol_wpa_key_handle);
63128 wlan_rsna_eapol_rsn_key_handle = create_dissector_handle(dissect_wlan_rsna_eapol_wpa_or_rsn_key,
63129 proto_wlan_rsna_eapol);
63130 dissector_add_uint("eapol.keydes.type", EAPOL_RSN_KEY2, wlan_rsna_eapol_rsn_key_handle);
63131
63132 dissector_add_uint("sflow_245.header_protocol", SFLOW_5_HEADER_80211_MAC15, wlan_withoutfcs_handle);
63133
63134 /* Tagged fields */
63135 /* XXX - for now, do it without pinos so the protocol is -1 */
63136 dissector_add_uint("wlan.tag.number", TAG_SSID0, create_dissector_handle(ieee80211_tag_ssid, -1));
63137 dissector_add_uint("wlan.tag.number", TAG_SUPP_RATES1, create_dissector_handle(ieee80211_tag_supp_rates, -1));
63138 dissector_add_uint("wlan.tag.number", TAG_FH_PARAMETER2, create_dissector_handle(ieee80211_tag_fh_parameter, -1));
63139 dissector_add_uint("wlan.tag.number", TAG_DS_PARAMETER3, create_dissector_handle(ieee80211_tag_ds_parameter, -1));
63140 dissector_add_uint("wlan.tag.number", TAG_CF_PARAMETER4, create_dissector_handle(ieee80211_tag_cf_parameter, -1));
63141 dissector_add_uint("wlan.tag.number", TAG_TIM5, create_dissector_handle(ieee80211_tag_tim, -1));
63142 dissector_add_uint("wlan.tag.number", TAG_IBSS_PARAMETER6, create_dissector_handle(ieee80211_tag_ibss_parameter, -1));
63143 dissector_add_uint("wlan.tag.number", TAG_COUNTRY_INFO7, create_dissector_handle(ieee80211_tag_country_info, -1));
63144 dissector_add_uint("wlan.tag.number", TAG_FH_HOPPING_PARAMETER8, create_dissector_handle(ieee80211_tag_fh_hopping_parameter, -1));
63145 dissector_add_uint("wlan.tag.number", TAG_FH_HOPPING_TABLE9, create_dissector_handle(ieee80211_tag_fh_hopping_table, -1));
63146 dissector_add_uint("wlan.tag.number", TAG_REQUEST10, create_dissector_handle(ieee80211_tag_request, -1));
63147 dissector_add_uint("wlan.tag.number", TAG_QBSS_LOAD11, create_dissector_handle(ieee80211_tag_qbss_load, -1));
63148 dissector_add_uint("wlan.tag.number", TAG_EDCA_PARAM_SET12, create_dissector_handle(ieee80211_tag_edca_param_set, -1));
63149 dissector_add_uint("wlan.tag.number", TAG_TSPEC13, create_dissector_handle(ieee80211_tag_tspec, -1));
63150 dissector_add_uint("wlan.tag.number", TAG_TCLAS14, create_dissector_handle(ieee80211_tag_tclas, -1));
63151 dissector_add_uint("wlan.tag.number", TAG_SCHEDULE15, create_dissector_handle(ieee80211_tag_schedule, -1));
63152 dissector_add_uint("wlan.tag.number", TAG_CHALLENGE_TEXT16, create_dissector_handle(ieee80211_tag_challenge_text, -1));
63153 dissector_add_uint("wlan.tag.number", TAG_POWER_CONSTRAINT32, create_dissector_handle(ieee80211_tag_power_constraint, -1));
63154 dissector_add_uint("wlan.tag.number", TAG_POWER_CAPABILITY33, create_dissector_handle(ieee80211_tag_power_capability, -1));
63155 dissector_add_uint("wlan.tag.number", TAG_TPC_REQUEST34, create_dissector_handle(ieee80211_tag_tpc_request, -1));
63156 dissector_add_uint("wlan.tag.number", TAG_TPC_REPORT35, create_dissector_handle(ieee80211_tag_tpc_report, -1));
63157 dissector_add_uint("wlan.tag.number", TAG_SUPPORTED_CHANNELS36, create_dissector_handle(ieee80211_tag_supported_channels, -1));
63158 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_ANN37, create_dissector_handle(ieee80211_tag_switch_ann, -1));
63159 dissector_add_uint("wlan.tag.number", TAG_MEASURE_REQ38, create_dissector_handle(ieee80211_tag_measure_req, -1));
63160 dissector_add_uint("wlan.tag.number", TAG_MEASURE_REP39, create_dissector_handle(ieee80211_tag_measure_rep, -1));
63161 dissector_add_uint("wlan.tag.number", TAG_QUIET40, create_dissector_handle(ieee80211_tag_quiet, -1));
63162 dissector_add_uint("wlan.tag.number", TAG_IBSS_DFS41, create_dissector_handle(ieee80211_tag_ibss_dfs, -1));
63163 dissector_add_uint("wlan.tag.number", TAG_ERP_INFO42, create_dissector_handle(ieee80211_tag_erp_info, -1));
63164 dissector_add_uint("wlan.tag.number", TAG_ERP_INFO_OLD47, create_dissector_handle(ieee80211_tag_erp_info, -1));
63165 dissector_add_uint("wlan.tag.number", TAG_TS_DELAY43, create_dissector_handle(ieee80211_tag_ts_delay, -1));
63166 dissector_add_uint("wlan.tag.number", TAG_TCLAS_PROCESS44, create_dissector_handle(ieee80211_tag_tclas_process, -1));
63167 dissector_add_uint("wlan.tag.number", TAG_QOS_CAPABILITY46, create_dissector_handle(ieee80211_tag_qos_capability, -1));
63168 dissector_add_uint("wlan.tag.number", TAG_RSN_IE48, create_dissector_handle(ieee80211_tag_rsn_ie, -1));
63169 dissector_add_uint("wlan.tag.number", TAG_EXT_SUPP_RATES50, create_dissector_handle(ieee80211_tag_ext_supp_rates, -1));
63170 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_CAPABILITIES127, create_dissector_handle(dissect_extended_capabilities_ie, -1));
63171 dissector_add_uint("wlan.tag.number", TAG_CISCO_CCX1_CKIP133, create_dissector_handle(ieee80211_tag_cisco_ccx1_ckip, -1));
63172 dissector_add_uint("wlan.tag.number", TAG_VHT_CAPABILITY191, create_dissector_handle(dissect_vht_capability_ie, -1));
63173 dissector_add_uint("wlan.tag.number", TAG_VHT_OPERATION192, create_dissector_handle(dissect_vht_operation_ie, -1));
63174 dissector_add_uint("wlan.tag.number", TAG_EXT_BSS_LOAD193, create_dissector_handle(dissect_ext_bss_load, -1));
63175 dissector_add_uint("wlan.tag.number", TAG_WIDE_BW_CHANNEL_SWITCH194, create_dissector_handle(dissect_wide_bw_channel_switch, -1));
63176 dissector_add_uint("wlan.tag.number", TAG_TX_PWR_ENVELOPE195, create_dissector_handle(dissect_vht_tx_pwr_envelope, -1));
63177 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_WRAPPER196, create_dissector_handle(dissect_channel_switch_wrapper, -1));
63178 dissector_add_uint("wlan.tag.number", TAG_OPERATING_MODE_NOTIFICATION199, create_dissector_handle(dissect_operating_mode_notification, -1));
63179 dissector_add_uint("wlan.tag.number", TAG_REDUCED_NEIGHBOR_REPORT201, create_dissector_handle(dissect_reduced_neighbor_report, -1));
63180 dissector_add_uint("wlan.tag.number", TAG_FINE_TIME_MEASUREMENT_PARAM206, create_dissector_handle(dissect_ftm_params, -1));
63181 dissector_add_uint("wlan.tag.number", TAG_S1G_CAPABILITIES217, create_dissector_handle(dissect_s1g_capabilities, -1));
63182 dissector_add_uint("wlan.tag.number", TAG_SUBCHANNEL_SELECTIVE_TRANSMISSION220, create_dissector_handle(dissect_subchannel_selective_transmission, -1));
63183 dissector_add_uint("wlan.tag.number", TAG_S1G_OPEN_LOOP_LINK_MARGIN_INDEX207, create_dissector_handle(dissect_s1g_open_loop_link_margin_index, -1));
63184 dissector_add_uint("wlan.tag.number", TAG_RPS208, create_dissector_handle(dissect_rps, -1));
63185 dissector_add_uint("wlan.tag.number", TAG_PAGE_SLICE209, create_dissector_handle(dissect_page_slice, -1));
63186 dissector_add_uint("wlan.tag.number", TAG_AID_REQUEST210, create_dissector_handle(dissect_aid_request, -1));
63187 dissector_add_uint("wlan.tag.number", TAG_AID_RESPONSE211, create_dissector_handle(dissect_aid_response, -1));
63188 dissector_add_uint("wlan.tag.number", TAG_S1G_SECTOR_OPERATION212, create_dissector_handle(dissect_s1g_sector_operation, -1));
63189 dissector_add_uint("wlan.tag.number", TAG_S1G_BEACON_COMPATIBILITY213, create_dissector_handle(dissect_s1g_beacon_compatibility, -1));
63190 dissector_add_uint("wlan.tag.number", TAG_SHORT_BEACON_INTERVAL214, create_dissector_handle(dissect_s1g_short_beacon_interval, -1));
63191 dissector_add_uint("wlan.tag.number", TAG_CHANGE_SEQUENCE215, create_dissector_handle(dissect_s1g_change_sequence, -1));
63192 /* 7.3.2.26 Vendor Specific information element (221) */
63193 dissector_add_uint("wlan.tag.number", TAG_VENDOR_SPECIFIC_IE221, create_dissector_handle(ieee80211_tag_vendor_specific_ie, -1));
63194 dissector_add_uint("wlan.tag.number", TAG_AUTHENTICATION_CONTROL222, create_dissector_handle(dissect_authentication_control, -1));
63195 dissector_add_uint("wlan.tag.number", TAG_TSF_TIMER_ACCURACY223, create_dissector_handle(dissect_tsf_timer_accuracy, -1));
63196 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY224, create_dissector_handle(dissect_s1g_relay, -1));
63197 dissector_add_uint("wlan.tag.number", TAG_REACHABLE_ADDRESS225, create_dissector_handle(dissect_reachable_address, -1));
63198 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY_DISCOVERY226, create_dissector_handle(dissect_s1g_relay_discovery, -1));
63199 dissector_add_uint("wlan.tag.number", TAG_S1G_RELAY_ACTIVATION236, create_dissector_handle(dissect_s1g_relay_activation, -1));
63200 dissector_add_uint("wlan.tag.number", TAG_AID_ANNOUNCEMENT228, create_dissector_handle(dissect_aid_announcement, -1));
63201 dissector_add_uint("wlan.tag.number", TAG_PV1_PROBE_RESPONSE_OPTION229, create_dissector_handle(dissect_pv1_probe_response_option, -1));
63202 dissector_add_uint("wlan.tag.number", TAG_EL_OPERATION230, create_dissector_handle(dissect_el_operation, -1));
63203 dissector_add_uint("wlan.tag.number", TAG_SECTORIZED_GROUP_ID_LIST231, create_dissector_handle(dissect_sectorized_group_id_list, -1));
63204 dissector_add_uint("wlan.tag.number", TAG_S1G_OPERATION232, create_dissector_handle(dissect_s1g_operation, -1));
63205 dissector_add_uint("wlan.tag.number", TAG_HEADER_COMPRESSION233, create_dissector_handle(dissect_header_compression, -1));
63206 dissector_add_uint("wlan.tag.number", TAG_SST_OPERATION234, create_dissector_handle(dissect_sst_operation, -1));
63207 dissector_add_uint("wlan.tag.number", TAG_MAD235, create_dissector_handle(dissect_max_away_duration, -1));
63208 /* This Cisco proprietary IE seems to mimic 221 */
63209 dissector_add_uint("wlan.tag.number", TAG_CISCO_VENDOR_SPECIFIC150, create_dissector_handle(ieee80211_tag_vendor_specific_ie, -1));
63210 dissector_add_uint("wlan.tag.number", TAG_SYMBOL_PROPRIETARY173, create_dissector_handle(ieee80211_tag_symbol_proprietary_ie, -1));
63211 dissector_add_uint("wlan.tag.number", TAG_MOBILITY_DOMAIN54, create_dissector_handle(dissect_mobility_domain, -1));
63212 dissector_add_uint("wlan.tag.number", TAG_FAST_BSS_TRANSITION55, create_dissector_handle(dissect_fast_bss_transition, -1));
63213 dissector_add_uint("wlan.tag.number", TAG_MMIE76, create_dissector_handle(dissect_mmie, -1));
63214 dissector_add_uint("wlan.tag.number", TAG_NO_BSSID_CAPABILITY83, create_dissector_handle(dissect_no_bssid_capability, -1));
63215 dissector_add_uint("wlan.tag.number", TAG_SSID_LIST84, create_dissector_handle(dissect_ssid_list, -1));
63216 dissector_add_uint("wlan.tag.number", TAG_MULTIPLE_BSSID_INDEX85, create_dissector_handle(dissect_multiple_bssid_index, -1));
63217 dissector_add_uint("wlan.tag.number", TAG_TIME_ZONE98, create_dissector_handle(dissect_time_zone, -1));
63218 dissector_add_uint("wlan.tag.number", TAG_TIMEOUT_INTERVAL56, create_dissector_handle(dissect_timeout_interval, -1));
63219 dissector_add_uint("wlan.tag.number", TAG_RIC_DATA57, create_dissector_handle(dissect_ric_data, -1));
63220 dissector_add_uint("wlan.tag.number", TAG_LINK_IDENTIFIER101, create_dissector_handle(dissect_link_identifier, -1));
63221 dissector_add_uint("wlan.tag.number", TAG_WAKEUP_SCHEDULE102, create_dissector_handle(dissect_wakeup_schedule, -1));
63222 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_SWITCH_TIMING104, create_dissector_handle(dissect_channel_switch_timing, -1));
63223 dissector_add_uint("wlan.tag.number", TAG_PTI_CONTROL105, create_dissector_handle(dissect_pti_control, -1));
63224 dissector_add_uint("wlan.tag.number", TAG_PU_BUFFER_STATUS106, create_dissector_handle(dissect_pu_buffer_status, -1));
63225 dissector_add_uint("wlan.tag.number", TAG_HT_CAPABILITY45, create_dissector_handle(dissect_ht_capability_ie, -1));
63226 dissector_add_uint("wlan.tag.number", TAG_HT_OPERATION61, create_dissector_handle(dissect_ht_operation_ie, -1));
63227 dissector_add_uint("wlan.tag.number", TAG_SECONDARY_CHANNEL_OFFSET62, create_dissector_handle(dissect_secondary_channel_offset_ie, -1));
63228 dissector_add_uint("wlan.tag.number", TAG_RCPI53, create_dissector_handle(dissect_rcpi_ie, -1));
63229 dissector_add_uint("wlan.tag.number", TAG_BSS_AVG_ACCESS_DELAY63, create_dissector_handle(dissect_bss_avg_access_delay_ie, -1));
63230 dissector_add_uint("wlan.tag.number", TAG_ANTENNA64, create_dissector_handle(dissect_antenna_ie, -1));
63231 dissector_add_uint("wlan.tag.number", TAG_RSNI65, create_dissector_handle(dissect_rsni_ie, -1));
63232 dissector_add_uint("wlan.tag.number", TAG_MEASURE_PILOT_TRANS66, create_dissector_handle(dissect_measurement_pilot_trans_ie, -1));
63233 dissector_add_uint("wlan.tag.number", TAG_BSS_AVB_ADM_CAPACITY67, create_dissector_handle(dissect_bss_available_admission_capacity_ie, -1));
63234 dissector_add_uint("wlan.tag.number", TAG_IE_68_CONFLICT68, create_dissector_handle(ieee80211_tag_ie_68_conflict, -1));
63235 dissector_add_uint("wlan.tag.number", TAG_BSS_MAX_IDLE_PERIOD90, create_dissector_handle(dissect_bss_max_idle_period, -1));
63236 dissector_add_uint("wlan.tag.number", TAG_TFS_REQUEST91, create_dissector_handle(dissect_tfs_request, -1));
63237 dissector_add_uint("wlan.tag.number", TAG_TFS_RESPONSE92, create_dissector_handle(dissect_tfs_response, -1));
63238 dissector_add_uint("wlan.tag.number", TAG_WNM_SLEEP_MODE93, create_dissector_handle(dissect_wnm_sleep_mode, -1));
63239 dissector_add_uint("wlan.tag.number", TAG_TIME_ADV69, create_dissector_handle(dissect_time_adv, -1));
63240 dissector_add_uint("wlan.tag.number", TAG_RM_ENABLED_CAPABILITY70, create_dissector_handle(dissect_rm_enabled_capabilities_ie, -1));
63241 dissector_add_uint("wlan.tag.number", TAG_MULTIPLE_BSSID71, create_dissector_handle(dissect_multiple_bssid_ie, -1));
63242 dissector_add_uint("wlan.tag.number", TAG_20_40_BSS_CO_EX72, create_dissector_handle(dissect_20_40_bss_coexistence, -1));
63243 dissector_add_uint("wlan.tag.number", TAG_20_40_BSS_INTOL_CH_REP73, create_dissector_handle(dissect_20_40_bss_intolerant, -1));
63244 dissector_add_uint("wlan.tag.number", TAG_OVERLAP_BSS_SCAN_PAR74, create_dissector_handle(dissect_overlap_bss_scan_par, -1));
63245 dissector_add_uint("wlan.tag.number", TAG_RIC_DESCRIPTOR75, create_dissector_handle(dissect_ric_descriptor, -1));
63246 dissector_add_uint("wlan.tag.number", TAG_MESH_PEERING_MGMT117, create_dissector_handle(ieee80211_tag_mesh_peering_mgmt, -1));
63247 dissector_add_uint("wlan.tag.number", TAG_MESH_CONFIGURATION113, create_dissector_handle(ieee80211_tag_mesh_configuration, -1));
63248 dissector_add_uint("wlan.tag.number", TAG_MESH_ID114, create_dissector_handle(ieee80211_tag_mesh_id, -1));
63249 dissector_add_uint("wlan.tag.number", TAG_BEACON_TIMING120, create_dissector_handle(ieee80211_tag_beacon_timing, -1));
63250 dissector_add_uint("wlan.tag.number", TAG_GANN125, create_dissector_handle(ieee80211_tag_gann, -1));
63251 dissector_add_uint("wlan.tag.number", TAG_MESH_PREQ130, create_dissector_handle(ieee80211_tag_mesh_preq, -1));
63252 dissector_add_uint("wlan.tag.number", TAG_MESH_PREP131, create_dissector_handle(ieee80211_tag_mesh_prep, -1));
63253 dissector_add_uint("wlan.tag.number", TAG_MESH_PERR132, create_dissector_handle(ieee80211_tag_mesh_perr, -1));
63254 dissector_add_uint("wlan.tag.number", TAG_PXU137, create_dissector_handle(ieee80211_tag_pxu, -1));
63255 dissector_add_uint("wlan.tag.number", TAG_PXUC138, create_dissector_handle(ieee80211_tag_pxuc, -1));
63256 dissector_add_uint("wlan.tag.number", TAG_MIC140, create_dissector_handle(ieee80211_tag_mic, -1));
63257 dissector_add_uint("wlan.tag.number", TAG_RANN126, create_dissector_handle(ieee80211_tag_rann, -1));
63258 dissector_add_uint("wlan.tag.number", TAG_MESH_CHANNEL_SWITCH118, create_dissector_handle(ieee80211_tag_mesh_channel_switch, -1));
63259 dissector_add_uint("wlan.tag.number", TAG_INTERWORKING107, create_dissector_handle(dissect_interworking, -1));
63260 dissector_add_uint("wlan.tag.number", TAG_ADVERTISEMENT_PROTOCOL108, create_dissector_handle(dissect_advertisement_protocol, -1));
63261 dissector_add_uint("wlan.tag.number", TAG_QOS_MAP_SET110, create_dissector_handle(dissect_qos_map_set, -1));
63262 dissector_add_uint("wlan.tag.number", TAG_ROAMING_CONSORTIUM111, create_dissector_handle(dissect_roaming_consortium, -1));
63263 dissector_add_uint("wlan.tag.number", TAG_AP_CHANNEL_REPORT51, create_dissector_handle(dissect_ap_channel_report, -1));
63264 dissector_add_uint("wlan.tag.number", TAG_NEIGHBOR_REPORT52, create_dissector_handle(dissect_neighbor_report, -1));
63265 dissector_add_uint("wlan.tag.number", TAG_MESH_AWAKE_WINDOW119, create_dissector_handle(ieee80211_tag_mesh_awake_window, -1));
63266 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_CHANNEL_SWITCH_ANNOUNCEMENT60, create_dissector_handle(ieee80211_tag_channel_switch_announcement, -1));
63267 dissector_add_uint("wlan.tag.number", TAG_SUPPORTED_OPERATING_CLASSES59, create_dissector_handle(ieee80211_tag_supported_operating_classes, -1));
63268 dissector_add_uint("wlan.tag.number", TAG_RELAY_CAPABILITIES167, create_dissector_handle(add_tag_relay_capabilities, -1));
63269 dissector_add_uint("wlan.tag.number", TAG_DMG_BSS_PARAMETER_CHANGE152, create_dissector_handle(ieee80211_tag_bss_parameter_change, -1));
63270 dissector_add_uint("wlan.tag.number", TAG_DMG_CAPABILITIES148, create_dissector_handle(ieee80211_tag_dmg_capabilities, -1));
63271 dissector_add_uint("wlan.tag.number", TAG_DMG_OPERATION151, create_dissector_handle(ieee80211_tag_dmg_operation, -1));
63272 dissector_add_uint("wlan.tag.number", TAG_ANTENNA_SECTOR_ID190, create_dissector_handle(ieee80211_tag_antenna_section_id, -1));
63273 dissector_add_uint("wlan.tag.number", TAG_EXTENDED_SCHEDULE144, create_dissector_handle(ieee80211_tag_extended_schedule, -1));
63274 dissector_add_uint("wlan.tag.number", TAG_STA_AVAILABILITY145, create_dissector_handle(ieee80211_tag_sta_availability, -1));
63275 dissector_add_uint("wlan.tag.number", TAG_NEXT_DMG_ATI147, create_dissector_handle(ieee80211_tag_next_dmg_ati, -1));
63276 dissector_add_uint("wlan.tag.number", TAG_NEXTPCP_LIST160, create_dissector_handle(ieee80211_tag_nextpcp_list, -1));
63277 dissector_add_uint("wlan.tag.number", TAG_PCP_HANDOVER161, create_dissector_handle(ieee80211_tag_pcp_handover, -1));
63278 dissector_add_uint("wlan.tag.number", TAG_BEAMLINK_MAINTENANCE169, create_dissector_handle(ieee80211_tag_beamlink_maintenance, -1));
63279 dissector_add_uint("wlan.tag.number", TAG_QUIET_PERIOD_RES177, create_dissector_handle(ieee80211_tag_quiet_period_res, -1));
63280 dissector_add_uint("wlan.tag.number", TAG_INTRA_ACCESS_CAT_PRIO184, create_dissector_handle(ieee80211_tag_intra_access_cat_prio, -1));
63281 dissector_add_uint("wlan.tag.number", TAG_SCS_DESCRIPTOR185, create_dissector_handle(ieee80211_tag_scs_descriptor, -1));
63282 dissector_add_uint("wlan.tag.number", TAG_RELAY_TRANSFER_PARAM168, create_dissector_handle(ieee80211_tag_relay_transfer_param, -1));
63283 dissector_add_uint("wlan.tag.number", TAG_DMG_BEAM_REFINEMENT153, create_dissector_handle(ieee80211_tag_dmg_beam_refinement, -1));
63284 dissector_add_uint("wlan.tag.number", TAG_WAKEUP_SCHEDULE_AD143, create_dissector_handle(ieee80211_tag_wakeup_schedule_ad, -1));
63285 dissector_add_uint("wlan.tag.number", TAG_DMG_TSPEC146, create_dissector_handle(ieee80211_tag_dmg_tspec, -1));
63286 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_MEASURMENT_FB154, create_dissector_handle(ieee80211_tag_channel_measurement_fb, -1));
63287 dissector_add_uint("wlan.tag.number", TAG_AWAKE_WINDOW157, create_dissector_handle(ieee80211_tag_awake_window, -1));
63288 dissector_add_uint("wlan.tag.number", TAG_ADDBA_EXT159, create_dissector_handle(ieee80211_tag_addba_ext, -1));
63289 dissector_add_uint("wlan.tag.number", TAG_MULTI_BAND158, create_dissector_handle(ieee80211_tag_multi_band, -1));
63290 dissector_add_uint("wlan.tag.number", TAG_DMG_LINK_MARGIN162, create_dissector_handle(ieee80211_tag_dmg_link_margin, -1));
63291 dissector_add_uint("wlan.tag.number", TAG_DMG_LINK_ADAPTION_ACK172, create_dissector_handle(ieee80211_tag_dmg_link_adaption_ack, -1));
63292 dissector_add_uint("wlan.tag.number", TAG_FILS_INDICATION240, create_dissector_handle(ieee80211_tag_fils_indication, -1));
63293 dissector_add_uint("wlan.tag.number", TAG_SWITCHING_STREAM163, create_dissector_handle(ieee80211_tag_switching_stream, -1));
63294 dissector_add_uint("wlan.tag.number", TAG_ELEMENT_ID_EXTENSION255, create_dissector_handle(ieee80211_tag_element_id_extension, -1));
63295 dissector_add_uint("wlan.tag.number", TAG_TWT216, create_dissector_handle(ieee80211_tag_twt, -1));
63296 dissector_add_uint("wlan.tag.number", TAG_RSNX244, create_dissector_handle(ieee80211_tag_rsnx, -1));
63297 dissector_add_uint("wlan.tag.number", TAG_CHANNEL_USAGE97, create_dissector_handle(ieee80211_tag_channel_usage, -1));
63298 dissector_add_uint("wlan.tag.number", TAG_DMS_REQUEST99, create_dissector_handle(ieee80211_tag_dms_request, -1));
63299 dissector_add_uint("wlan.tag.number", TAG_DMS_RESPONSE100, create_dissector_handle(ieee80211_tag_dms_response, -1));
63300
63301 /* Vendor specific actions */
63302 dissector_add_uint("wlan.action.vendor_specific", OUI_MARVELL0x005043, create_dissector_handle(dissect_vendor_action_marvell, -1));
63303 dissector_add_uint("wlan.action.vendor_specific", OUI_WFA0x506F9A, create_dissector_handle(dissect_vendor_action_wifi_alliance, -1));
63304
63305 /* Protected action WFA ... */
63306 dissector_add_uint("wlan.action.wifi_alliance.subtype", WFA_SUBTYPE_ACTION_QOS_MGMT0x1A, create_dissector_handle(dissect_vendor_action_wfa_qos_mgmt, -1));
63307 dissector_add_uint("wlan.action.wifi_alliance.subtype", WFA_SUBTYPE_ACTION_CAPABILITIES0x1B, create_dissector_handle(dissect_wfa_capa, -1));
63308
63309 dissector_add_uint("wlan.anqp.vendor_specific", OUI_WFA0x506F9A, create_dissector_handle(dissect_vendor_wifi_alliance_anqp, -1));
63310 dissector_add_uint("wlan.anqp.wifi_alliance.subtype", WFA_ANQP_SUBTYPE_HS2017, create_dissector_handle(dissect_hs20_anqp, -1));
63311 dissector_add_uint("wlan.anqp.wifi_alliance.subtype", WFA_ANQP_SUBTYPE_MBO18, create_dissector_handle(dissect_mbo_anqp, -1));
63312 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_SUBSCRIPTION_REMEDIATION0, create_dissector_handle(dissect_hs20_subscription_remediation, -1));
63313 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_DEAUTHENTICATION_IMMINENT1, create_dissector_handle(dissect_hs20_deauthentication_imminent, -1));
63314 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_HS20_INDICATION16, create_dissector_handle(dissect_hs20_indication, -1));
63315 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_OSEN20, create_dissector_handle(dissect_hs20_osen, -1));
63316 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_OWE_TRANSITION_MODE28, create_dissector_handle(dissect_owe_transition_mode, -1));
63317 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_TRANSITION_DISABLE_KDE32, create_dissector_handle(dissect_transition_disable_kde, -1));
63318 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_WIFI_60G23, create_dissector_handle(dissect_wfa_60g_ie, -1));
63319 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_MBO_OCE22, create_dissector_handle(dissect_mbo_oce, -1));
63320 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));
63321 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_WNM_SUBTYPE_CELL_DATA_CAPABILITIES3, create_dissector_handle(dissect_wfa_wnm_cell_cap, -1));
63322 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_QOS_MGMT34, create_dissector_handle(dissect_qos_mgmt, -1));
63323 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_WFA_CAPA35, create_dissector_handle(dissect_wfa_capa, -1));
63324 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE41, create_dissector_handle(dissect_wfa_rsn_override, -1));
63325 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE_242, create_dissector_handle(dissect_wfa_rsn_override_2, -1));
63326 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSNX_OVERRIDE43, create_dissector_handle(dissect_wfa_rsnx_override, -1));
63327 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_SELECTION44, create_dissector_handle(dissect_wfa_rsn_selection, -1));
63328 dissector_add_uint("wlan.ie.wifi_alliance.subtype", WFA_SUBTYPE_RSN_OVERRIDE_LINK_KDE45, create_dissector_handle(dissect_wfa_rsn_override_link_kde, -1));
63329}
63330
63331/*
63332 * Editor modelines
63333 *
63334 * Local Variables:
63335 * c-basic-offset: 2
63336 * tab-width: 8
63337 * indent-tabs-mode: nil
63338 * End:
63339 *
63340 * ex: set shiftwidth=2 tabstop=8 expandtab:
63341 * :indentSize=2:tabSize=8:noTabs=true:
63342 */